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/)
-   -   Delphi TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint (https://www.delphipraxis.net/122223-tedit-mit-tupdown-feuert-onchange-bei-erstem-onpaint.html)

anse 11. Okt 2008 16:59


TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint
 
Tja, der Betreff sagts eigentlich: Es geht um einen Preferences Dialog. Die Form hat ein PageControl mit 4 Tabs. Ein TEdit auf dem zweiten TTabSheet ist mit einem TUpDown assoziiert.

1. Beim Start ist das erste TTabSheet aktiv.
2. In Form.OnShow wird TUpDown.Position auf sagen wir "10" gesetzt.
3. Danach wird ein OK Button disabled
4. Beim Klick auf den zweiten Tab (auf dem das TEdit sitzt) feuert das TEdit von Geisterhand ein OnChange.

Die Implementierung sieht vor, bei OnChange aller Komponenten dieses Dialogs einen "OK" Button auf .Enabled := True zu setzen. Nun wird also beim Klick auf den zweiten Tabsheet der OK Button aktiv, obwohl der Benutzer noch gar nichts geändert hat.

Wie kanns? Ich vermute daß das TEdit erst bei Bedarf (= wenn der Tab + das TEdit sichtbar wird) gemalt wird und dabei, in Verbindung mit dem TUpDown, OnChange ausgelöst wird. Aber das scheint irgendwie unlogisch.

(Delphi 2007)

anse 12. Okt 2008 11:12

Re: TEdit (mit TUpDown) feuert OnChange bei erstem OnPaint
 
2 Workarounds gefunden:

1.

Delphi-Quellcode:
private FWasModified : Boolean

proc PageControl.OnChanging
  FWasModified := OKButton.Enabled

proc PageControl.OnChange
  OKButton.Enabled := FWasModified

2.
Delphi-Quellcode:
proc Form.OnShow
  UpDown.Position := 123;
  PageControl.ActivePage := tabWithUpDownInIt;
  PageControl.ActivePage := firstTab;
Der zweite sieht eher dreckig aus, daher habe ich den ersten bevorzugt, der den Modifikations-Status über das automatische OnChange hinweg "rettet". Der 2. setzt einfach darauf, daß der überflüssige OnChange einmal beim Start direkt ausgeführt wird.


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