AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Modaler Doppelklick gibt Event an Ursprungsfenster weiter
Thema durchsuchen
Ansicht
Themen-Optionen

Modaler Doppelklick gibt Event an Ursprungsfenster weiter

Ein Thema von michaelg · begonnen am 11. Sep 2018 · letzter Beitrag vom 13. Sep 2018
Antwort Antwort
michaelg

Registriert seit: 20. Apr 2008
87 Beiträge
 
#1

Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 15:46
Delphi-Version: 10.2 Tokyo
Hallo alle,

mir ist da was ganz komisches aufgefallen.

Ich habe ein Fenster, in dem ein DBGrid ist. Dieses Grid hat ein OnTitleClick-Event, welches eine Umsortierung ausführt und sich merkt, welche Spalte gerade sortiert ist (dazu später).

Nun öffne ich einen modalen Dialog, welcher ganz normal mit Showmodal aufgerufen wird. In diesem modalen Fenster ist ein cxGrid mit einer Liste von Datensätzen
(eine Art Suchfenster). Das Doppelclick-Event auf einer Zeile schliesst den Dialog mit modalresult:=mrok;

Wenn ich nun auf einem bestimmten Datensatz doppelklicke, der genau auf Höhe der Spaltenüberschrift des anderen im Hintergrund liegenden Fensters liegt, wird zusätzlich das
OnTitleclick des anderen Fensters aufgerufen, nachdem der modale Dialog geschlossen wurde.

Ich habe in den Fenstern keinerlei Windows-Events überschrieben oder ähnliches. Der modale Dialog wird auch für die Application erzeugt, nicht für das Form, von dem
es aus aufgerufen wurde, dass heisst eigentlich haben die beiden Fenster gar nichts miteinanders zu tun.

Es ist sehr merkwürdig und sehe eine elementare Problematik. Ich hab schon gelesen, dass ein Doppelklick eigentlich aus vier Mouseevents besteht. Aber die müssten
dann doch abgearbeitet sein, wenn ich wieder in das Ursprungsfenster zurückkomme.

Hab noch kein kleines Beispielprogramm geschrieben, was ich hier posten könnte. Bevor ich mir die Mühe mache, wollte ich fragen, ob es eine Möglichkeit gibt, dem modalen
Dialog oder der Applikation oder Windows zu sagen, dass genau dieses Event abgearbeitet ist, so dass im Ursprungsfenster kein OnTitleclick mehr ankommt. Oder eben irgendwie zu verhindern, dass das Event im Ursprungsfenster auch noch aufgerufen wird.

Weiß jemand was dazu?
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#2

AW: Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 16:25
Hallo

Ich verlinke mal einen anderen Beitrag auf stackoverflow.
Dort handelt es sich um eine gleiche/ähnliche Problemstelling.
https://stackoverflow.com/questions/...-oncolumnmoved
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#3

AW: Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 16:46
Der Grund liegt daran, dass ein DoubleClick beim MouseDown erfolgt. Der TitleClick aber beim MouseUp.

Und da erst MouseDown und dann MouseUp, erfolgt erst der Aufruf von DoubleClick, dann das Schließen des Fensters, und dann der MouseUp der dann von der Titel-Zeile behandelt wird.

Lösen kann man das durch einen Timer, der das Setzen von ModalResult entsprechend verzögert (100ms sind mehr als ausreichend und nicht spürbar).

Hier mal ein Ablauf der relevanten Events die bei einem DblClick passieren
  1. MouseDown
  2. OnIdle
  3. Click
  4. MouseUp
  5. OnIdle
  6. DblClick <= Schließen der Form
  7. MouseDown
  8. OnIdle
  9. MouseUp
  10. OnIdle

Geändert von Schokohase (11. Sep 2018 um 17:06 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
939 Beiträge
 
#4

AW: Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 17:22
Wäre das dann nicht schlauer man hätte den DblClick über MouseUp gesteuert?

Hat das einen tieferen Sinn, dass das so festgelegt ist?
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#5

AW: Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 17:49
Ja, es gibt einen Grund.

Du kannst mit einem Doppel-Klick in einem Text ein ganzes Wort markieren. Klickst du jetzt aber nur MouseDown/MouseUp/MouseDown dann ist das Wort markiert und du kannst noch weitere Wörter durch Bewegen der Maus selektieren bis zum MouseUp.

Nennt sich auch Double-Click-And-Drag

Geändert von Schokohase (11. Sep 2018 um 17:53 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
939 Beiträge
 
#6

AW: Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 17:52
Ah, ok. An sowas hab ich gar nicht gedacht.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Modaler Doppelklick gibt Event an Ursprungsfenster weiter

  Alt 11. Sep 2018, 18:54
Hallo,
das hatte ich beim TAdvStringGrid (TMS) auch.

Lösung:
Vor dem Erzeugen des modalen Fensters das eigene Fensters disablen

Self.Enabled:= False;
Dialog->ShowModal
Self.Enabled:= True;

Hatte zumindestens mir geholfen.
Heiko
  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 05:59 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