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/)
-   -   Fokus bleibt bei TUpDown hängen (https://www.delphipraxis.net/169868-fokus-bleibt-bei-tupdown-haengen.html)

ernschd 17. Aug 2012 08:04

Fokus bleibt bei TUpDown hängen
 
Hallo,

ich habe in meinem Programm ein seltsames Verhalten: ich habe ein Editfeld, dazu eine TUpDown-Komponente, die dem Editfeld mit Associate zugewiesen ist. Wenn ich nun den (numerischen) Wert im TEdit mit Up oder Down verändere, und direkt danach eine Aktion ausführe, reagiert die TUpDown-Komponente bei jedem Klick auf dem Formular, egal wo. Ich habe hier mal einen Beispielcode, wo ich statt meiner Aktion einfach ein Showmessage aufrufe, um das ganze zu verdeutlichen.

Delphi-Quellcode:
procedure TForm1.UpDown1ChangingEx(Sender: TObject; var AllowChange: Boolean;
  NewValue: Smallint; Direction: TUpDownDirection);
begin
    UpDown1.Tag := StrToInt(Edit1.Text);
    UpDown1.Tag := UpDown1.Tag + NewValue;
    Edit1.Text := Format('%.7d', [UpDown1.Tag]);
    ShowMessage('ok');
    AllowChange := False;
end;
Kann das Verhalten noch jemand nachvollziehen? Oder besser: hat jemand einen Vorschlag, wie ich den mehrfachen Aufruf verhindern kann?

Gruß,
ernschd

Helmi 17. Aug 2012 16:55

AW: Fokus bleibt bei TUpDown hängen
 
Hallo,

ich kann das Verhalten mit deinem Code unter XE2 nachvollziehen.

Aber eigentlich willst du ja nur den Inhalt des Edits formatieren.

Dazu hätt ich folgenden Code, der in Verbindung mit TUpDown funktioniert:

Einfach im OnChange des Edits folgendes einbauen:

Delphi-Quellcode:
procedure TForm3.Edit1Change(Sender: TObject);
var
  i: Integer;
  Temp: TNotifyEvent;

begin
  Temp := Edit1.OnChange;
  Edit1.OnChange := nil;

  If TryStrToInt(Edit1.Text, i) then
    begin
      Edit1.Text := Format('%.7d', [i]);
    end;

  Edit1.OnChange := Temp;
end;
Und deinen Code aus dem
Delphi-Quellcode:
UpDown1ChangingEx
komplett entfernen!

ernschd 20. Aug 2012 08:30

AW: Fokus bleibt bei TUpDown hängen
 
Hallo,

das funktioniert leider auch nicht wie gewünscht.
Ich möchte eine Aktion ausführen, sobald eine 7-stellige Nummer eingeben wurde. In diesem Fall verwende ich statt meiner Aktion zum verdeutlichen ein Showmessage. Auch mit dem Code vom OnChange-Event reagiert die UpDown-Komponente auf jeden Klick auf das Formular.

Langsam bin ich ratlos...

ernschd 21. Aug 2012 09:12

AW: Fokus bleibt bei TUpDown hängen
 
Problem gelöst

Ich führe im UpDown1ChangingEx nur noch die Formatierung des Editfelds durch.
Die Aktion danach starte ich im TUpDownMouseUp-Event. So ist das merkwürdige Verhalten von oben ausgehebelt. Vielleicht hilft meine Lösung jemand weiter.


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