Announcement

Collapse
No announcement yet.

Das Fenster-Handle des OLE-Elements nicht verfügbar

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

  • Das Fenster-Handle des OLE-Elements nicht verfügbar

    Hallo,

    ich bekomme in meiner Delphi5-Anwendung, in der ich ein COM-Objekt auf einem Formular liegen habe (wird zur Laufzeit instanziiert) seid neuestem eine EOleError Fehlermeldung beim Anlegen/Setzen des Parents: "Das Fenster-Handle des OLE-Elements nicht verfügbar"

    <PRE>
    uses
    VDStdLib5_TLB; // TLB für das COM-Object

    function ErzeugeForm: TCADZuordnungsForm;
    begin
    Result := TCADZuordnungsForm.Create(Application.Mainform);
    with Result do
    begin
    try
    VDraw := TVDStd.Create(Result);
    <B>VDraw.Parent := Result; // -> FEHLER</B>
    VDraw.Align := alClient;
    </PRE>

    Mache ich eine zweite einfache Anwendung, lediglich aus einem Form bestehend und nutze den gleichen Code, so funktioniert es dort: Das COM-Objekt wird ordnungsgemäß auf dem Form angezeigt. Früher hat es auch in der eigentlichen Anwendung funktioniert. Ich wüßte nicht was sich geändert hat, da aber auch andere daran gearbeitet haben kann dies schon sein.

    Aufruf-Stack:

    TOleControl.HookControlWndProc <BR>
    TOleControl.CreateWnd <BR>
    TWInControl.CreateHandle <BR>
    TWInControl.UpdateShowing <BR>
    TWInControl.UpdateShowing <BR>
    TWInControl.UpdateCOntrolState <BR>
    TWInControl.InsertControl <BR>
    TControl.SetParent <BR>
    TOLECOntrol.SetParent <BR>
    ErzeugeForm <BR>
    <BR>
    <PRE>
    procedure TOleControl.HookControlWndProc;
    var
    WndHandle: HWnd;
    begin
    if (FOleInPlaceObject <> nil) and (WindowHandle = 0) then
    begin
    WndHandle := 0;
    FOleInPlaceObject.GetWindow(WndHandle);
    <B>if WndHandle = 0 then raise EOleError.CreateRes(@SNoWindowHandle); // -> FEHLER </B>
    WindowHandle := WndHandle;
    DefWndProc := Pointer(GetWindowLong(WindowHandle, GWL_WNDPROC));
    CreationControl := Self;
    SetWindowLong(WindowHandle, GWL_WNDPROC, Longint(@InitWndProc));
    SendMessage(WindowHandle, WM_NULL, 0, 0);
    end;
    end;
    </PRE>

    Weiß jemand Rat?

    Grüße,
    Patrick
Working...
X