Parikon Opublikowano 22 Czerwca 2017 Zgłoś Opublikowano 22 Czerwca 2017 Witam, Potrzebuję wsparcia. Oprogramowując przycisk wywołujący dowolną komendę w C# pod AutoCAD robię to tak: private void button_zigazag_Click(object sender, RoutedEventArgs e) { zza.Document acDoc = zza.Application.DocumentManager.MdiActiveDocument; Autodesk.AutoCAD.Internal.PreviousInput.CommandLineMonitorServices comLineMonServ = Autodesk.AutoCAD.Internal.PreviousInput.CommandLineMonitorServices.Instance(); Autodesk.AutoCAD.Internal.PreviousInput.CommandLineMonitor comMon = comLineMonServ.GetCommandLineMonitor(acDoc); if (comMon.CurrentCommandName.Length != 0) { acDoc.SendStringToExecute("\x03\x03", false, true, false); } acDoc.SendStringToExecute("WG_ZIGZAG ", true, false, true); Autodesk.AutoCAD.Internal.Utils.SetFocusToDwgView(); } W przypadku wywołania okna i komendy oraz gdy program jest w trakcie zapytania przykładowo " Wskaż punkt ..." gdy kliknę tak oprogramowany przycisk innej komendy automatycznie jest anulowana komenda w tle. Niestety nie wiem jak coś takiego uzyskać w ZwCAD. Aktualnie mam dopracowany taki kod dla ZwCAD 2017: private void button_zigazag_Click(object sender, RoutedEventArgs e) { zza.Document acDoc = zza.Application.DocumentManager.MdiActiveDocument; acDoc.SendStringToExecute("\x03\x03", false, true, false); acDoc.SendStringToExecute("WG_ZIGZAG ", true, false, true); ZwSoft.ZwCAD.Internal.Utils.SetFocusToDwgView(); } niestety ten kod nie zadziała tak jak ten powyżej. W ZwCAD net nie ma: ZwSoft.ZwCAD..Internal.PreviousInput.CommandLineMonitorServices comLineMonServ = ZwSoft.ZwCAD..Internal.PreviousInput.CommandLineMonitorServices.Instance(); ZwSoft.ZwCAD..Internal.PreviousInput.CommandLineMonitor comMon = comLineMonServ.GetCommandLineMonitor(acDoc); Na pewno jest jakieś lepsze rozwiązanie. Tym bardziej, że standardowe przyciski ZwCAD przerywają działające w tle funkcje. Jeśli to możliwe proszę o pomoc. Cytuj
kruszynski Opublikowano 23 Czerwca 2017 Zgłoś Opublikowano 23 Czerwca 2017 Zaraz chwila, bo chyba czegoś nie rozumiem. W AutoCAD wszystko jest OK? czy tutaj też anuluje polecenie? Chyba właśnie anulowaniu aktywnego polecenia ma służyć: acDoc.SendStringToExecute("\x03\x03", false, true, false); czy nie? Dlaczego ZwSoft.ZwCAD..Internal. pomiędzy ZwCAD a Internal są dwie kropki? 17 godzin temu, Parikon napisał: Na pewno jest jakieś lepsze rozwiązanie. O rozwiązanie jakiego problemu chodzi? Cytuj
Parikon Opublikowano 23 Czerwca 2017 Autor Zgłoś Opublikowano 23 Czerwca 2017 (edytowane) Już wyjaśniam. Dwie kropki to "się zrobiły" niechcący. Proszę na to nie zwracać uwagi. Film pierwszy. Wybrałem jakąś komendę. Wyskakuje okno. W oknie, które wyskoczyło wciskam przycisk Rysuj. Program pyta "Wskaż ....". W tym momencie stwierdzam, że chcę użyć innej komendy i klikam inny przycisk. Anulowana jest stara komenda i wyskakuje okno nowo wybranego programu. Film drugi W ZwCAD jest już inna technologia i nawet program nagrywający nie pokazuje jak kursor przechodzi do okna mojego programu. Ale o co chodzi. Wybieram program, gdy daję rysuj i program pyta " Wskaż początek...'' to nie mogę nacisnąć innego przycisku na panelu mojego programu narzędziowego, który by to anulował. Co w AutoCAD jak pokazałem działa sprawnie dzięki kodowi jaki podałem wyżej. Co mógłbym zrobić, usprawnić w ZwCAD, żeby osiągnąć podobny efekt. W ZwCAD tak jakby całkowicie w chwili pytania nie mam dostępu do żadnych przycisków u góry zarówno tych oprogramowanych przeze mnie jak i tych oryginalnych na wstążce. Kursor pozostaje niejako w oknie (SetFocusToview). Mam nadzieję, że teraz jest już bardziej klarowne to, o co mi chodzi. W pierwszym przypadku wciskam przycisk nowej komendy W drugim muszę wcisnąć przycisk escape i przycisk nowej komendy Edytowane 23 Czerwca 2017 przez Parikon Cytuj
kruszynski Opublikowano 23 Czerwca 2017 Zgłoś Opublikowano 23 Czerwca 2017 ok, teraz jasne. podpytam w ZWSOFT Cytuj
kruszynski Opublikowano 26 Czerwca 2017 Zgłoś Opublikowano 26 Czerwca 2017 Czy rozwiązaniem mogłoby być sprawdzenie zmiennej systemowej: CMDNAMES ? Cytuj
Parikon Opublikowano 26 Czerwca 2017 Autor Zgłoś Opublikowano 26 Czerwca 2017 3 godziny temu, kruszynski napisał: Czy rozwiązaniem mogłoby być sprawdzenie zmiennej systemowej: CMDNAMES ? Nie wiem jak bym miał to wykorzystać. Cytuj
Parikon Opublikowano 26 Czerwca 2017 Autor Zgłoś Opublikowano 26 Czerwca 2017 Problem jest taki, że jak jest "promt" to nie mogę już kliknąć z ZwCAD innego przycisku w moim programie narzędziowym. W AutoCAD mogę. W obydwu przypadkach okno z przyciskami jest uruchamiane jako zza.Application.ShowModelessDialog(form); Cytuj
kruszynski Opublikowano 27 Czerwca 2017 Zgłoś Opublikowano 27 Czerwca 2017 Myślałem o tym, żeby zamiast odczytywać aktywne polecenie ze zmiennej systemowej zamiast z tego: Dnia 22.06.2017 o 16:06, Parikon napisał: Autodesk.AutoCAD.Internal.PreviousInput.CommandLineMonitorServices comLineMonServ = Autodesk.AutoCAD.Internal.PreviousInput.CommandLineMonitorServices.Instance(); Autodesk.AutoCAD.Internal.PreviousInput.CommandLineMonitor comMon = comLineMonServ.GetCommandLineMonitor(acDoc); Umknęło mi że to chodzi o to, że nie da się kliknąć przycisku. Cytuj
kruszynski Opublikowano 27 Czerwca 2017 Zgłoś Opublikowano 27 Czerwca 2017 Dostałem z ZWSOFT przykład okna z przyciskiem, który wydaje się działać tak, jak Pan potrzebuje. HelloWorld.rar Cytuj
Parikon Opublikowano 27 Czerwca 2017 Autor Zgłoś Opublikowano 27 Czerwca 2017 3 godziny temu, kruszynski napisał: Dostałem z ZWSOFT przykład okna z przyciskiem, który wydaje się działać tak, jak Pan potrzebuje. HelloWorld.rar Film Właśnie wydaje się działać identycznie jak moje okno. Znaczy się, że gdy jest zapytanie nie da się ponownie kliknąć w przycisk, a kliknięcie nie przerywania zapytania. Jeszcze raz Film pierwszy Cytuj
Parikon Opublikowano 27 Czerwca 2017 Autor Zgłoś Opublikowano 27 Czerwca 2017 Komenda Helloworld wywołuje okno z przyciskiem HelloWorld. Okno jest w trybie zza.Application.ShowModelessDialog(form); Klikając przycisk HelloWorld wyskakuje drugie okno w trybie zza.Application.ShowModalDialog(form1); W tym oknie będzie przycisk Rysuj, który pyta o punkt wstawienia i jak pokażemy to wstawia napis Helloworld. I teraz: - jak jest pytanie o punkt wstawienia chciałbym aby okno pierwsze nie było zablokowane i mógłbym w nim znów kliknąć przycisk Helloworld. Tego nie mogę zrobić w ZwCAD a w AutoCAD mogę. Cytuj
kruszynski Opublikowano 28 Czerwca 2017 Zgłoś Opublikowano 28 Czerwca 2017 Używając okna, jakie przesłałem i standardowych poleceń ZWCADa okno nie jest blokowane. Może Pan to zobaczyć na filmie: Czy może Pan przerobić przykład do takiej postaci, żeby zaobserwować zachowanie analogiczne jak w Pana aplikacji, ale z wykorzystaniem tylko tego okna i standardowych poleceń ZWCADa? Może problem jest nie w samym oknie, ale w poleceniu podłączonym pod przycisk? Cytuj
Parikon Opublikowano 28 Czerwca 2017 Autor Zgłoś Opublikowano 28 Czerwca 2017 (edytowane) Proszę mi wierzyć, że moje okno narzędziowe działa identycznie ze standardowymi przyciskami ZwCAD jak Helloworld. Może Pan pobrać i wypróbować. Nie potrzeba zmiennej. Być może w ogóle problem nie jest w oprogramowaniu przycisku tylko po wywołaniu okna w trybie Modal a nie modelles. Przy czym w AutoCAD nie ma problemu, gdyż wywołanie nowego okna w trybie modal i wywołanie zapytania nie blokuje okna narzędziowego w trybie modelles. Jeszcze inaczej to napiszę. Gdy włączę mój program narzedziowy i przykładowy Helloworld i z mojego programu narzędziowego wywołam jakiś przycisk to otwiera się okno w trybie Modal. Tak wywołane okno blokuje wszystko. Wstążki, mój program narzędziowy i program Helloworld. Jednak gdy wcisnę przycisk rysuj to zamykam okno w trybie modal i wykonuje polecenie, które pyta o punkt wstawienie itp. Czyli pojawia się zapytanie. W tym momencie w AutoCAD okno narzedziowe jest dostępne i można na nowo klikać w przyciski. W ZwCAD zarówno moje okno narzędziowe jak i przysłany programik HelloWorld będą dalej zamknięte i najazd na przycisk nie wywoła nawet toolltipa. Edytowane 28 Czerwca 2017 przez Parikon Cytuj
dmatusz3 Opublikowano 28 Czerwca 2017 Zgłoś Opublikowano 28 Czerwca 2017 Ja się tylko wtrącę nieco, może macie różne wersje programu? Proponuje zsynchronizować vernum. Cytuj
Parikon Opublikowano 28 Czerwca 2017 Autor Zgłoś Opublikowano 28 Czerwca 2017 To raczej bez znaczenia. vernum = "2017.06.07(18304)_x64" Cytuj
kruszynski Opublikowano 28 Czerwca 2017 Zgłoś Opublikowano 28 Czerwca 2017 Czyli sekwencja wydarzeń wygląda tak ? - Otwieramy oknoPI w trybie modeless - Klikamy przycisk X : - Otwiera się okno2 w trybie modal. - ZWCAD (wstążka, właściwości, nasz przykładowy niezwiązany z PI program HelloWorld , praca w modelu wszystko inne ) jest zablokowane - Klikamy przycisk Y w oknie2 : - okno2 znika - ZWCAD jest odblokowany czyli pojawia się podpowiedź, można klikać punkty ? - okno2. HelloWorld są zablokowane. wskaźnik się nad nimi nie pokazuje, nie da się kliknąć. a co ze standardowymi oknami ZWCADa? właściwości, wstążka? można klikać, czy wskaźnik jest "uwięziony" w modelu? Myślę że istotne może być jak zamyka Pan okno? W ZRX miałem kiedyś podobny problem, wyłączałem okno, ale nie dało się nic klikać. powodem było to JAK wyłączałem okno. Zrobiłem to wywołując CWnd::ShowWindow( SW_HIDE ) Okno zniknęło, ale nic się nie dało zrobić. ZRX ma swoje okno , w którym trzeba wywołać: CAdUiDialog::BeginEditorCommand() Wtedy odblokowało ZWCADa. Być może tu sytuacja jest analogiczna. W tym przypadku najbardziej podejrzane jest działanie ZwSoft.ZwCAD.Internal.Utils.SetFocusToDwgView(); Cytuj
Parikon Opublikowano 28 Czerwca 2017 Autor Zgłoś Opublikowano 28 Czerwca 2017 Standardowe przyciski ZwCAD można klikać i przerywają zapytanie Cytuj
kruszynski Opublikowano 28 Czerwca 2017 Zgłoś Opublikowano 28 Czerwca 2017 Czyli chodzi o taki efekt jak w załączonym przykładzie: Kiedy w oknie modal klikniemy przycisk [Ask For Point ] , nie możemy kliknąć w oknie modeless przycisku [Show Modal DIalog]. HelloWorld_Modal_Modeless.zip Cytuj
kruszynski Opublikowano 29 Czerwca 2017 Zgłoś Opublikowano 29 Czerwca 2017 Wygląda na to, że teraz już wszyscy włącznie z ZWSOFT mamy jasność na czym polega problem. Tylko że problem wydaje się być skomplikowany, taką informację otrzymałem od ZWSOFT. Obawiam się więc, że na rozwiązanie będzie trzeba poczekać. Jako rozwiązanie obejściowe, mogę zaproponować włączanie drugiego okna również w trybie modeless.Pewnie to pociągnie za sobą jakieś komplikacje typu kursor znikający z kontrolek typu EditBox. ale może po kliknięciu przycisku przed ukryciem okna może Pan okno przełączyć do trybu modeless, i dopiero wtedy ukryć? Cytuj
Parikon Opublikowano 29 Czerwca 2017 Autor Zgłoś Opublikowano 29 Czerwca 2017 Zasadniczo nie dyskwalifikuje to pracy. Jak ktoś wie co robi to w zasadzie tego nie potrzebuje. Chciałem tylko aby nakładka działała mi identycznie w dwóch programach. Jak jest blokada to tego nie obejdę. 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ą.