AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Undo Redo: Bilder

Ein Thema von R56 · begonnen am 8. Mai 2012 · letzter Beitrag vom 9. Mai 2012
 
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.396 Beiträge
 
Delphi 12 Athens
 
#7

AW: Undo Redo: Bilder

  Alt 9. Mai 2012, 02:56
Ob nun ein Array mit vielen Objekten oder eine TList/TObjectList mit vielen Objekten, das macht grundsätlich keinen Unterschied.
Das ist ja nur die Art, wie die Objektzeiger verwaltet werden, aber auf den Inhalt der Objekte hat es keinerlei Einfluß.
Die TObjectList nimmt dir aber etwas Arbeit ab, da sie selbst die Speicherverwaltung übernimmt und auch gleich die enthaltenen Objekte aufräumen/freigeben kann, wenn man einen Eintrag löscht.

Über eine generische Objektliste (in neueren Delphis, ab D2009) würde man noch die ganzen Typecasts einsparen und somit typsicherer Arbeiten.

PS: Wenn du vom TPicture eh nur die Bitmaps nutzt, dann kannst du auch gleich ein TBitmap verwenden.


Ich hab's mal so grob versucht zusammenzutippen. (der Code rein theoretisch, direkt hier hingeschrieben und demnach ungetestet)
Delphi-Quellcode:
//Init
UndoList := TObjectList.Create(True);
UndoIndex := 0;
BT_Undo.Enabled := False;
BT_Redo.Enabled := False;

//Free
UndoList.Free;

//Save
BT_Undo.Enabled := True;
BT_Redo.Enabled := False;
while UndoList.Count > UndoIndex+1 do
  UndoList.Delete(UndoIndex + 1);
B := TBitmap.Create;
B.Assign(Image1.Picture.Bitmap);
UndoList.Add(B);
Inc(UndoIndex);

//Clear
UndoList.Clear;
UndoIndex := 0;
BT_Undo.Enabled := False;
BT_Redo.Enabled := False;

//Undo
if UndoIndex > 0 then begin
  Dec(UndoIndex);
  Image1.Picture.Bitmap.Assign(TBitmap(UndoList[UndoIndex]));
  BT_Redo.Enabled := True;
  BT_Undo.Enabled := UndoIndex > 0;
end else
  BT_Undo.Enabled := False;

//Redo
if UndoIndex < UndoList.Count-1 then begin
  Inc(UndoIndex);
  Image1.Picture.Bitmap.Assign(TBitmap(UndoList[UndoIndex]));
  BT_Undo.Enabled := True;
  BT_Redo.Enabled := UndoIndex < UndoList.Count-1;
end else
  BT_Redo.Enabled := False;
Und alle Zeichenoperationen natürlich nur auf Image1.Picture.Bitmap .
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 9. Mai 2012 um 02:59 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz