Hallo allerseits,
meine
DLL-Forms halten mich wiedermal beschaeftigt. Ich hab jetzt das Ganze so umgestellt, dass ich nur mehr ein
Handle eines Forms erwarte, und nicht ein TForm-Objekt (damit auch C++-DLLs verwendet werden koennen).
Nun habe ich aber das Problem, dass nicht alles angezeigt wird. Hier mal ein paar Codeschnippsel.
In der
DLL geschieht das:
Delphi-Quellcode:
function GetMainForm: HWND; stdcall;
begin
Result := TfrmDLL.Create(nil).Handle;
end;
Geladen wird so:
Delphi-Quellcode:
Module.DLLFormProc := GetProcAddress(Module.DLLHandle, PChar('GetMainForm'));
//...
Module.ModuleFormHandle := TGetDLLFrm(Module.DLLFormProc);
SetParent(Module.ModuleFormHandle, ModuleParentHandle);
WindowStyle := GetWindowLong(Module.ModuleFormHandle, GWL_STYLE);
WindowStyle := WindowStyle or WS_CHILD;
WindowStyle := WindowStyle and not WS_BORDER;
WindowStyle := WindowStyle and not WS_THICKFRAME;
WindowStyle := WindowStyle and not WS_CAPTION;
WindowStyle := WindowStyle or WS_MAXIMIZE;
WindowStyle := WindowStyle and not WS_SYSMENU;
SetWindowLong(Module.ModuleFormHandle, GWL_STYLE, WindowStyle);
SetWindowPos(Module.ModuleFormHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE or SWP_SHOWWINDOW);
ShowWindow(Module.ModuleFormHandle, SW_HIDE);
Anschliessend zeige ich irgendwo das Form an, und zwar mit
ShowWindow(TTBXItem(Sender).Tag, SW_SHOW);
Das
Handle des Forms wird ins Tag des TBX-Buttons geschrieben, welcher die Anzeige regelt. Das Problem ist hierbei nicht, dass das Form nicht angezeigt wird, sondern dass nicht alles angezeigt wird. Ich hab 3 Labels, 1 StaticText, ein Memo und eine TBXToolbar auf dem Form, aber ich sehe nur die 3 Labels. Muss ich noch irgendwelche Messages ans Form schicken, damit es sich neu zeichnet oder so? Waere nett wenn mir jemand weiterhelfen koennte.
Greetz
alcaeus