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
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