Announcement

Collapse
No announcement yet.

Tabulatorsprünge in ActiveX sind außer Betrieb

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

  • Tabulatorsprünge in ActiveX sind außer Betrieb

    Hallo.

    Ich habe unter Delphi7 eine neue TActiveForm angelegt und darin 3 TEdits und 2 TButtons plaziert, anschließend den ActiveXServer eintragen lassen und über "ActiveX importieren" das Teil installiert.
    Nun soll das ActiveX-Control in ein Standard-Formular einer Anwendung aufgenommen werden, was auch soweit ohne Probleme funktioniert. Allerdings kann ich jetzt innerhalb des ActiveX-Controls im neuen Formular zwar im Designermodus per Tabulatortaste immer ein Control weiterspringen, aber wenn die Applikation läuft, wird die TAB-Taste innerhalb des Controls ignoriert und der Focus wird auf das nächste Steuerelement plaziert, das nicht innerhalb des ActiveX-Controls liegt.
    Ich bin ziemlich verzweifelt, da ich auch nach längerer Suche keine Lösung gefunden habe. Ich bin für jeden Hinweis sehr dankbar.

    Viele Grüße

    Ralf

  • #2
    Hallo,

    Microsoft sagt dazu in der Platform SDK-Dokumentation folgendes: "<i>Accelerator keys, such as ARROW keys, are <b>first</b> received by the message pump of the ActiveX control's <b>container</b>. Even if the control has the focus, it does not receive messages for keystrokes that have special meaning to control containers, such as ARROW and TAB keys.</i>". Somit entspricht das geschilderte Verhalten dem Normalfall, weil ein TActiveForm in der Standardausführung nichts tut, um dieses Verhalten zu ändern.

    Was passiert, wenn das ActiveForm die geerbte Methode <b>WndProc</b> wie folgt überschreibt?
    <pre>
    TMyActiveX = class(TActiveForm, IMyActiveX)
    .....
    public
    procedure WndProc(var Message: TMessage); override;
    end;

    procedure TMyActiveX.WndProc(var Message: TMessage);
    var
    msg: TMsg;
    begin
    case Message.Msg of
    WM_GETDLGCODE: Message.Result := DLGC_WANTARROWS + DLGC_WANTTAB;
    WM_KEYDOWN: case Message.WParam of
    VK_LEFT,VK_RIGHT, VK_UP, VK_DOWN, VK_TAB: if (ActiveControl <> nil) then
    begin
    msg.hwnd := ActiveControl.Handle;
    msg.message := Message.Msg;
    msg.WParam := Message.WParam;
    msg.LParam := Message.LParam;
    msg.time := 0;
    msg.pt := point(0,0);
    DispatchMessage(msg);
    end;
    end;
    else
    inherited;
    end;

    end;
    </pre&gt

    Comment


    • #3
      Und wie geht das bei Objekte die nicht von ActiveForm sondern von TActiveXControl abgeleitet sind ? Da funktioniert das ganze auch nicht. Sogar die Events von TEdit werden nicht ausgeführt (OnEnter ...)

      und Tschoe
      Willi

      Comment


      • #4
        Hallo Herr Kosch.

        Genau das war des Rätsels Lösung. Vielen Dank

        Comment

        Working...
        X