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
Antwort Antwort
R56

Registriert seit: 8. Mai 2012
8 Beiträge
 
#1

AW: Undo Redo: Bilder

  Alt 8. Mai 2012, 21:50
Okay ich wollte es jetzt mit TObjectList probieren, jedoch stoße ich schon auf ein Problem.
Dieser Begriff wäre undeklariert. Über eine Unit, die ich unter den uses benutzen muss hab ich nichts gefunden.

Ps: Hab die Unit.

Pss: Okay, habe jetzt eine Version mit ObjectList und das mit dem Array. Ich habe bei beiden immernoch die selben Probleme wie vorher. Ich weiß nicht wie ich im Index rumschieben soll. Kann mir das jemand bei meinenm Beispil oben zeigen? Ich komm da irgendwie immernoch durcheinander.

Geändert von R56 ( 8. Mai 2012 um 22:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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
Antwort Antwort


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 12:25 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