SpeedButtons - Undo und Redo...



  • Hallo,

    wie kann ich zwei SpeedButtons machen, die einzelne Aktionen Rückgängig machen und Widerrufen können ?

    Ich hab auch die jeweiligen bmp`s auf den SpeedButtons und wollte es jetzt so machen:

    void __fastcall TForm1::SpeedButton1Click(TObject *Sender)
    {
    SpeedButton1->Action = EditUndo1;
    }
    

    - Das funktioniert aber nicht, da sich die Buttons nicht mehr drücken lassen....

    MFG



  • Hat keiner eine Idee wie ich es anders machen könnte ??



  • Hi Goodie,

    nach 10 mal lesen denke ich nun, ich habe verstanden, was du willst! Gehe ich recht in der Annahme, dass du solche Buttons erstellen willst, wie sie z.B. in Microsoft Word vorhanden sind, die per Klick die letzte getätigte Aktion rückgänging machen, bzw auch wiederherstellen (vorwärts) können?

    Grundsätzlich wäre mein Ansatz alles mitzuloggen was passiert, wobei hier eine Definition von "Aktion" nötig ist. Sprich soll der Button z.B. Buchstabe für Buchstabe aus einem Editfeld zurückgehen, oder dass ganze Wort löschen. Alles was deiner Meinung nach eine Aktion ist (z.B. Das Fett machen von Text in Word) mitloggen und dann per Buttonklick das getätigte Event rückgänging machen. Die Log wäre hierbei natürlich auf z.B. 10 Einträge zu begrenzen (in Word ist auch eine Begrenzung drin).

    Komplizierter aber denkbarer Ansatz. Zumindest sollten jetzt auch andere dein Problem verstanden haben!

    mfg
    cb



  • Hallo

    Wie schon gesagt reicht die Undo-Action alleine nicht aus, du must noch manuell den dafür nötigen Code für die Eventmethode schreiben.

    Entscheidender ist aber noch das du den zusammenhang Control-Action nicht verstanden hast. Zuerstmal must du die Button-Methode wieder entfernen.
    Dann wählst du im Objektinspektor den Speedbutton aus und verbindest desen Eigenschaft Action mit der Undo-Action.
    Nun muß nur noch zur Laufzeit die Eigenschaft Enabled der Undo-Action auf true gesetzt werden, um auch den Button Enabled werden zu lassen. Diese Änderung sollte in einem OnChange-Event des Editor-Controls gemacht werden für das die Undo-Action zuständig ist.

    bis bald
    akari



  • Hallo,

    Um es kurz zu machen: Ich will eigtl. nur ein Undo Button (Zum rückgängig machen) und einen Redo Button (Zum widerrufen), die jeweils immer die letzte aktion rückgängig machen z.B. Buchstabe für Buchstabe bzw. Wort für Wort... usw.. - Wie kann ich sowas "einfach" lösen ?

    PS: @akari - genau das habe ich gemacht die Buttons verlieren entweder ihren Glyph(bmp) oder lassen sich erst gar nicht drücken(Enabled ist aber true)...

    Wie in "großen" Programmen ein Undo und ein Redo Button..

    MFG
    Goodie



  • Hallo

    Um es kurz zu machen: Ich will eigtl. nur ein Undo Button (Zum rückgängig machen) und einen Redo Button (Zum widerrufen), die jeweils immer die letzte aktion rückgängig machen z.B. Buchstabe für Buchstabe bzw. Wort für Wort... usw.. - Wie kann ich sowas "einfach" lösen ?

    Einfach gar nicht. Du must dir schon überlegen für welches Control das Undo gelten soll. Und diese Undo-Funktionalität selber implementieren. Die TEditUndo-Action selber hat diese Funktionalität nicht, sondern bietet nur eine allgemeine Symbolik.
    Beispielsweise bieten alle von TCustomEdit abgeleiteten Controls Methoden wie ::Undo, die dann aus der Event-Methode der Action aufgerufen werden können.

    PS: @akari - genau das habe ich gemacht die Buttons verlieren entweder ihren Glyph(bmp) oder lassen sich erst gar nicht drücken(Enabled ist aber true)...

    Wenn du mit Actions arbeitest must du das Bitmap nicht dem Control selber sondern der Action zuweisen, genauso wie Caption und Hint.
    Die Action wird erst dann enabled, wenn erstens eine Eventmethode zu der Action vorliegt (was bei dir offenbar nicht der Fall ist) und zweites die Action Enabled ist.

    bis bald
    akari


Log in to reply