pop3k Opublikowano 28 Września 2020 Zgłoś Opublikowano 28 Września 2020 (edytowane) Witam, robię aplikację VBA w ZWCad. Zastanawia mnie, czy jest możliwość szkicowania prostych obiektów podczas obsługi UserForm przez użytkownika. Dla przykładu otwieramy UserForm i do wpisania mamy 2 pola tekstowe: szerokość i wysokość prostokąta. Powyżej tych pól tekstowych mamy mały obszar ze szkicem, który pokazuje nam, jak ten prostokąt będzie wyglądał. Po każdorazowej zmianie jednego z pól zmieniają się proporcje prostokąta. Taki efekt osiągnąłem podczas pracy w JavaScript - Canvas. Edytowane 28 Września 2020 przez pop3k Cytuj
kruszynski Opublikowano 29 Września 2020 Zgłoś Opublikowano 29 Września 2020 Czy to koniecznie musi być w VBA? Wygląda na to, że to nie jest możliwe w VBA. Jedyne co mi przychodzi do głowy to wstawić do UserForm kontrolkę typu Image i wyświetlić Obrazek prostokąta w kontrolce Image, ale to taka dość karkołomna metoda. Może lepiej zrobić to w .Net VB, tam przypuszczam że będzie to łatwiejsze. Cytuj
dmatusz3 Opublikowano 29 Września 2020 Zgłoś Opublikowano 29 Września 2020 Gdyby była potrzeba to pakiet programistyczny ZRX znajduje się tutaj. Cytuj
pop3k Opublikowano 29 Września 2020 Autor Zgłoś Opublikowano 29 Września 2020 Myślałem o tym, żeby zrobić takie aplikacje w czym innym. Znacie jakiś ciekawy kurs .Net VB dedykowany pod Autocada? A najlepiej pod Zwcada? Cytuj
dmatusz3 Opublikowano 29 Września 2020 Zgłoś Opublikowano 29 Września 2020 W linku, który zamieściłem powyżej jest kilka plików pomocy oraz przykłady gotowe do użycia. Na forum tutaj mamy wątek, który myślę, że warto przejrzeć (pomimo, że nie dotyczy VB). Cytuj
perlon Opublikowano 29 Września 2020 Zgłoś Opublikowano 29 Września 2020 Takie coś naskrobałem na szybko w C#. Oczywiście kod jest siermiężny ale działa. Polecam używanie wysokopoziomowych języków .NET przy zabawach z WF ew. WPF. VBA miewa braki, aczkolwiek ma niezaprzeczalną zaletę, że jest "na pokładzie" i nie potrzeba zewnętrznego kompilatora. ZwForm.rar dmatusz3 1 Cytuj
pop3k Opublikowano 30 Września 2020 Autor Zgłoś Opublikowano 30 Września 2020 (edytowane) Bomba, domyśliłem się, że nie zrobię tego w VBA. Choć miałem nadzieję, że istnieje jakaś dodatkowa biblioteka. Kupiłem 2 kursy na Udemy dla vb.net. Będzie trochę czasu (hehe, dobre), to usiądę do nauki. Podpowiedzcie tylko, która biblioteka (pod czym szukać w przyszłości) byłaby odpowiedzialna za samo rysowanie/szkicowanie w WPF (okienkach jak to perlon wykonał). Wiem, że w JavaScript jest Canvas. PS. projekt_forum.dll już raz przerabiałem. Szkoda, że temat nie jest kontynuowany. Na pewno wrócę jeszcze do niego przy nauce. Edytowane 30 Września 2020 przez pop3k Cytuj
perlon Opublikowano 30 Września 2020 Zgłoś Opublikowano 30 Września 2020 Nie testowałem i nie wiem czy ZwCAD to obsłuży, ale skoro coś dłubałeś w JS + HTML to może to warto przećwiczyc? https://kojacek.wordpress.com/2020/09/08/okno-html-w-autocad-zie/ https://www.keanw.com/2013/03/implementing-an-autocad-palette-using-html5-and-javascript.html Cytuj
Parikon Opublikowano 30 Września 2020 Zgłoś Opublikowano 30 Września 2020 (edytowane) Jeżeli chcesz "oskryptować" ZwCad-a proponuje abyś wybrał język C#. W zasadzie będziesz mógł tworzyć rozwinięte programy. A narzędzia do tego są ogólnodostępne. Co prawda zamknięte, ale ZwCad-a też mogą "zwinąć" w pewnym momencie. Jeśli przerobiłeś projekt_forum.dll to wiesz jak utworzyć okno. Chociaż to co pokazałem może być nieprofesjonalne, ale ja też za programistę się nie uważam. 😉 Ja w zasadzie do rysowania wykorzystuję przestrzeń udostępnianą przez ZwCad. Ale możesz szkicować w oknie wykorzystując System.Windows,Shape. // Add the Polyline Element myPolyline = new Polyline(); myPolyline.Stroke = System.Windows.Media.Brushes.SlateGray; myPolyline.StrokeThickness = 2; myPolyline.FillRule = FillRule.EvenOdd; System.Windows.Point Point4 = new System.Windows.Point(1, 50); System.Windows.Point Point5 = new System.Windows.Point(10, 80); System.Windows.Point Point6 = new System.Windows.Point(20, 40); PointCollection myPointCollection2 = new PointCollection(); myPointCollection2.Add(Point4); myPointCollection2.Add(Point5); myPointCollection2.Add(Point6); myPolyline.Points = myPointCollection2; myGrid.Children.Add(myPolyline); https://docs.microsoft.com/en-us/dotnet/api/system.windows.shapes?view=netcore-3.1 Zatem robisz to tak w przykładzie projekt_forum.dll. Gdzieś w oknie dodajesz kontrolkę Canvas. W kodzie wpf będzie to np.<Canvas x:Name="Plotno" HorizontalAlignment="Left" Height="60" Margin="18,158,0,0" VerticalAlignment="Top" Width="160"/> Nazwałem kontrolkę "Plotno". Teraz w tej kontrolce możesz narysować przykładowo prostokąt. Przy czym jak ten prostokąt ma się pojawić po kliknięciu przycisku do dodaj kod do zdarzenia kliknięcia przycisku. Jak od razu przy uruchomieniu programu, to dodaj do zdarzenia uruchomienia programu: // Add a Rectangle Element System.Windows.Shapes.Rectangle myRect = new System.Windows.Shapes.Rectangle(); myRect.Stroke = System.Windows.Media.Brushes.Black; myRect.Fill = System.Windows.Media.Brushes.SkyBlue; myRect.HorizontalAlignment = HorizontalAlignment.Left; myRect.VerticalAlignment = VerticalAlignment.Center; myRect.Height = 50; myRect.Width = 50; Plotno.Children.Add(myRect); Oczywiście można to oprogramować dalej i prostokąt będzie przyjmował kształty wybranych z bazy danych prostokątów. Pojawi się taki kwadracik jak poniżej. Przy czym nie przybiera on kształtu odpowiedniego do długości B i L, gdyż jeszcze tego nie oprogramowałem. Sorry, że piszę tak jak do kogoś całkiem nie obytego z programowaniem, ale jak już piszę, to i komuś takiemu może się przyda. Edytowane 30 Września 2020 przez Parikon kruszynski 1 Cytuj
pop3k Opublikowano 30 Września 2020 Autor Zgłoś Opublikowano 30 Września 2020 Dzięki za porady. Nie czuję się obyty z programowaniem, więc takie wyjaśnianie jest w punkt. Cytuj
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.