pop3k Posted September 28, 2020 Report Posted September 28, 2020 (edited) 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. Edited September 28, 2020 by pop3k Quote
kruszynski Posted September 29, 2020 Report Posted September 29, 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. Quote
dmatusz3 Posted September 29, 2020 Report Posted September 29, 2020 Gdyby była potrzeba to pakiet programistyczny ZRX znajduje się tutaj. Quote
pop3k Posted September 29, 2020 Author Report Posted September 29, 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? Quote
dmatusz3 Posted September 29, 2020 Report Posted September 29, 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). Quote
perlon Posted September 29, 2020 Report Posted September 29, 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 Quote
pop3k Posted September 30, 2020 Author Report Posted September 30, 2020 (edited) 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. Edited September 30, 2020 by pop3k Quote
perlon Posted September 30, 2020 Report Posted September 30, 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 Quote
Parikon Posted September 30, 2020 Report Posted September 30, 2020 (edited) 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. Edited September 30, 2020 by Parikon kruszynski 1 Quote
pop3k Posted September 30, 2020 Author Report Posted September 30, 2020 Dzięki za porady. Nie czuję się obyty z programowaniem, więc takie wyjaśnianie jest w punkt. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.