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 Event wird ausgelöst, obwohl es nicht sein sollte (https://www.delphipraxis.net/138795-event-wird-ausgeloest-obwohl-es-nicht-sein-sollte.html)

haentschman 17. Aug 2009 19:51


Event wird ausgelöst, obwohl es nicht sein sollte
 
Hallo alle miteinander... :hi:

Ich kann diesen tollen Effekt nicht nachvollziehen.

Gegebenheiten:
- man nehme 2 Forms. (der Einfachheit halber Form1, Form2)
- auf Form1 ein JvDBGrid
- OnTitleClick des JvDBGrid wird ausgewertet. (Sortierung)
- Form2 wird aus Form1 modal angezeigt
- auf Form2 ein JvDBTreeView
- im DoppelklickEvent des JvDBTreeView wird nur Form2.Close aufgerufen.

Das Problem:
- wenn Form2 so ungünstig positioniert ist, daß der Klickpunkt über dem Titel vom JvDBGrid auf Form1 liegt
wird nach dem Schließen von Form2 OnTitleClick des JvDBGrids ausgelöst.
- es fühlt sich an, als würde ich durch Form2 durchklicken. OnTitleClick wird aber erst ausgelöst, wenn Form2 geschlossen ist

was ich probiert habe:
- beim Durchsteppen mit F9 durch die nach der Rückkehr aus Form2.ShowModal vorhandenen Anweisungen wird OnTitleClick nicht ausgelöst
- ein einziger Breakpoint nur in OnTitleClick wird immer angesprungen
- ShowMessage vor Form2.Close verhindert OnTitleClick ( auch mit dem OK Button über dem Titel )
- Application.ProcessMessages vor Form2.Close verhindert OnTitleClick nicht
- OnTitleClick:= nil vor Form2.ShowModal und Zuweisung nach Rückkehr landet immer in OnTitleClick

...jetzt gehen mir langsam die Ideen aus. :gruebel:

:gruebel: Wo kommt dieser Klick her ?

PS:
- das Kompilat verhält sich auch auf verschiedenen Systemen gleich.
- eine Demo mit einem Label (Form2) und einem Panel (auf Form1) hat diesen Effekt nicht

Viel Spaß beim Raten :zwinker:

Danke für Infos :hi:

Satty67 17. Aug 2009 20:06

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
Naja, der zweite Klick wird von Form2 nicht mehr ausgewertet und aufgehoben, bis wieder ein Control den Focus hat und ihn auswerten kann.

In Form2.OnClose mal ein Application.ProcessMessages um den Klick zu schlucken?

Kann es sein, dass JvDBTreeView bereits beim ersten Klick das DoppelKlick-Ereignis ausführt? Evtl. mal testen, was passiert, wenn JvDBTreeView für OnClick auch einen Ereignisbehandlung hat.

haentschman 17. Aug 2009 20:13

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
Danke für die schnelle Reaktion.

Application.ProcessMessages im OnClose von Form2 verhindert das auslösen nicht :(

[edit]
- OnClick dazu OnDblClick wird niemals ausgeführt da immer erst OnClick greift.
- ohne OnClick wird bei einem Klick OnDblClick nicht ausgeführt

Satty67 17. Aug 2009 20:32

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
Ok, Verhalten im [edit]-Abschnitt ist normal.

Hab' es mit ein paar Komponenten probiert, kann es aber nicht reproduzieren (will jetzt aber auch nicht die JediDB Komponenten nachinstallieren, die sollen erst mal nicht in meine neue IDE).

Evtl. weis jemand anderes Rat.

haentschman 17. Aug 2009 20:34

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
Kann ich verstehen...

Danke für deine Hilfe :hi:

haentschman 18. Aug 2009 20:50

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
dezent nach oben ...

alle ignorieren mich :mrgreen:

TBx 18. Aug 2009 21:11

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
tritt das Phänomen auch auf, wenn Du statt Form2.Close Form2.ModalResult:=mrOk setzt?

Btw: Das Form2 gehört da nicht hin! Die Befehler Close und auch die Eigenschaft Modalresult gehören eh zu dem Form. Und eine Instanz der Klasse solltest Du in der Klasse niemals ansprechen.

Gruß aus dem hohen Norden

haentschman 18. Aug 2009 21:21

Re: Event wird ausgelöst, obwohl es nicht sein sollte
 
Hallo Tbx,

ModalResult:=mrOk bringt keine Veränderung. :(

Zitat:

Das Form2 gehört da nicht hin!
...klar doch. Aber zum besseren Verständnis im Text schon :mrgreen:

Danke :hi:


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