Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - MessageBox poppt mehrfach auf
aim65 - Sa 23.12.06 16:53
Titel: MessageBox poppt mehrfach auf
Habe ein ScrollBar auf der Form. Wenn es angesprochen wird, erscheint in Abhängigkeit von einem Flag eine Message. Problem: beim klicken auf OK poppt die Message mindestens noch einmal auf (wenn der Button im ScrollBar angeklickt wurde, sogar noch zweimal), bevor sie endgültig verschwindet. Wie kann man das verhindern?
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm2.ScrollBar2Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin if VFOflg then begin DDS := 400e6 + Trunc(ScrollPos); FreqCorr.Caption := FloatToStrF(DDS/1000,fffixed,15,3); end else ShowMessage('Frequenzkorrektur nur im VFO-Modus möglich'); end; |
Lannes - Sa 23.12.06 17:24
Hallo,
spricht irgendwas dagegen das Ereignis OnChange zu verwenden?
aim65 - Sa 23.12.06 17:42
Danke Lannes, hab's gerade ausprobiert - geht mit OnChange. :lol: Ich hätte trotzdem gerne gewußt, warum das bei OnScroll passiert. Falls das jemand weiß..... :idea:
Lannes - Sa 23.12.06 18:44
Hallo,
damit man direkter auf Scrollaktionen reagieren kann.
Ausgelöst wird OnScroll bei MouseDown, MouseMove und MouseUp.
Kannst Dir ja die Events mal in einem Memo aufzeichnen lassen:
Delphi-Quelltext
1: 2: 3: 4: 5:
| procedure TForm1.ScrollBar1Scroll(Sender: TObject; ScrollCode: TScrollCode; var ScrollPos: Integer); begin Memo1.Lines.Add(IntToStr(ScrollPos)+' '+IntToStr(ScrollBar1.Position)); end; |
Und schau Dir mal die unterschiedlichen Werte an.
aim65 - Sa 23.12.06 20:07
Das ist mir schon klar.
Aber wieso passiert das mehrfache Pop-Up? :gruebel: Das Drücken des OK-Buttons ist ja kein Scrollereignis mehr. Die MessageBox liegt übrigens außerhalb des ScrollFeldes. Schwirren da noch Windows-Msgs herum - und falls ja, könnte man die abfangen?
Lannes - Sa 23.12.06 21:16
Hallo,
Lannes hat folgendes geschrieben: |
Ausgelöst wird OnScroll bei MouseDown, MouseMove und MouseUp. |
Also:
Du klickst auf die Scrollbar > MouseDown > OnScroll > MessageBox
Die Folge > MouseUp > OnScroll > neue MessageBox
Wenn dazwischen noch > MouseMove > OnScroll > noch eine MessageBox
Durch die Anzeige der ersten MessageBox werden die aufgetretenen Ereignisse nicht aus der Nachrichtenschlange (queue) gelöscht, sie werden danach abgearbeitet und lösen die erneute(n) Anzeige(n) der MessageBox aus.
Man kann mehr oder weniger alles abfangen, reicht dir bei Deinem Problem denn der Umstieg auf OnChange nicht?
aim65 - Sa 23.12.06 23:13
Doch, OnChange reicht in diesem Fall völlig - daher auch das Erledigt-Häkchen.
Hat mich eben nur interessiert, wie man im anderen Fall so etwas abfängt.
Nochmal, Danke für die ausführliche Erklärung. :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!