Seite 1 von 1

*Gelöst* #EM_UNDO/#WM_UNDO

Verfasst: 09.07.2010 10:06
von Mok
Hallo.
Da ich momentan an einem Texteditor arbeite (skriva = schwedisch für "Schreiben") ist eine Rückgängig-Funktion (aka. Undo) mehr als notwendeig. Dank RSBasics WinAPI Lib habe ich auch eine Lösung dazu gefunden: SendMessage_(GadgetID(#Editor_0),#EM_UNDO,0,0). Da tut sich schon die erste Frage auf: Neben #EM_UNDO gibt's auch #WM_UNDO. Ich konnte keinen Unterschied feststellen, aber gibt es intern irgend einen Unterschied?
Wenn ich jetzt ein EditorGadget habe, da ein paar Zeilen reischreib (mit Zeilenumbruch) und dann die Undo-Funktion ausführe, kann ich alles bis zum Zeilenumbruch rückgängig machen. Z. B. für

Code: Alles auswählen

foo
bar
baz
kann ich nur baz rückgängig machen, wenn ich den Text oben eintippe und danach mit Strg-V "zah" direkt ans "baz" einfüge, kann ich zah und baz rückgängig machen, also wird die Undo-Liste nach jedem Zeilenumbruch zurückgesetzt. Was ein Dreck!
Abschließend wollte ich noch fragen, wie man prüfen kann, ob die Undo- und Redo-Liste leer ist (z. B. um einen entsprechenden Button auszugrauen)

Grüße, Mok.

Re: #EM_UNDO/#WM_UNDO

Verfasst: 09.07.2010 14:13
von RSBasic
@Mok
http://blogs.msdn.com/b/oldnewthing/arc ... 57870.aspx
Also kein Unterschied afaik.

Wenn du die Rückgängig-Funktion gerne so haben möchtest, dass es nicht zeilenweise, sondern dass jedes einzelne Zeichen rückgängig gemacht werden soll, brauchst du andere APIs für den Buffer von Undo: http://www.purebasic.fr/english/viewtopic.php?p=161517
Mit Hilfe des Codes von freak kannst du dir eine eigene Prozedur schreiben, womit du dann jedes einzelne Zeichen rückgängig machen kannst.
Hoffe, ich hab dich richtig verstanden.

Anleitung:
1. Du schreibst zuerst ein Buchstabe.
2. Danach drückst du auf Suspend und anschließend auf Resume.
3. Danach kannst du wieder ein Buchstabe schreiben.
Und irgendwann kannst du dann mit Undo alle geschriebene Zeichen rückgängig machen.

\\Edit:
Hm, vll. hab ich dich doch falsch verstanden, kA, vll. hilft dieser Code von freak^^

Re: #EM_UNDO/#WM_UNDO

Verfasst: 09.07.2010 14:41
von Mok
Ok, alle Probleme dank halbem Neuanfang gelöst.