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 3 von 3     123   
Benutzerbild von Dunkelbunt27
Dunkelbunt27

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

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

  Alt 20. Mär 2011, 20:03
Also, das mit den Zellen ist richtig, man kann es auch einfach so sehen, die Zellen bilden ein Raster und du schreibst praktisch einen Text, indem in ejde Zelle ein Buchstabe kommt. Mit der Rückgängig funktion wollte ich versuchen, den aktuellen zustand vor jeder Änderung abzuspeichern, bestenfalls so, dass man mehrere Schritte abspeichert.
Da in einem einzigen mehrdimensionalen Array die Daten für alle Zellen gespeichert sind, müsste ich eigentlich nur wissen, wie ich ein Array verdoppeln kann. Die Copy(Array) funktion funktioniert nur bei eindimensionalen Arrays, leider.
Ich möchte also einfach ein komplettes Array auf ein anderes Übertragen:
Bsp:
ArraySpeicher := ArrayA
-ArrayA wird verändert -
Die Veränderung gefällt nicht => ArrayA := ArraySpeicher
nur geht das ja nicht so einfach mit Gleichsetzen.

Es geht also nicht nur eine einzige Zelle rückgängig zu machen, da es wie in einem zusammenhängenden Text nichts bringt nur den ertsen Buchstaben rückgängig zu machen, denn dort stand ja vor dem schreiben nichts.
(Ich hoffe ich verwirre nicht zu sehr)
  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
 
#22

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

  Alt 20. Mär 2011, 20:39
Du kannst freilich Array's kopieren
Delphi-Quellcode:
// Fixe Array's völlig unproblematisch
procedure TForm1.Button1Click(Sender: TObject);
type
r=Record
 c:Char;
 f:Byte;
end;
TArr=array[0..9,0..9] of r;
var
 a,b:TArr;
 i,j:Integer;

begin
  for I := 0 to 9 do
    for j := 0 to 9 do
      begin
      a[i,j].c := Char(Ord('0') + i*10 + j) ;
      a[i,j].f := i*10 + j;
      end;
  b := a;
  Caption := b[2,2].c +'-'+ IntToStr(b[2,2].f)
end;

// Asymetrische Array, eben Iterativ
procedure TForm1.Button2Click(Sender: TObject);
type
r=Record
 c:Char;
 f:Byte;
end;
TArr = Array of Array of r;
var
 a,b:TArr;
 i,j:Integer;
 Function CopyMyArray(a:TArr):TArr;
    var
      x,y:Integer;
    begin
      SetLength(Result,High(a) + 1);
      for x := Low(a) to High(a) do
        begin
          SetLength(Result[x],High(a[x])+1);
          for y := Low(a[x]) to High(a[x]) do Result[x,y] := a[x,y];
        end;
    end;
begin
  SetLength(a,10);
  for I := Low(a) to High(A) do
    begin
       SetLength(a[i],i);
       for j := Low(a[i]) to High(a[i]) do
          begin
          a[i,j].c := Char(Ord('0') + i*10 + j) ;
          a[i,j].f := i*j;
          end;
    end;
  b := CopyMyArray(a);
  if (a[4,2].c=b[4,2].c) and (a[4,2].f=b[4,2].f) then Showmessage('Passt scho...')

end;

Trotzdem bin ich sicher dass Dir meine eigentlich Struktur langt und den Speicherbedarf minimiert.
Wenn jedes Zeichen erfasst wird und der Benutzer nach 100 Schritten zu Schritt 98 zurückkehren will, leerst Du Dein Grundarray und spielst die Aufzeichnungen bis Schritt 98 wieder ein ... und so weiter...
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
 
#23

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

  Alt 20. Mär 2011, 20:49
Zitat:
100 Schritten zu Schritt 98 zurückkehren will, leerst Du Dein Grundarray und spielst die Aufzeichnungen bis Schritt 98 wieder ein
Interessant, jetzt versteh ich erst richtig wie diese Idee anzuwenden ist!
Wenn man das also z.B: wie in jedem Texteditor (als Beispiel) mit einer Rückgängigtaste auslöst, dann leere ich wie du egsagt hast das Array und spiele die Schritte wieder auf... Das ist wenn man genau drübernachdenkt richtig raffiniert... =D
Danke auch für die ArrayKopier funktionen. Ich denke damit komme ich weiter!

Vielen Dank nochmal und FG Dunkelbunt
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

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

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

  Alt 22. Mär 2011, 18:18
Hallo nochmal,

ich bin noch etwas unsicher und frage lieber nochmal nach. Entschuldigt die dumme Frage.
Zitat:
leerst Du Dein Grundarray und spielst die Aufzeichnungen bis Schritt 98 wieder ein
Mein Array kann ich doch indem ich den Ausgangszustand herstelle, nicht?
Wie spiele ich dann die Schritte 1-98 wieder auf?

EDIT: (Ich komme da total durcheinander, weil ich ja X und Y Werte für die Buchstaben habe... aber ich denke Du oder jemand anders kann mir da weiterhelfen =D)

Ich hab es so gemacht, doch es ist irgendwo was falsch:

var Chronozaehler : integer = 0; Bei jeder Veränderung:
Delphi-Quellcode:
SetLength(TChronologieArray ,High(TChronologieArray )+2); //warum eigentlich +2? Nicht +1?
Chronozaehler := High(TChronologieArray);

TChronologieArray[Chronozaehler].attribut := buchstabe[PositionZeile,PositionSpalte].attribut;
TChronologieArray[Chronozaehler].X := PositionZeile;
TChronologieArray[Chronozaehler].Y := PositionSpalte;
Auf Druck der Undo-Taste:
Delphi-Quellcode:
if Chronozaehler > 0 then
Chronozaehler := Chronozaehler-1;

for i := 0 to AnzahlZeilen do
    for n := 0 to AnzahlSpalten do
      begin
        buchstabe[i,n].Zeichen := ' ';
        buchstabe[i,n].attribut := 0;
      end;

for i := Low(TChronologieArray) to Chronozaehler do
    buchstabe[TChronologieArray[i].X,TChronologieArray[i].Y].Zeichen := TChronologieArray[i].Zeichen;

PositionZeile := TChronologieArray[Chronozaehler].X;
PositionSpalte := TChronologieArray[Chronozaehler].Y;
Ich finde es funktioniert auch recht gut, aber unerklärlicherweise rutscht bei ersten Undo einfach alles eine Spalte nach rechts und der letzte Buchstabe verschwindet, also:
aus Hallo[] wird _Hall[]. ([] = Cursor)
Beim zweiten mal ist es dann so wie es soll.
Aus _Hall[] wird _Hal[] ...


FG Dunkelbunt

Geändert von Dunkelbunt27 (22. Mär 2011 um 19:19 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
 
#25

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

  Alt 23. Mär 2011, 23:38
Hi, möglicherweise beginnen Deine Indizes bei 1 statt bei 0, der folgende Teil müsste in jedem Fall Ärger machen
Delphi-Quellcode:
for i := 0 to AnzahlZeilen do
    for n := 0 to AnzahlSpalten do
        buchstabe[i,n]....
bei z.B. 5 Zeilen greift Du zu von 0..5 also auf 6 Elemente.

Ich habe einen kleinen Anhang erstellt, mit Ersatzweise einem Stringgrid und String statt Zeichen. Das Prinzip bleibt ähnlich.
Angehängte Dateien
Dateityp: zip BSP.zip (1,7 KB, 2x aufgerufen)
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
 
#26

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

  Alt 24. Mär 2011, 18:25
Danke für das Beispiel Bummi.
Ich habe es probiert, doch es gibt ständig Komplikationen.
Ich hab noch eine andere Idee für die Rückgängigfunktion und lass diese Idee erstmal auf der Strecke.
Trotzdem ist es ziemlich nützlich zu wissen wie man eine solche Anlegen kann unabhängig von der Wirkung die man erreichen will.

FG Dunkelbunt
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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:01 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