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.
Gute Lösung zumal ein aktiviertes Parent Fenster bei einem Modal angezeigten Fenster quatsch ist.
In dem Fall braucht man kein Modales Fenster wenn das Parent bedient werden kann.
Denn das ist der einzige sinn und zweck eines Modalen Fensters.
PS: [OT]
Nebenbei ein Modales Fenster ist unter Delphi ein Nonsens denn es erschließt sich mir nicht welchen sinn es bezwecken soll.
Da liegt wohl ein Design technisches Problem vor.
Ein Modales Fenster unter VB6 erstellt hat folgende Eigenschaften.
ZOrder = -1 (HWND_TOPMOST)
Parent Fenster Disabled
Delphi.
ZOrder = 0 (HWND_TOP)
Parent Fenster Enabled.
Welcher sinn und zweck steckt also dahinter dann kann ich direkt ein normales Fenster erstellen mit anschließenden SetWindowPos um die Zorder festzulegen.
Irgendwie quatsch das Modale Fenster unter Delphi!
Das hier ist schon ein Widerspruch!
Zitat:
ShowModal erlaubt es dem Anwender, nur das neue Fenster zu verwenden und blockiert alle Eingaben in andere Fenster. Erst, wenn dieses Fenster geschlossen wird, werden alle anderen wieder freigegeben. Man kennt das z.B. vom Infofenster der meisten Anwendungen.
Diese Verhalten kann ich unter Delphi nicht bestätigen (Ohne das Parent selbst zu deaktivieren) unter VB6 hingegen schon!
Es ist etwas anderes wenn man sich der Rückgabe Parameter einer Modalen Form bedienen möchte um in der Hauptform auf ein Ereignis zu warten.
bsp.
if Form.ShowModal = mrCancel then
Ansonsten sehe ich da keine Sinnvolle Verwendung für.
[/OT]
War Blödsinn habe mich über ein altes Problem ausgelassen was scheinbar gefixt wurde.
Dein Problem ist also das der Wert der Eigenschaft ModalResult zurückgegeben wird.. weil dein Parent Fenster aktiv ist.
Und zwar an die Funktion aus der du das Modale Fenster erstellst.
Erstelle ein normales Fenster wenn du ModalResult nicht auswerten willst und gut ist.
Ein .Show mit angehängter SetWindowPos wäre dann die bessere alternative.
gruss