Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de
  AutoCAD VBA
  Mehrere Operationen rückgängig machen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
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


Sehen Sie sich das Profil von Benny4 an!   Senden Sie eine Private Message an Benny4  Schreiben Sie einen Gästebucheintrag für Benny4

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2010
ZW-CAD 2012

erstellt am: 18. Sep. 2008 18:06    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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


Sehen Sie sich das Profil von Carsten1210 an!   Senden Sie eine Private Message an Carsten1210  Schreiben Sie einen Gästebucheintrag für Carsten1210

Beiträge: 1360
Registriert: 24.07.2002

erstellt am: 18. Sep. 2008 18:51    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Benny4 10 Unities + Antwort hilfreich

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



Sehen Sie sich das Profil von KlaK an!   Senden Sie eine Private Message an KlaK  Schreiben Sie einen Gästebucheintrag für KlaK

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Benny4 10 Unities + Antwort hilfreich

Kann Alfred da nur zustimmen.
BTWBy the way (So nebenbei bemerkt): Ich habe bei mir meist die Zurück Funktion ausgeschalten, ob dann das Undo vom Makro trotzdem geht???

Klaus

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Benny4
Mitglied
Softwareentwickler


Sehen Sie sich das Profil von Benny4 an!   Senden Sie eine Private Message an Benny4  Schreiben Sie einen Gästebucheintrag für Benny4

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2010
ZW-CAD 2012

erstellt am: 19. Sep. 2008 09:14    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13530
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 19. Sep. 2008 09:23    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Benny4 10 Unities + Antwort hilfreich

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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 oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

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




Sehen Sie sich das Profil von CADmium an!   Senden Sie eine Private Message an CADmium  Schreiben Sie einen Gästebucheintrag für CADmium

Beiträge: 13530
Registriert: 30.11.2003

ACAD 2008 Mechanical

erstellt am: 19. Sep. 2008 09:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Benny4 10 Unities + Antwort hilfreich

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


Sehen Sie sich das Profil von Benny4 an!   Senden Sie eine Private Message an Benny4  Schreiben Sie einen Gästebucheintrag für Benny4

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2010
ZW-CAD 2012

erstellt am: 19. Sep. 2008 10:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

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

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz