Parikon Posted November 15, 2017 Report Share Posted November 15, 2017 (edited) W tym temacie chciałbym od podstaw rozpocząć tworzenie nakładki zawartej w jednym pliku z rozszerzeniem dll. Tematem nakładki będzie lista projektów. Temat ten ma za zadanie zachęcić niektórych forumowiczów (tych którzy się "zarażą") do tworzenia aplikacji uruchamianych bezpośrednio z ZwCAD-a i nauki C#. Kod programu będzie w pełni dostępny w tym temacie na zasadzie bierz i używaj , a jak chcesz to dodaj coś od siebie. Sam osobiście nie czuję się ekspertem, ale tym co już potrafię postaram się dojść do ciekawego efektu. Co będzie potrzebne: Microsoft Visual Studio - polecam darmową wersję Community 2017, gdyż na nim będę pokazywał jak co zrobić. Zw-CAD w zasadzie każdy. Z zainstalowaniem MVS2017 ,każdy sobie poradzi. Ponieważ to kombajn to zalecam instalować tylko biblioteki netfamework, czyli podstawowy pakiet. Poniżej pierwsze kroki. Edited November 15, 2017 by Parikon dmatusz3 1 Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 15, 2017 Author Report Share Posted November 15, 2017 Tutaj na przykładzie modułu PI efekt jaki chcę uzyskać. Powoli także zastanawiam się nad otwarciem kodu PI, ale to temat przyszłości. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 16, 2017 Report Share Posted November 16, 2017 Pomysł jest świetny, popieram. MS Visual Studio możemy pobrać z tego adresu https://www.visualstudio.com/pl/downloads Na początku pobiera się program, który pobiera instalator. Trzeba tam wybrać to co zaznaczyłem na obrazku poniżej. Parikon 1 Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 16, 2017 Author Report Share Posted November 16, 2017 Dzięki współpracy temat zawsze będzie miał obszerniejszą treść. Dokładnie tak jak pokazał @dmatusz3 wybieramy tylko Programowanie aplikacji klasycznych.... Mały komentarz do pierwszego filmu. Dodałem do odwołań projektu dwa niezbędne pliki, które znajdują się w katalogu ZwCAD-a. Następny film pokazuje czynności jakie trzeba dalej wykonać aby kontynuować tworzenie nakładki. Przy czym nie ma potrzeby za dużo klepać kodu skoro już go gdzieś mamy, więc ja otworzyłem wcześniejszy projekt gdzie już podobny kod przećwiczyłem i dodałem go do projektu "projekt_forum.dll". "Zarażeni" skopiują sobie kod, który opublikuje pod filmem. using System; using System.Collections.Generic; using System.Linq; using System.Text; using zzr = ZwSoft.ZwCAD.Runtime; using zza = ZwSoft.ZwCAD.ApplicationServices; using System.Windows; namespace projekt_forum.dll { public partial class Window1 : Window { public Window1() { UserControl1 mojakontrolka = new UserControl1(); //this.Content = mojakontrolka; //this.Content = mojakontrolka; this.Title = "Lista projektów"; this.Width = 800; this.Height = 600; //this.MaxHeight = 240; //this.MinWidth = 250; this.MinHeight = 600; this.MinWidth = 800; this.AddChild(mojakontrolka); this.WindowStartupLocation = WindowStartupLocation.CenterScreen; this.WindowStyle = WindowStyle.ThreeDBorderWindow; } } public partial class Window2 : Window { public Window2() { UserControl2 mojakontrolka = new UserControl2(); //this.Content = mojakontrolka; //this.Content = mojakontrolka; this.Title = "Lista projektów - formularz"; int w = 600; int h = 220; this.Width = w; this.Height = h; this.MinWidth = w; this.MinHeight = h; this.MaxWidth = w; this.MaxHeight = h; this.AddChild(mojakontrolka); this.WindowStartupLocation = WindowStartupLocation.CenterScreen; this.WindowStyle = WindowStyle.ThreeDBorderWindow; } } public class Class1 { [zzr.CommandMethod("PROJEKT_FORUM")]//komenda jaką wywołamy program w ZwCAD public void autocadokno() { Window1 win = new Window1(); zza.Application.ShowModalWindow(win);//wywoła okno nr 1 } } } dmatusz3 1 Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 16, 2017 Author Report Share Posted November 16, 2017 Na końcu ostatniego filmu w sprawozdaniu z kompilacji VS wyświetla ścieżkę gdzie znajduje się plik aplikacji. Wystarczy go teraz wczytać poleceniem netload i sprawdzić czy uruchomi się nam okno nakładki Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 17, 2017 Report Share Posted November 17, 2017 Informacji już było sporo, postanowiłem je zebrać wszystkie w jednym filmie. Kilka uwag: Ścieżki do bibliotek ZWCADa dostępne są w katalogach, jak poniżej. Przy tworzeniu nowej biblioteki w VS, powinna się ona nazywać projekt_forum tak jak na początku było założone. Jeśli wpiszemy inną nazwę to pojawią się błędy w kompilacji (skopiowany kod nie zadziała). Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 17, 2017 Author Report Share Posted November 17, 2017 (edited) @dmatusz3 zrobił trzy rzeczy inaczej niż ja. Po pierwsze nazwę dla biblioteki class podał inną niż ja. Po drugie utworzył swoją bibliotekę pod wersją 4.6.1 Frameworku, a ja w wersji 4.0. Po trzecie skopiował całą zawartość kodu na raz using System; using System.Collections.Generic; using System.Linq; using System.Text; //tu wkleiłem pierwszą część namespace projekt_forum.dll { //tu wkleiłem część } I pokazał, że okno działa. VS tworzy przestrzeń nazw o nazwie zgodnej z nazwą biblioteki klas jaka zostanie utworzona w pliku dll. Ja tworząc bibliotekę klas nazwałem ją projekt_forum.dll co da wynikowo plik projekt_forum.dll.dll. Nie wygląda to ładnie. Proponuję zatem tworzyć sobie dowolną nazwę biblioteki nazw. Ważne aby nie kopiować jak @dmatusz3 w jednym ciągu a tylko tak jak pokazałem powyżej. Edited November 17, 2017 by Parikon Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 17, 2017 Author Report Share Posted November 17, 2017 Utworzyłem bibliotekę klas o nazwie projekt_forum i skopiowałem całość kodu dodanego kilka postów wyżej. Projekt skompilował się bez problemu. Teraz dodam kilka kontrolek wewnątrz kontrolki Usercontrol1, która znów wypełnia obiekt window1. dmatusz3 1 Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 17, 2017 Report Share Posted November 17, 2017 Faktycznie trochę za bardzo na skróty poszedłem Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 17, 2017 Author Report Share Posted November 17, 2017 A ja się nauczyłem, że można na skróty. efekt najnowszej kompilacji. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 22, 2017 Report Share Posted November 22, 2017 Dzięki za opis, udało mi się to powtórzyć bez problemu. A tutaj plik biblioteki projekt_forum.dll Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 22, 2017 Author Report Share Posted November 22, 2017 (edited) Aby obiekt UserControli1 w pełni wypełniał okno trzeba go powiększyć lub w zakresie definiowania klasy Window1 wpisać, że zawartość okna ma go wypełniać w całości. W klasie Window2 wysokość i szerokość okna będziemy podawać przy tworzeniu nowego okna. using System; using System.Collections.Generic; using System.Linq; using System.Text; using zzr = ZwSoft.ZwCAD.Runtime; using zza = ZwSoft.ZwCAD.ApplicationServices; using System.Windows; namespace projekt_forum // zmieniłem tytuł przestrzeni nazw { public partial class Window1 : Window { public Window1() { UserControl1 mojakontrolka = new UserControl1(); //this.Content = mojakontrolka; //this.Content = mojakontrolka; this.Title = "Lista projektów"; this.Width = 800; this.Height = 600; //this.MaxHeight = 240; //this.MinWidth = 250; this.MinHeight = 600; this.MinWidth = 800; this.AddChild(mojakontrolka); //dodany kod //zawartość okna wypełnia w całości to okno this.HorizontalContentAlignment = HorizontalAlignment.Stretch; this.VerticalContentAlignment = VerticalAlignment.Stretch; // koniec dodany kod this.WindowStartupLocation = WindowStartupLocation.CenterScreen; this.WindowStyle = WindowStyle.ThreeDBorderWindow; } } public partial class Window2 : Window { public Window2(int w, int h)// szerkość i wysokość zdefiniujemy przy tworzeniu okna { UserControl2 mojakontrolka = new UserControl2(); //this.Content = mojakontrolka; //this.Content = mojakontrolka; this.Title = "Lista projektów - formularz"; this.Width = w; this.Height = h; this.MinWidth = w; this.MinHeight = h; this.MaxWidth = w; this.MaxHeight = h; this.AddChild(mojakontrolka); //dodany kod //zawartość okna wypełnia w całości to okno this.HorizontalContentAlignment = HorizontalAlignment.Stretch; this.VerticalContentAlignment = VerticalAlignment.Stretch; //koniec dodany kod this.WindowStartupLocation = WindowStartupLocation.CenterScreen; this.WindowStyle = WindowStyle.ThreeDBorderWindow; } } public class Class1 { [zzr.CommandMethod("PROJEKT_FORUM")]//komenda jaką wywołamy program w ZwCAD public void ZwCAD2018okno()//aminiłem nazwe metody { Window1 win = new Window1(); zza.Application.ShowModalWindow(win);//wywoła okno nr 1 } } } Edited November 22, 2017 by Parikon Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 23, 2017 Report Share Posted November 23, 2017 Dzięki za sugestie odnośnie dopasowania. Trochę poeksperymentowałem, pomogła zmiana w TabControl z na Teraz mogę się pochwalić elastycznym oknem. Załączam także bibliotekę projekt_forum.dll Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 26, 2017 Author Report Share Posted November 26, 2017 Lista projektów będzie zapisywana w bazie danych. Wybrałem system bazodanowy Sqlite, którego biblioteki klas są w domenie publicznej. Visual Studio za pomocą usługi NuGet w "prosty" sposób dostarczy potrzebne biblioteki do naszego projektu. JasW and kruszynski 2 Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted November 29, 2017 Report Share Posted November 29, 2017 Instalacja przebiegła bez problemów. Powtórzę operacje jeszcze na zrzutach ekranu. Quote Link to comment Share on other sites More sharing options...
Parikon Posted December 8, 2017 Author Report Share Posted December 8, 2017 Teraz dodam zdarzenie ładowania kontrolki użytkownika. Gdy program będzie uruchamiany wywoływane będą metody jakie umieścimy w tym zdarzeniu. Dodamy także kontrolkę DataGrid, która służy do wyświetlania i przeglądania danych. Kontrolka DataGrid po wstawieniu ma tzw spinacze , którymi przypinamy ją do "rodzica". Dzięki temu będzie powiększać się wraz z powiększaniem okna. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted December 27, 2017 Report Share Posted December 27, 2017 Udało się wszystko zrobić według filmu, załączam plik z projektem projekt_forum.dll Postaram się nieco "spłaszczyć" film do obrazków W oknie i w zaznaczonym miejscu dopisujemy Teraz dodajemy kontrolkę (pamiętając o dociągnięciu do krawędzi i kliknięciu na spinacze w celu zakotwienia krawędzi kontrolki do okna zewnętrznego). i zmieniamy jej nazwę Quote Link to comment Share on other sites More sharing options...
s1016 Posted January 15, 2018 Report Share Posted January 15, 2018 Kiedy kontynuacja? Quote Link to comment Share on other sites More sharing options...
Tafla Posted January 15, 2018 Report Share Posted January 15, 2018 3 godziny temu, s1016 napisał: Kiedy kontynuacja? Przyłączam się do pytania. A jak np. narysować linię albo koło? Quote Link to comment Share on other sites More sharing options...
Parikon Posted January 16, 2018 Author Report Share Posted January 16, 2018 20 godzin temu, s1016 napisał: Kiedy kontynuacja? Pamiętam i na pewno wrócę do tego tematu. Quote Link to comment Share on other sites More sharing options...
Parikon Posted January 16, 2018 Author Report Share Posted January 16, 2018 16 godzin temu, Tafla napisał: Przyłączam się do pytania. A jak np. narysować linię albo koło? How to draw circle autocad net How to draw line autocad net Odpowiedź wujka google Quote Link to comment Share on other sites More sharing options...
s1016 Posted May 10, 2018 Report Share Posted May 10, 2018 Będzie kontynuacja? Quote Link to comment Share on other sites More sharing options...
Parikon Posted November 11, 2018 Author Report Share Posted November 11, 2018 Polecam ten kurs do przerobienia. Przyda się w dalszej pracy nad projekt forum. kruszynski 1 Quote Link to comment Share on other sites More sharing options...
perlon Posted November 13, 2018 Report Share Posted November 13, 2018 (edited) Chciałbym dorzucić swoje uwagi w temacie architektury. Proponowałbym na początek rozdzielenie projektu co najmniej na dwa moduły dll. 1. Core Aplikacji : obsługa domeny czyli co aplikacja ma robić. Może być w tym cała obsługa okien dialogowych, dostęp do bazy danych i co tam jeszcze się uda napisać 2. Moduł startowy : w zasadzie jedna klasa odpowiedzialna za uruchomienie Core Struktura na obrazku na końcu posta. Uzasadnienie : Jądro aplikacji może wykonywać wszystkie swoje zadania nie mając świadomości istnienia platformy na jakiej jest wykonywane. W zasadzie otworzenie okna czy dostęp do bazy jest realizowany bez potrzeby angażowania ZwCAD'a. Łączenie jądra aplikacji z konkretną platformą ogranicza jego zastosowanie np. można przecież chcieć odpalić tą nakładkę na Auto... Brick... czy jakimś tam innym CAD w którym jest obsługa .NET albo bez użycia jakiejkolwiek platformy CAD. Autostart w module ładowanym przez NETLOAD w środowiski ZwCAD: using ProjektForum; using ZwSoft.ZwCAD.Runtime; namespace ProjectForumZwCAD { public class Autostart : IExtensionApplication { public void Initialize() { var projektForum = new Start(); } public void Terminate() { } } } Aplikacja zasadnicza (Core) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Windows.Forms; namespace ProjektForum { public class Start { public Form mainForm; public Start() { mainForm = new MainForm(); mainForm.Show(); } } } Starter aplikacji WinForm. using ProjektForum; using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace ProjektForumWinApp { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new MainForm()); } } } Należy zwrócić uwagę, że jedyne miejsce gdzie odwołuję się do biblioteki ZwCAD to jest autostart z namespace ProjectForumZwCAD. Pytanie na marginesie. Jakiś w miarę funkcjonalny i darmowy program do nagrywania pulpitu komputera żeby wstawić to później na forum? Coś polecicie? Edited November 13, 2018 by perlon Quote Link to comment Share on other sites More sharing options...
s1016 Posted November 13, 2018 Report Share Posted November 13, 2018 https://www.bandicam.com/pl/ Quote Link to comment Share on other sites More sharing options...
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.