MDI-App. aktiv, mit Focus, OnTop

04/10/2011 - 14:50 von Wilfried Dietrich | Report spam
Ich möchte das meine MDI-App. (MDIForm + Child) aus sich
heraus, bei einem bestimmten Ereignis (zum Testen durch einen
Timer ausgelöst) in den Vordergrund kommt, aktiv wird und
den Focus erhàlt.
Ich habe schon vieles getestet, doch leider bekomme ich die
MDI-App. nicht aktiv bzw. den Focus nicht in das Childform,
wenn sich der Focus zuvor in einer anderen App. befindet.
Meine App. kommt in den Vordergrund, der Cursor blinkt in
dem richtigen Textfeld im Childform, die App. blinkt in der Taskleiste
und meine Eingaben gehen sonstwo hin.

Probiert habe ich:

Const SWP_NOSIZE = &H1
Const SWP_NOMOVE = &H2
Const SWP_SHOWWINDOW = &H40
Const HWND_TOPMOST = -1
Const HWND_NOTOPMOST = -2

Private Sub Timer1_Timer()
SetWindowPos MDIForm.hWnd, _
HWND_TOPMOST, 0, 0, 0, 0, _
SWP_NOMOVE Or SWP_NOSIZE Or SWP_SHOWWINDOW
DoEvents
'App. soll nicht im Vordergrund festgenagelt bleiben
SetWindowPos MDIForm.hWnd, _
HWND_NOTOPMOST, 0, 0, 0, 0, _
SWP_NOMOVE Or SWP_NOSIZE 'Or SWP_SHOWWINDOW

'Call ShowWindow(MDIForm.hWnd)
'Call SetForegroundWindow(MDIForm.hWnd)
'Call SetActiveWindow(MDIForm.hWnd)
ChildForm.Show
'Call SetActiveWindow(ChildForm.hWnd)
ChildForm.Textbox1.SetFocus
End Sub

Die auskommentierten Call... habe ich alle schon einzeln oder in
Kombination ausprobiert, ohne Erfolg.
Was mache ich falsch bzw. wie muss ich das richtig machen?

Gruß
Wilfried
 

Lesen sie die antworten

#1 W. Wolf
04/10/2011 - 15:22 | Warnen spam
Am 04.10.2011 14:50, schrieb Wilfried Dietrich:


Die auskommentierten Call... habe ich alle schon einzeln oder in
Kombination ausprobiert, ohne Erfolg.
Was mache ich falsch bzw. wie muss ich das richtig machen?




Ich trickse ein bisschen:

i = ShowWindow(lHwnd, SW_RESTORE)
SetWindowPos lHwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
SetWindowPos lHwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE

das gleiche wiederhole ich für das Child-Fenster und dessen hwnd gefolgt
von einem zorder für das Fenster und setfocus für die Textbox.

Gruß
W. Wolf

Ähnliche fragen