Recommended Posts

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 by pop3k

Share this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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).

 

Share this post


Link to post
Share on other sites

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.

rectangle.thumb.gif.09e8864630781f9d7e8683a28e2730db.gif

ZwForm.rar

Share this post


Link to post
Share on other sites

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 by pop3k

Share this post


Link to post
Share on other sites

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.

image.png.693b502e2c921933302a34f0dc2b2063.png

Edited by Parikon

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...