Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.398 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 .
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

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