Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Problem mit TEdit und String (https://www.delphipraxis.net/78659-problem-mit-tedit-und-string.html)

Delphine 9. Okt 2006 04:21


Problem mit TEdit und String
 
Hallo, ich habe da ein Problem mit einem Edit-Feld. Den Quellcode habe ich bis auf 2 Zeilen reduziert. Programm stürtz mit Fehlermeldung "... EStackOverflow ... StackÜberlauf ..." ab.

Es soll sich bei jeder Änderung (programmiert oder eingegeben) der Text ändern:

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
  var s: String;
begin
  s := Edit1.Text + ' BlaBla';
  Edit1.Text := s;
end;
Eigentlich wollte ich das programmieren (was auch nicht funktionierte):

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  Edit1.Text := Edit1.Text + ' BlaBla';
end;
Auf dem Formular ist nichts außer dem EditFeld. Code ist im OnChange-Ereignis.
Was ist die Ursache (bitte kein Fachchinesisch, bin Anfänger)?
Wie kann man die Aufgabe erfüllen und den Absturz vermeiden?

PS: Wozu muß ich die Programmiersprache nochmal eingeben - habe ich doch bei der Registrierung ins Profil schonmal eingetragen? Könnte das nicht oben automatisch erscheinen?

Sunlight7 9. Okt 2006 05:35

Re: Problem mit TEdit und String
 
Herzlich Willkommen in der DP! :cheers:

Cool, ich hab auch noch Delphi 2.0 (im Profil steht 5, hab ich auch)

Zitat:

Zitat von Delphine
PS: Wozu muß ich die Programmiersprache nochmal eingeben - habe ich doch bei der Registrierung ins Profil schonmal eingetragen? Könnte das nicht oben automatisch erscheinen?

Viele haben mehrere Sprachen, so wie ich, deshalb.

Zu Deinem Problem:

Problem:
Wenn Du in einer OnChange den Text änderst löst Du wieder eines aus, indem Du den Text wieder änderst, also wieder ein OnChange auslöst, indem Du wieder ... Bis es kracht.

Lösung:
Das OnChange vorübergehend deaktivieren.
Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
begin
  Edit1.OnChange:=nil;
  Edit1.Text := Edit1.Text + ' BlaBla';
  Edit1.OnChange:=Edit1Change;
end;

himitsu 9. Okt 2006 10:18

Re: Problem mit TEdit und String
 
Zitat:

Zitat von Sunlight7
Lösung:
Das OnChange vorübergehend deaktivieren.


Es gäbe noch die Möglichkeit über eine eigene Variable.

Wobei dieses vorallem Vorteile hätte, wenn mehrere Ereignisprozeduren wärend "gesperrt" werden sollen.
Delphi-Quellcode:
var irgendwas: boolean; // oder in der klasse definiert

procedure TForm1.Edit1Change(Sender: TObject);
begin
  if irgendwas then exit;

  irgendwas := true;
  Edit1.Text := ...;
  Edit2.Text := ...;
  irgendwas := false;
end;

procedure TForm1.Edit2Change(Sender: TObject);
begin
  if irgendwas then exit;

  irgendwas := true;
  Edit1.Text := ...;
  Edit2.Text := ...;
  irgendwas := false;
end;
für nur eine Ereignisprozedur ist das natürlich eventuell ewas "zuviel" Aufwand :angel:


Wenn die Ereignisprozedur auch veränderlich sein könnte, dann sollte man die aktuelle Zuweisung zwischenspeichern und danach wiederherstellen, :warn:
was bei der Methode mit Zusatzvariable natülich nicht nötig wäre.

Delphi-Quellcode:
procedure TForm1.Edit1Change(Sender: TObject);
var NE: TNotifyEvent;
begin
  NE := @Edit1.OnChange;
  Edit1.OnChange := nil;
  Edit1.Text := Edit1.Text + ' BlaBla';
  Edit1.OnChange := @NE;
end;

PS: hab hier och Mehreres? D1, D4, D5, D7, D05, DSB06 und Turbo ... also was soll's?
D4/D7 wird aber genutzt ^^

marabu 9. Okt 2006 10:29

Re: Problem mit TEdit und String
 
Hallo,

das Anhängen einer String-Konstante bringe ich mit Eingabefeldern für Geldbeträge oder physikalische Größen in Verbindung. Dort verbindet man die Anzeige aber nicht mit dem Ereignis OnChange(), sondern hängt die Einheitenbezeichnung im Ereignis OnExit() an und entfernt sie beim Ereignis OnEnter().

Freundliche Grüße vom marabu

Sunlight7 9. Okt 2006 17:09

Re: Problem mit TEdit und String
 
@himitsu

Jupp, das stimmt schon, aber ich wollte es für einen Anfänger mal ganz einfach erklären (so wie gewünscht), meistens kommen dann eh weitere Fragen.

himitsu 9. Okt 2006 20:09

Re: Problem mit TEdit und String
 
Zitat:

Zitat von Sunlight7
Jupp, das stimmt schon, aber ich wollte es für einen Anfänger mal ganz einfach erklären (so wie gewünscht), meistens kommen dann eh weitere Fragen.

hab deines doch nicht bemängelt ... 's war nur damit dann keine fragen kommen wenn dieses nötig ist :angel:

Sunlight7 9. Okt 2006 22:50

Re: Problem mit TEdit und String
 
Zitat:

Zitat von himitsu
hab deines doch nicht bemängelt ...

Hat ja keiner gesagt :angel2:
Wollt ich nur mal festhalten :zwinker:

Aber jetzt wieder genug OT :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:29 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 by Thomas Breitkreuz