Announcement

Collapse
No announcement yet.

MDI-Child verliert Fokus

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MDI-Child verliert Fokus

    Hallo zusammen, <br>
    ich bastle an einem Programm mit einem MDI-Main und mehreren MDI-Childs herum. Auf dem MDI-Main-Formular habe ich eine Systemzeit-Anzeige, welche mit einem Timer und dem Aufruf "Time" realisiert wurde. Die Zeit ist ein einem Panel eines Statusbars dargestellt. Wenn ich nun ein Child-Formular offen habe, dann verliert dieses, immer wenn die Zeit aktuallisiert wird, den Fokus. D.h., wenn ich auf dem Child-Formular aus einer Combobox was auswählen möchte, verschwindet die Drop-Down-Liste. <br>
    Andererseits reagiert das MDI-Main-Formular nicht auf Tastatureingaben (OnKeyDown), wie z.B. NumLock, Insert oder CapsLock. <br> Wo könnte das Problem liegen? <br>
    Vielen Dank für eure Hilfe.<br>Gruss Beat

  • #2
    Setze mal die StatusBar.Enabled := False;

    Gruß Hage

    Comment


    • #3
      Hallo Hagen <br>
      hab ich gemacht, ändert sich jedoch nichts.<br>
      Gruss Bea

      Comment


      • #4
        Hallo Beat,

        hab' eben basierend auf dem Template von Delphi 6 ein MDI-Testprogramm mit einem Timer und einer darauf basierenden Zeitanzeite in der Statuszeile zusammengeklickt, und das verhält sich genauso wie man es erwartet.

        Ich denke, das von Dir geschilderte Verhalten wird irgendwo in Deinem Code verursacht...

        Gruß, Werne

        Comment


        • #5
          Hallo Werner, <br> du hattest recht, das mit dem Timer lag an meinem Code. <br> Jedoch die Sache mit dem OnKeyDown-Event liegt doch daran, dass das MDI-Hauptfenster keinen Fokus hat, wenn ein Child-Fenster geöffnet ist. D.h., es kann auch nicht auf die OnKey-Events reagieren. Kennst du da eine Möglichkeit, diese Events trotzdem nutzen zu können.<br> Gruss Bea

          Comment


          • #6
            Hallo Beat,

            dieses Problem scheint tiefer zu liegen, denn das MDI-Mainform reagiert auch nicht auf die Tastatur zu reagieren, wenn kein Child-Form geöffnet ist (das KeyPreview Property ist selbstverständlich gesetzt). Das Hauptformular fängt alle Tastatur-Ereignisse ab und reicht sie offenbar nicht in der erwarteten Art und Weise weiter. Daher muss man sich in die MessageLoop des Hauptfensters reinhängen - für konkretere Hinweise bin ich aber zu wenig Windows-Guru.

            Gruß, Werne

            Comment


            • #7
              Hallo Beat,

              eine andere Lösung ist mir eben eingefallen. Wenn Du Delphi5 oder neuer hast, setze eine ApplicationEvents-Komponente auf das MainForm und implementiere einen Eventhandler für OnMessage - dadurch werden alle Windowsnachrichten über den neuen Eventhandler geleitet, bevor sie im MDI-Mainform verschwinden. Leider wird das aktuelle Ereignis nur als unverständlicher Msg-Record übergeben, aber wenn Du die Recordelemente z.B. in der Statuszeile ausgibst, siehst Du gleich, was abläuft.

              Der folgende Code beispielsweise schaltet beim Umschalten der Num-Lock-Taste die Anzeige "NUM" in der Statuszeile ein und aus:
              <PRE>
              procedure TMainForm.ApplicationEvents1Message(var Msg: tagMSG;
              var Handled: Boolean);
              begin
              if (Msg.Message=256) and (Msg.LParam=$1450001) then
              if odd(GetKeyState(VK_NUMLOCK)) then Statusbar.Panels[1].Text := 'NUM'
              else Statusbar.Panels[1].Text := '';
              end;
              </PRE>

              Gruß, Werne

              Comment

              Working...
              X