Ich habe mehrere von der Oberfläche her ähnlich aufgebaute Tools und verwende dort einen Frame.
Nun dachte ich mir: ich teste mal das Ribbon Control und platzierte dieses in den Frame.
Nun kommt es beim Starten des Programms zu einer Zugriffsverletzung in der
Unit Ribbon.pas:
Delphi-Quellcode:
procedure TCustomRibbon.SetParent(AParent: TWinControl);
begin
if not (csDesigning in ComponentState) then
begin
if (FParentForm <> nil) and Assigned(FParentWndProc) then
FParentForm.WindowProc := FParentWndProc;
end;
inherited;
// AParent ist in diesem Fall der Frame auf dem das Ribbon control platziert ist
if AParent <> nil then
begin
// hier ist das Problem: FParentForm ist nach dem Aufruf von GetParentForm = nil
FParentForm := GetParentForm(AParent);
if not (csDesigning in ComponentState) then
begin
if UseCustomFrame then
begin
// hier dann die Zugriffsverletzung
FParentWndProc := FParentForm.WindowProc;
FParentForm.WindowProc := CustomFrameWndProc;
FCustomFrameSupported := True;
end;
end;
if FParentForm is TForm then
FScaleFactor := TForm(FParentForm).PixelsPerInch / 96;
end;
end;
Ich habe noch keine weiteren Gruppen, Tabs oder sonstigen Controls auf dem Ribbon Control platziert.
Auch habe ich keinen ActionManager zugewiesen.
PS:
Ich nutze Delphi 2009.
Ich teste dies später mal mit Delphi 2010, das installiert derzeit noch.