AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Image (Canvas) Rückgängig Funktion
Thema durchsuchen
Ansicht
Themen-Optionen

Image (Canvas) Rückgängig Funktion

Ein Thema von Dunkelbunt27 · begonnen am 19. Mär 2011 · letzter Beitrag vom 24. Mär 2011
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#11

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:03
Das funktioniert in meinem Fall nicht. Es ist jeder Platz belegt. Ich habe praktisch ein Raster, dessen Werte und Eigenschaften der Felder in dem dynamischen, mehrdimensionalen Array gespeichert sind.

Ich hab es jetzt so:
Delphi-Quellcode:
procedure ZustandSpeichern;
var i,n : integer;
begin
  for i := 1 to MaxZeilen do
    for n := 1 to MaxSpalten do
      begin
        SpeicherArray[i,n].zeichen := buchstabe[i,n].zeichen;
        SpeicherArray[i,n].attribut := buchstabe[i,n].attribut;
      end;
end;

procedure ZustandLaden;
var i,n : integer;
begin
  for i := 1 to MaxZeilen do
    for n := 1 to MaxSpalten do
      begin
        buchstabe[i,n].zeichen := SpeicherArray[i,n].zeichen;
        buchstabe[i,n].attribut := SpeicherArray[i,n].attribut;
      end;
end;
Vor dem Zeichnen bzw verändern von Werten in den Feldern wird ZustandSpeichern ausgeführt.
Delphi-Quellcode:
procedure TForm1.UndoClick(Sender: TObject);
begin
   ZustandLaden;
end;
Das sollte funktionieren, tut es aber nicht...

Geändert von Dunkelbunt27 (19. Mär 2011 um 16:12 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:08
Achtung: dynamische Arrays beginnen bei Index 0
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#13

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:10
Meins nicht =)
Ich habe alles um 1 nach rechts verschoben, damit es später logischer nachzuvollziehen ist.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:13
Du belegst vielleicht den 1. Index nichtnicht.
Hast du den Array dann entsprechend größer gemacht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#15

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:16
Ja, das mit dem Array ist alles richtig, da bin ich mir sicher.
SetLength(Beispiel,MaxZeilen+1,MaxSpalten+1);
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:23
Was macht dein Code bzw. nicht?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#17

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 16:31
Also kurz zur Erklärung:
Ich klicke ein Feld an, tippe einen Buchstaben und der belegt dann den dazugehörigen Platz im Array. Wenn ich dazu noch dem Feld eine Eigenschaft zuweise, dann wird im Array die Eigenschaft vermerkt (Bsp: feld[1,1].zeichen := 'A'; feld[1,1].attribut := clblue; ).
Ich möchte bevor auf Tastendruck dem eigentlichen Array "feld" das zeichen zugewiesen wird, das Array erst kopieren in "Speicherarray" und dann erst das "feld" Array beschreiben. Dann möchte ich auf Tastendruck die Werte des "feld" Arrays mit denen des "Speicherarrays" überschreiben um den Zustand vor der letzten Taste herzustellen.

Schreiben, Eigenschaften und alles andere funktioniert. Was nicht funktioniert ist die gesuchte Undo-Funktion.

EDIT: Mit Copy(Array) kann man ein Array kopieren. Dies geht aber nur mit eindimensionalen Arrays, ich möchte ein zweidimensionales Array kopieren. Kann mir da wer helfen?

Geändert von Dunkelbunt27 (19. Mär 2011 um 18:14 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#18

AW: Image (Canvas) Rückgängig Funktion

  Alt 19. Mär 2011, 20:29
Delphi-Quellcode:
type
TChronologieElement = record
                    Zeichen : char;
                    attribut : byte;
                    X : Integer;
                    Y : Integer;
             end;

var
TChronologieArray : array of TChronologieElement;
Bei jeder neue Zuweisung
Delphi-Quellcode:
SetLength(TChronologieArray ,High(TChronologieArray ) + 2);
i := High(TChronologieArray);
TChronologieArray[i].Zeichen := ...
..etc
damit hast Du alle Informationen um jeden Zeitpunkt wieder herzustellen, bei minimalem Speicheraufwand...
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#19

AW: Image (Canvas) Rückgängig Funktion

  Alt 20. Mär 2011, 16:31
Hallo Bummi,

danke, das klingt super. Wenn ich immer nur den höchsten Wert kopieren, werden dann immer alle vorherigen Werte mitkopiert?
Würde das kopieren dann so aussehen:
Delphi-Quellcode:
SetLength(TChronologieArray ,High(TChronologieArray ) + 2);
i := High(TChronologieArray);
TChronologieArray[i].Zeichen := Beispiel[i].Zeichen;
TChronologieArray[i].attribut := Beispiel[i].attribut;
..etc
Ist das beides denn überhaupt "kompatibel", denn das TChronologieArray ist ja eindimensional.
Zitat:
TChronologieArray : array of TChronologieElement;
Und das BeispielArray zweidimensional
Zitat:
Beispiel: array of array of TBeispiel;
Wie erfolgt dann das eigentliche rückgängigmachen?
Funktioniert das auch mit SetLenght nur von ChronologieArray auf BeispielArray?

FG Dunkelbunt
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#20

AW: Image (Canvas) Rückgängig Funktion

  Alt 20. Mär 2011, 19:31
Irgendwie denken und reden wir aneinander vorbei, ich hatte Dich so verstanden du Du nacheinander Änderungen an "Zellen" vornimmst (Char und Farbe).
Wenn Du jede Änderung mitprotokollierst und Deinen Ausgangszustand kennst kannst Du entweder beim Rückgängig machen vom Ausgangszustand alle Schritte bis zu diesem gewünschten Punkt "abspielen" oder von Hinten jeweils den "Vorgängerzustand" der zurückzunehmenden Zelle suchen und diesen wiederherstellen.
Möglicherweise habe ich Dich aber auch ganz falsch verstanden....
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 02:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz