Das ist wahrscheinlich das altbekannte
VCL-Problem, wenn nicht alle
MDI-Childs vom selben Fenster abgeleitet sind. Leider habe ich momentan meine alten Quellcodes mit dem Fix nicht im Zugriff.
Delphi-Quellcode:
type
TFormMain = class(TForm)
...
private
procedure ClientWndProc(var Message: TMessage);
...
FClientInstance : TFarProc;
FPrevClientProc : TFarProc;
end;
procedure TFormMain.Create(Sender: TObject);
begin
FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle,GWL_WNDPROC));
SetWindowLong(ClientHandle, GWL_WNDPROC, LongInt(FClientInstance));
end;
procedure TFormMain.ClientWndProc(var Message: TMessage);
var
ActiveChild: TForm;
Size: Integer;
begin
with Message do
case Msg of
WM_MDISETMENU:
ActiveChild:= ActiveMDIChild;
if Assigned(ActiveChild) then
if (ActiveChild.WindowState = wsMaximized) then
begin
with ActiveChild do Size:= (ClientWidth) + (ClientHeight shl 16);
SendMessage(ActiveChild.Handle, WM_SIZE, SIZE_RESTORED, Size);
CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
SendMessage(ActiveChild.Handle, WM_SIZE, SIZE_MAXIMIZED, Size);
end else CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
else Result := CallWindowProc(FPrevClientProc, ClientHandle, Msg, wParam, lParam);
end;
end;
Wenn ich mich recht entsinne...also bitte unter Vorbehalt, so ähnlich hatte ich das damals gelöst. Wenn man nach "delphi WM_MDISETMENU
mdi" googelt, findet man sicher noch irgendwo den kompletten Hotfix. Falls nicht, dann könnte ich ja nochmal nach den "uralten" Quellcodes suchen. Dauert aber etwas, weil wie jedes Jahr vor Weihnachten die Hütte brennt
BTW mit XE war das Problem dann verschwunden, also warum auf 2007 hoch ziehen und nicht auf XE?