AGB  ·  Datenschutz  ·  Impressum  







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

Funktion 'Rückgängig' bei RichEdit?

Ein Thema von user64629 · begonnen am 30. Apr 2011 · letzter Beitrag vom 1. Mai 2011
Antwort Antwort
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 07:08
In einer Initialisierungsroutine würde ich sicherheitshalber Anzahl_Änderungen := 0; setzen.

In EingabetextChange passiert z.B.:
Anzahl_Änderungen := 1;
SetLength(Änderungen, 1); => das array hat ein Element, nämlich Änderungen[0]
Änderungen[1] := 'blah'; => Bereichsfehler

IMHO (ungetestet) müssen
- die Zugriffe auf das array korrigiert werden (-1)
- die array-Elemente mit Create erzeugt werden, weil sonst nur ein Pointer auf die Eingabetext.Lines im array steht

Das Ganze passiert bei jedem Tastendruck! Schätze, dass bei einem längeren Text bald mal der Speicher knapp wird. Das array mit z.B. 20 Elementen zu begrenzen, fände ich sinnvoll. Man kann auch überlegen, nur die Differenz zu speichern anstatt des kompletten Textes.

Geändert von ConnorMcLeod ( 1. Mai 2011 um 07:49 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#2

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 08:48
Crossposts bitte künftig verlinken.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
user64629
(Gast)

n/a Beiträge
 
#3

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 11:01
Okay ich habe es jetzt soweit übernommen, aber an einer Stelle stürzt das trotzdem immer wieder ab:
wenn keine Zeichen mehr da sind und ich auf Rückgängig klicke...

Delphi-Quellcode:
 if Length(Änderungen) <> 0
    then begin
          Eingabetext.Lines.Clear;
          Eingabetext.Lines.Text := Änderungen[Length(Änderungen) - 2];
          SetLength(Änderungen, Length(Änderungen) - 1);
         end
    else Beep;
Genau bei SetLength kommt die Fehlermeldung (ist ja auch logisch) aber das dürfte doch gar nicht mehr ausgeführt werden??
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#4

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 11:05
Was kommt denn bei
Zitat:
Length(Änderungen) - 2
heraus, wenn nur noch ein Element im Array vorhanden ist?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
user64629
(Gast)

n/a Beiträge
 
#5

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 11:21
Okay daran lag es -.- Hab nicht ganz nachgedacht.
Bei Length(Änderung) = 1 ist ja nur noch Änderung[0] da...

Delphi-Quellcode:
 if Length(Änderungen) > 1
    then begin
          Eingabetext.Lines.Clear;
          Eingabetext.Lines.Text := Änderungen[Length(Änderungen) - 2];
          SetLength(Änderungen, Length(Änderungen) - 1);
         end
Jetzt klappt es einwandfrei danke
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.656 Beiträge
 
Delphi 12 Athens
 
#6

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 11:39
Auf diese Weise bekommst Du aber das letzte Array-Element nicht gelöscht. Wie wäre es so?
Delphi-Quellcode:
 if Length(Änderungen) > 0
    then begin
          Eingabetext.Lines.Clear;
          SetLength(Änderungen, Length(Änderungen) - 1);
          if Length(Änderungen) > 0 then
            Eingabetext.Lines.Text := Änderungen[High(Änderungen)];
         end
BTW: Wenn das Array Objekte enthalten sollte, musst Du diese noch freigeben, sonst hast Du ein feines Speicherleck produziert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
user64629
(Gast)

n/a Beiträge
 
#7

AW: Funktion 'Rückgängig' bei RichEdit?

  Alt 1. Mai 2011, 11:57
Kann ich nicht einfach im OnClose Ereignis sowas wie

 SetLength(Änderung, 0); einfach machen?
  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 00:31 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