Parikon Opublikowano 15 Listopada 2017 Zgłoś Opublikowano 15 Listopada 2017 (edytowane) 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. Edytowane 15 Listopada 2017 przez Parikon dmatusz3 1 Cytuj
Parikon Opublikowano 15 Listopada 2017 Autor Zgłoś Opublikowano 15 Listopada 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. Cytuj
dmatusz3 Opublikowano 16 Listopada 2017 Zgłoś Opublikowano 16 Listopada 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 Cytuj
Parikon Opublikowano 16 Listopada 2017 Autor Zgłoś Opublikowano 16 Listopada 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 Cytuj
Parikon Opublikowano 16 Listopada 2017 Autor Zgłoś Opublikowano 16 Listopada 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 Cytuj
dmatusz3 Opublikowano 17 Listopada 2017 Zgłoś Opublikowano 17 Listopada 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). Cytuj
Parikon Opublikowano 17 Listopada 2017 Autor Zgłoś Opublikowano 17 Listopada 2017 (edytowane) @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. Edytowane 17 Listopada 2017 przez Parikon Cytuj
Parikon Opublikowano 17 Listopada 2017 Autor Zgłoś Opublikowano 17 Listopada 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 Cytuj
dmatusz3 Opublikowano 17 Listopada 2017 Zgłoś Opublikowano 17 Listopada 2017 Faktycznie trochę za bardzo na skróty poszedłem Cytuj
Parikon Opublikowano 17 Listopada 2017 Autor Zgłoś Opublikowano 17 Listopada 2017 A ja się nauczyłem, że można na skróty. efekt najnowszej kompilacji. Cytuj
dmatusz3 Opublikowano 22 Listopada 2017 Zgłoś Opublikowano 22 Listopada 2017 Dzięki za opis, udało mi się to powtórzyć bez problemu. A tutaj plik biblioteki projekt_forum.dll Cytuj
Parikon Opublikowano 22 Listopada 2017 Autor Zgłoś Opublikowano 22 Listopada 2017 (edytowane) 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 } } } Edytowane 22 Listopada 2017 przez Parikon Cytuj
dmatusz3 Opublikowano 23 Listopada 2017 Zgłoś Opublikowano 23 Listopada 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 Cytuj
Parikon Opublikowano 26 Listopada 2017 Autor Zgłoś Opublikowano 26 Listopada 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 i kruszynski 2 Cytuj
dmatusz3 Opublikowano 29 Listopada 2017 Zgłoś Opublikowano 29 Listopada 2017 Instalacja przebiegła bez problemów. Powtórzę operacje jeszcze na zrzutach ekranu. Cytuj
Parikon Opublikowano 8 Grudnia 2017 Autor Zgłoś Opublikowano 8 Grudnia 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. Cytuj
dmatusz3 Opublikowano 27 Grudnia 2017 Zgłoś Opublikowano 27 Grudnia 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ę Cytuj
Tafla Opublikowano 15 Stycznia 2018 Zgłoś Opublikowano 15 Stycznia 2018 3 godziny temu, s1016 napisał: Kiedy kontynuacja? Przyłączam się do pytania. A jak np. narysować linię albo koło? Cytuj
Parikon Opublikowano 16 Stycznia 2018 Autor Zgłoś Opublikowano 16 Stycznia 2018 20 godzin temu, s1016 napisał: Kiedy kontynuacja? Pamiętam i na pewno wrócę do tego tematu. Cytuj
Parikon Opublikowano 16 Stycznia 2018 Autor Zgłoś Opublikowano 16 Stycznia 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 Cytuj
Parikon Opublikowano 11 Listopada 2018 Autor Zgłoś Opublikowano 11 Listopada 2018 Polecam ten kurs do przerobienia. Przyda się w dalszej pracy nad projekt forum. kruszynski 1 Cytuj
perlon Opublikowano 13 Listopada 2018 Zgłoś Opublikowano 13 Listopada 2018 (edytowane) 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? Edytowane 13 Listopada 2018 przez perlon Cytuj
s1016 Opublikowano 13 Listopada 2018 Zgłoś Opublikowano 13 Listopada 2018 https://www.bandicam.com/pl/ 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ą.