AGB  ·  Datenschutz  ·  Impressum  







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

Fokus bleibt bei TUpDown hängen

Ein Thema von ernschd · begonnen am 17. Aug 2012 · letzter Beitrag vom 21. Aug 2012
Antwort Antwort
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#1

Fokus bleibt bei TUpDown hängen

  Alt 17. Aug 2012, 09:04
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
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Fokus bleibt bei TUpDown hängen

  Alt 17. Aug 2012, 17:55
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 UpDown1ChangingEx komplett entfernen!
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (17. Aug 2012 um 17:59 Uhr)
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Fokus bleibt bei TUpDown hängen

  Alt 20. Aug 2012, 09:30
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...
  Mit Zitat antworten Zitat
ernschd

Registriert seit: 16. Jan 2008
166 Beiträge
 
Delphi XE8 Professional
 
#4

AW: Fokus bleibt bei TUpDown hängen

  Alt 21. Aug 2012, 10:12
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.
  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 18:15 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