Ich benutze Delphi7. Ein MainMenu hab ich im Projekt nicht. Der Fehler tritt auch auf wenn ich ein leeres Projekt nur mit meiner Komponente habe.
Ich hab jetzt rausgefunden welche Methode sich immer wieder selbst aufruft:
Delphi-Quellcode:
procedure TWinControl.WMSysCommand(var Message: TWMSysCommand);
var
Form: TCustomForm;
function TraverseControls(Container: TWinControl): Boolean;
var
I: Integer;
Control: TControl;
begin
Result := False;
if Container.Showing then
for I := 0 to Container.ControlCount - 1 do
begin
Control := Container.Controls[I];
if Control.Visible and Control.Enabled then
begin
if (csMenuEvents in Control.ControlStyle) and
(Control.Perform(WM_SYSCOMMAND, TMessage(Message).WParam,
TMessage(Message).LParam) <> 0) or (Control is TWinControl) and
TraverseControls(TWinControl(Control)) then
begin
Result := True;
Exit;
end;
end;
end;
end;
begin
with Message do
begin
if (CmdType and $FFF0 = SC_KEYMENU) and (Key <> VK_SPACE) and
(Key <> Word('-')) and not IsIconic(FHandle) and (GetCapture = 0) and
(Application.MainForm <> Self) then
begin
Form := GetParentForm(Self);
{y} if (Form <> nil) and (Form.Perform(CM_APPSYSCOMMAND, 0, Longint(@Message)) <> 0) then
Exit;
end;
{ Broadcast WMSysCommand to all controls which have a csMenuEvents style. }
{x} if (CmdType and $FFF0 = SC_KEYMENU) and TraverseControls(Self) then
Exit;
end;
inherited;
end;
Es wechselt immer wieder zwischen Zeile {x} und {y} hin und her bis zum Stacküberlauf.
P.S. Stackcall???