AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi tedit.onchange schluckt ersten Wert bei Iteration
Thema durchsuchen
Ansicht
Themen-Optionen

tedit.onchange schluckt ersten Wert bei Iteration

Ein Thema von DrUArn · begonnen am 2. Apr 2012 · letzter Beitrag vom 4. Apr 2012
Antwort Antwort
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 2. Apr 2012, 21:16
OK,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var i:integer;
begin
    if tbutton(sender).tag =0 then
      for I := 1 to 3 do
         begin
         edit1.text:='9999';
// memo1.lines.Add(inttostr(i));
         edit1.text:=inttostr(i)
         end
    else
      for I := 3 downto 1 do
       begin
       edit1.text:='9999';
// memo1.lines.Add(inttostr(i));
       edit1.text:=inttostr(i);

       end;

memo1.lines.Add('_____');

if tbutton(sender).tag=0 then tbutton(sender).tag:=1 else tbutton(sender).tag:=0;
end;
So geht das dann erst einmal - kann man nun delphi zwingen diese Prüfung zu unterlassen?


oder so:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 var i:integer;
     ereignis:tereignishprozedure// ???? fällt mir grad' nicht ein, welche var das sein müßte
begin
    if tbutton(sender).tag =0 then
      for I := 1 to 3 do
         begin
         ereignis:=edit1.onchange;
         edit1.onchange:=nil;
         edit1.text:='9999';
         edit1.onchange:=ereignis;
// memo1.lines.Add(inttostr(i));
         edit1.text:=inttostr(i)
         end
    else ....

       end;

memo1.lines.Add('_____');

if tbutton(sender).tag=0 then tbutton(sender).tag:=1 else tbutton(sender).tag:=0;
end;
... sieht sehr masochistisch aus.

oder

procedure TControl.SetText(const Value: TCaption);
begin
if GetText <> Value then
...
end;

überschreiben???


MfG Uwe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 2. Apr 2012, 21:24
Nee, wozu? (OK, aber wozu sich jetzt mit der WinAPI oder über Perform an das Edit wenden, nur um etwas Falsches zu machen )
OnChange gibt an, daß sich der Wert geändert hat und geändert hat er sich schließlich nicht.

Du kannst aber dein ChangeEreignis auch manuell aufrufen.

Delphi-Quellcode:
Edit1Change(nil);
oder
if Assigned(Edit1.OnChange) then Edit1.OnChange(nil);
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 2. Apr 2012 um 21:27 Uhr)
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 2. Apr 2012, 21:55
Nee, wozu? (OK, aber wozu sich jetzt mit der WinAPI oder über Perform an das Edit wenden, nur um etwas Falsches zu machen )
OnChange gibt an, daß sich der Wert geändert hat und geändert hat er sich schließlich nicht.

Du kannst aber dein ChangeEreignis auch manuell aufrufen.

Delphi-Quellcode:
Edit1Change(nil);
oder
if Assigned(Edit1.OnChange) then Edit1.OnChange(nil);
Ist korrekt, onchange nur bei geänderten Werten - heißt so und soll's auch tun!
Über direktes rufen muß ich erst mal nachdenken.

Erst mal Danke an alle Diskutanten

Uwe
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 2. Apr 2012, 23:20
Jetzt wäre es doch mal interessant zu wissen, was du eigentlich erreichen möchtest.

a) alle Änderungen vom Edit im Memo protokollieren - genau das macht der Code den du im OnChange Event defibiert hast

oder

b) Werte aus den beiden Schleifen im Memo speichern (und gleichzeitig die Anzeige im Edit - obwohl das so keinen Sinn macht, weil das niemand lesen kann, bei der Geschwindigkeit)

denn bei a) bist du schon mit deinem Ursprungscode fertig und bei b) musst du das OnChange Event für das Edit wegnehmen und innerhalb der Schleifen direkt in das Memo schreiben

oder gibt es gar noch c) ... ?

Es macht keinen Sinn irgendwie "heilenden" Code zu produzieren um ein angeblich "fehlerhaftes" Standardverhalten zu korrigieren. Denn hier haben wir keinen Bug, sondern einen falschen Ansatz
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#5

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 3. Apr 2012, 07:04
Mal grundsätzlich: Wenn ich verhindern möchte, das z.B. OnChange aufgerufen wird, habe ich zwei Möglichkeiten:

1. Ich kann, wie schon gezeigt, die Events kurz abschnippeln, dann das tun, was ich tun will und wieder anbepseln
oder
2. Ich verwende ein privates Feld 'Silent' oder wie auch immer
2.1 Prüfe in jedem Event If Silent then exit; .
2.2 Setze vor dem, was ich machen will 'Silent := True' und hinterher wieder auf false.

Sinnvoll ist das z.B. beim erstmaligen Initialisieren von Eingabefeldern oder wenn ich kaskadierte oder schlimmer: rekursive aufrufende Events befürchten muss.

(1) verwende ich, wenn alle OnChange-Events auf ein zentrales Event zeigen. Dann habe ich eine Routine zum wegschnippeln und eine zum anbepseln. Die zum Anbepseln rufe ich im FormCreate auf.

(2) verwende ich, wenn die Events alle unterschiedlich sind. denn dann würde die Anbepsel-Routine schnell ziemlich lang und langweilig werden.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 3. Apr 2012, 08:35
@Furtbichler:
Ich glaub du hast das falsch verstanden.

Der TE beschwert sich nicht über zuviele ausgelöste Events, sondern über Zuwenige.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: tedit.onchange schluckt ersten Wert bei Iteration

  Alt 4. Apr 2012, 10:41
Guten morgen an alle,

@Sir Rufo: ... es ist wohl eher (c ...

So weit wollte ich mich noch gar nicht raushängen.
Manchmal brauche ich beim Entwickeln eine Testroutine, bei der über Zahlen iterierend eine andere überprüft wird.
Das soll alles ein Abkömmling von Tedit erledigen.
Das onchange-Ereignis erschien mir als geeignet, die zu prüfende Routine zu rufen (im Beispiel memo1.lines.add()). Es geht nicht um das Memo. Das nutze ich nur, um die Ergebnisse darzustellen. Dabei fiel mir eben dieses - völlig normale - Verhalten von onchange auf.

Heißt, will ich jedesmal ALLE Werte iterieren, ist onchange NICHT geeignet - was dann? Oder sollte man dann eine neue Ereignisbehandlungsroutine kreieren?

Ich hatte eh' vor, den Quellcode zur Diskussion zu posten - ist aber noch nicht fertig.

Ich denke, bis Ostern schaff' ich das noch.


MfG Uwe
  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 06:36 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