Button1Click() rückgängig machen

Für Fragen von Einsteigern und Programmieranfängern...
jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Button1Click() rückgängig machen

Beitrag von jaslaz »

Hallo zusammen,
In meinem Programm wird,wenn man auf einen Button klickt, eine Zufallslienie (über canvas) in eine Paintbox gezeichnet.
Nun möchte ich einen Rückgängig-Button machen!
Meine Frage ist nun wie ich die Button1Click() procedure rückgängig machen kann.
Danke schon mal im vorraus.

mfg Jaslaz

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: Button1Click() rückgängig machen

Beitrag von Hitman »

... indem du das Bild ohne die Linie neuzeichnest. Da du sicherlich sowieso ein Bitmap als Buffer verwendest (wenn nicht, wirds Zeit!), kannst du natürlich davon auch vor jeder Aktion einfach eine Kopie machen, die du dann wieder zurückspielst (.Assign lässt grüßen).

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Button1Click() rückgängig machen

Beitrag von jaslaz »

Hitman hat geschrieben:Da du sicherlich sowieso ein Bitmap als Buffer verwendest
Wie funktioniert das genau?

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Button1Click() rückgängig machen

Beitrag von felix96 »

Also, um was "geCanvates" wieder weg zumachen schreibst du einfach [name des Control].Canvas.Refresh;
Sprich bei einer Paintbox: Paintbox1.Canvas.Refresh;
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Button1Click() rückgängig machen

Beitrag von jaslaz »

Danke Felix96, aber ich meine das eigentlich so: Ich zeichne zum Beispiel eine Zufallslienie und dann noch eine!Wie kann ich nun nur die zweite wegmachen???

Benutzeravatar
theo
Beiträge: 10938
Registriert: Mo 11. Sep 2006, 19:01

Re: Button1Click() rückgängig machen

Beitrag von theo »

jaslaz hat geschrieben:Danke Felix96, aber ich meine das eigentlich so: Ich zeichne zum Beispiel eine Zufallslienie und dann noch eine!Wie kann ich nun nur die zweite wegmachen???
Das geht nicht ohne weiteres. Da brauchst du irgend ein Undo System.
Entweder du speicherst jede Stufe der Bearbeitung einzeln als Bmp (Speicherintensiv) oder zeichnest Anhand einer Liste von Koordinaten immer alles neu.
Dann entfernst du z.B. den letzen Listeneintrag und zeichnest wieder.

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Button1Click() rückgängig machen

Beitrag von jaslaz »

Wie kann ich den die Koordinaten abspeichern, wenn sie durch Zufall entstehen?
Hier mein Code:

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var n,oft,dicke:integer ; breite,lange:real;
begin
 
randomize;
oft:=strtoint(edit1.text);
dicke:=strtoint(spinedit1.text);
for n:=1 to oft do
 begin
   with paintbox1.canvas  do
   begin
pen.color:=colorbox1.Selected;
pen.width:=dicke;
MoveTo(random(501),random(501));
LineTo(random(501),random(501));
 
  end;
 end;
end;

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Button1Click() rückgängig machen

Beitrag von carli »

Kannst du,
indem du ein array of record anlegst, das im Formular gespeichert wird.
Beim Button1Click wird dann eine neue Koordinate eingezeichnet und in der Paintbox.redraw aufgerufen wird.
Dann baust du noch bei der Paintbox ein onPaint-Ereignis ein, das die Liste von Linien zeichnet.

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Button1Click() rückgängig machen

Beitrag von jaslaz »

carli hat geschrieben:Kannst du,
indem du ein array of record anlegst, das im Formular gespeichert wird.
Beim Button1Click wird dann eine neue Koordinate eingezeichnet und in der Paintbox.redraw aufgerufen wird.
Dann baust du noch bei der Paintbox ein onPaint-Ereignis ein, das die Liste von Linien zeichnet.
Könntest du das nochmal etwas genauer erklären,ich bin nämlich noch Anfänger!

Benutzeravatar
theo
Beiträge: 10938
Registriert: Mo 11. Sep 2006, 19:01

Re: Button1Click() rückgängig machen

Beitrag von theo »

jaslaz hat geschrieben: Könntest du das nochmal etwas genauer erklären,ich bin nämlich noch Anfänger!
Was verstehst du denn nicht? Array of Record? PaintBox?
Du solltest präziser fragen, dann kann man auch antworten.
Sonst läuft's darauf raus, dass dir jemand eine fertige Lösung basteln muss, und das ist ja nicht der Sinn der Sache, oder? ;-)

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Button1Click() rückgängig machen

Beitrag von carli »

theo hat geschrieben: Sonst läuft's darauf raus, dass dir jemand eine fertige Lösung basteln muss, und das ist ja nicht der Sinn der Sache, oder? ;-)
Genau das wollte ich vermeiden ;)
Jedoch gibt es immer wieder Dumme, die genau das tun und Google spürt sie auch noch aus allen Ecken und Enden der Welt auf. Dumm ist nur, wenn man Google nicht benutzen kann :P

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Button1Click() rückgängig machen

Beitrag von jaslaz »

Nein sorry so war das nicht gemeint,das soll ja auch mein eigenes Programm werden!
indem du ein array of record anlegst
Was genau heißt das?
Paintbox.redraw
Was macht diese Funktion?

Benutzeravatar
theo
Beiträge: 10938
Registriert: Mo 11. Sep 2006, 19:01

Re: Button1Click() rückgängig machen

Beitrag von theo »

jaslaz hat geschrieben: Was genau heißt das?
Ist nicht böse gemeint, aber wenn du mit diesen Begriffen gar nichts anfangen kannst, solltest du dir eine Einführung in Pascal oder Delphi in Buchform kaufen oder ausleihen. Das sind Ur-Datentypen in Pascal seit 1972. ;-)
Das Lazarus Forum kann keine Einführung in die Grundlagen der Programmierung geben.
jaslaz hat geschrieben: Was macht diese Funktion?
Redraw = Neu zeichnen. Ist aber noch belanglos, wenn du die Grundlagen noch nicht kennst.

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Button1Click() rückgängig machen

Beitrag von jaslaz »

Wir lernen Lazarus immoment in der Schule und ich kann jetzt schon vielmehr als wir können müssen!´
Im Grunde genommen lernen wir da garnichts.
Und nun wollte ich mir so aus Spaß ein kleines Programm machen!
Aber was würdest du mir denn als Buch empfehlen(Ich hab auch schon von dem Lazarus-Buch gehört,aber das ist zu neu für Bücherein und ich finde es auch zu teuer um mal eben ein paar kleine Programme zu schreiben)

Benutzeravatar
theo
Beiträge: 10938
Registriert: Mo 11. Sep 2006, 19:01

Re: Button1Click() rückgängig machen

Beitrag von theo »

jaslaz hat geschrieben:Wir lernen Lazarus immoment in der Schule und ich kann jetzt schon vielmehr als wir können müssen!´
Habt ihr kein Unterrichtsbuch?
jaslaz hat geschrieben: Aber was würdest du mir denn als Buch empfehlen(Ich hab auch schon von dem Lazarus-Buch gehört,aber das ist zu neu für Bücherein und ich finde es auch zu teuer um mal eben ein paar kleine Programme zu schreiben)
Für solche Sachen wie Array Records etc. reicht eigentlich jede Einführung in Pascal.
Geh mal in die Bibliothek (gibt's das noch? ;-) und schau halt was dir zusagt.

Antworten