| |
 | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
| |
 | PNY wird von NVIDIA zum Händler des Jahres gewählt - zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Mehrere Operationen rückgängig machen (2627 mal gelesen)
|
Benny4 Mitglied Softwareentwickler
 
 Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2010 ZW-CAD 2012
|
erstellt am: 18. Sep. 2008 18:06 <-- editieren / zitieren --> Unities abgeben:         
Hi, ich möchte in meinem Makro nach dessem Ende mehrere Operationen rückgängig machen. In meinem Code sind übrigens auch ein paar SendCommand's. Es gibt ja dieses StartUndoMark und EndUndoMark. Konnte aber nicht wirklich was anfangen damit. Außerdem habe ich versucht am Anfang meines Codes ein Code:
ThisDrawing.SendCommand "_undo _mark "
einzufügen um das dann mit
Code:
ThisDrawing.SendCommand "_undo r "
wieder rückgängig zu machen. Aber auch das klappt nicht. Wenn ich vor Ausführen meines Codes das _undo _mark manuell ausführe und nach Ende meines Codes _undo r manuell ausführe dann klappt es. Hat jemand einen Rat für mich? ------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 18. Sep. 2008 18:50 <-- editieren / zitieren -->
hi benny, am anfang eines codes kannst du die undo-markierung setzen und am ende deines codes beenden. der vorteil liegt darin, dass alle operationen IN EINEM SCHRITT rueckgaenig gemacht werden koennen, die zwischen 'StartUndoMark' und 'EndUndoMark' liegen. ThisDrawing.StartUndoMark ....<your code> ThisDrawing.EndUndoMark eine lustige bemerkung sei mir erlaubt: es ist wohl das vernuenftigste, den code nicht zu starten, wenn du nachher sowieso alles rueckgaengig machst. :-) ....mit ausnahme dessen, dass du element-auswertungen abarbeitest und dann in externe dateien/datenbanken etwas rausschreibst, aber selbst hier sollte (wenn grosse datenmengen im spiel sind) nicht der weg mit rueckgaengig im code notwendig sein, die regel ist, dass '_undo' genausoviel rechnerleistung benoetigt wie die zuvor durchgefuehrte funktion, mit der zusaetzlichen verschlechterung, dass der memory-bedarf durch '_undo' nicht weniger wird, sondern steigt. - alfred - |
Carsten1210 Mitglied staatl. geprüfter Holztechniker
   
 Beiträge: 1360 Registriert: 24.07.2002
|
erstellt am: 18. Sep. 2008 18:51 <-- editieren / zitieren --> Unities abgeben:          Nur für Benny4
Hi Benny, Es gibt auch in VBA ein StartUndoMark- und EndUndoMark-Methode. Da brauchst du nicht auf Sendcommand zurück zu greifen. Allerdings wird dir dein Undo doch das ganze Makro bzw. das letzte, was du gemacht hast im Makro zurücksetzen. Erklär doch mal genau was du vor hast. Gruß, Carsten Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KlaK Ehrenmitglied V.I.P. h.c. Dipl. Ing. Vermessung, CAD- und Netz-Admin

 Beiträge: 2855 Registriert: 02.05.2006 AutoCAD LandDesktop R2 bis 2004 Civil 3D 2005 - 2025 Plateia, Canalis Visual Basic
|
erstellt am: 18. Sep. 2008 19:36 <-- editieren / zitieren --> Unities abgeben:          Nur für Benny4
|
Benny4 Mitglied Softwareentwickler
 
 Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2010 ZW-CAD 2012
|
erstellt am: 19. Sep. 2008 09:14 <-- editieren / zitieren --> Unities abgeben:         
Hi, also dass ich die gesamte Aktion rückgängig machen will hat schon seinen Sinn... Nun das mit dem StartUndoMark und EndUndoMark funktioniert bei mir nicht aus folgendem Grund: In meinem Code muss ich manchmal einen Text auflösen. Dazu verwende ich die Expresstools. Dieses mache ich dann mit einem SendCommand, da ich, soweit ich weiss, das sonst nicht machen kann. Und genau da versagt dann das StartUndoMark und EndUndoMark. Mit Rückgängig wird dann nicht das gesamte Makro rückgängig gemacht sondern nur bis zu dem Zeitpunkt wo der Text aufglöst wird. Jemand sonst eine Idee? ------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 19. Sep. 2008 09:23 <-- editieren / zitieren --> Unities abgeben:          Nur für Benny4
Warum löst du den Mtext auf? Wenn es unbedingt sein soll geht auch ohne Undo: Mtext kopieren auflösen entstandene Objekte auswerten entstandene Objekte löschen ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Ex-Mitglied
|
erstellt am: 19. Sep. 2008 09:23 <-- editieren / zitieren -->
hi benny, das mischen zwischen code mit objektzugriff und sendcommand wird dir immer wieder probleme machen, weil bei aufgerufenem befehl, den du in .net definiert hast, das sendcommand nur asynchron ablaeuft. soll heissen du startest dein selbstdefiniertes command, wenn in diesem drin ein oder mehrere sendcommands ausloest, dann werden die 'nur' in einen befehlsstack aufgenommen, aber erst nach beendigung deines eigenen commands exekutiert. echtes synchrones exekutieren vom SendCommand geht meines wissens nur in vba. (ich lasse mich aber gerne belehren) fangen wir mal damit an, was du mit den zerlegten texten weitermachen willst? denn eventuell ist das auch anders loesbar (insbesondere abhaengig davon, ob du die erzeugten text-teile pixel oder vektoren werden sollen, sollen die ergebnisse dann wirklich in der aktuellen zeichnung liegen (wohl nicht, weil ja undo gemacht wird), wie das ergebnis gespeichert wird, ...) - alfred - |
Ex-Mitglied
|
erstellt am: 19. Sep. 2008 09:28 <-- editieren / zitieren -->
hi thomas, ich habe nicht 'mtext ...', sonderen 'text aufloesen' gelesen, ich glaubte, dass die in den express-tools definierte funktion 'txtexp' (zum aufloesen von text in vektoren) gemeint gewesen waere. wenn wirklich mtext ==> text, dann hast du natuerlich voll recht. - alfred - |
CADmium Moderator Maschinenbaukonstrukteur
       

 Beiträge: 13530 Registriert: 30.11.2003 ACAD 2008 Mechanical
|
erstellt am: 19. Sep. 2008 09:46 <-- editieren / zitieren --> Unities abgeben:          Nur für Benny4
... ach so .. txtexp .. das greift auf wmfin / wmfout zurück da kann man vielleicht was mit document.export .... was machen um das sendcommand zu umgehen.. oder das ganze in einer Dummyzeichnung via ObjectDBX realisieren, die am Ende "weggeschmissen" wird .. ------------------ - Thomas - "Bei 99% aller Probleme ist die umfassende Beschreibung des Problems bereits mehr als die Hälfte der Lösung desselben." Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Benny4 Mitglied Softwareentwickler
 
 Beiträge: 178 Registriert: 16.02.2006 AutoCAD 2010 ZW-CAD 2012
|
erstellt am: 19. Sep. 2008 10:53 <-- editieren / zitieren --> Unities abgeben:         
Hi, habe jetzt eine Lösung gefunden die genau das macht was ich will. Vor meinem Aufruf _-vbarun setze ich die Markierung _undo _mark. Und so kann ich dann in meinem Code mit dem SendCommand mein gesamtes Makro samt Text auflösen (Mtext und Text werden mit den Expresstools --> txtexp aufgelöst) rückgängig machen. Ist vielleicht nicht die feine Art, aber gut ist was funktioniert. Danke auch für eure Anregungen. ------------------ Grüsse Benny Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |