实际上我使用的是ImageEN TRulerBox和TAdvOfficePager(TMS)而不是TPageControl;但是,除了属性名称之外,TAdvOfficePager的功能与TPageControl的功能相同。
在运行时将两个ImageEN TRulerBox和一个TImageENView添加到TAdvOfficePage。标尺方向由TRulerBox的RulerDir属性设置。可以使用FindComponent查找HorzontalRulerBox和VerticalRulerBox吗?
控件是在运行时创建的,如下所示:
procedure TFormMain.AddPage;
var
AdvOfficePage: TAdvOfficePage;
PixelPanel: TPanel;
begin
AdvOfficePage := TAdvOfficePage.Create( Self );
AdvOfficePage.Parent := AdvOfficePager1;
AdvOfficePager1.AddAdvPage( AdvOfficePage );
AdvOfficePage.AdvOfficePager := AdvOfficePager1;
AdvOfficePage.Caption := 'ImageEnView ' + IntToStr( AdvOfficePager1.AdvPageCount );
AdvOfficePage.TabHint := 'ImageEnView ' + IntToStr( AdvOfficePager1.AdvPageCount );
TopPanel := TPanel.Create( Self );
TopPanel.Parent := AdvOfficePage;
TopPanel.Height := 34;
TopPanel.Align := alTop;
TopPanel.Color := $00fcebdc;
TopPanel.BorderStyle := bsNone;
TopPanel.BevelOuter := bvNone;
PixelPanel := TPanel.Create( TopPanel );
PixelPanel.Parent := TopPanel;
PixelPanel.Height := 40;
PixelPanel.Width := 34;
PixelPanel.Caption := 'Pix';
PixelPanel.Align := alLeft;
PixelPanel.Color := $00fdf3eb;
PixelPanel.ParentBackground := False;
PixelPanel.BorderStyle := bsNone;
PixelPanel.BevelOuter := bvNone;
HorzontalRulerBox := TRulerBox.Create( TopPanel );
HorzontalRulerBox.Name := 'HorzontalRulerBox' + IntToStr( AdvOfficePager1.AdvPageCount );
HorzontalRulerBox.Parent := TopPanel;
HorzontalRulerBox.Align := alClient;
HorzontalRulerBox.BackGround := $00fdf3eb;
HorzontalRulerBox.RulerColor := $00fdf3eb;
HorzontalRulerBox.GripBaseDim := 1;
HorzontalRulerBox.RulerDir := rdHorizontal;
LeftPanel := TPanel.Create( Self );
LeftPanel.Parent := AdvOfficePage;
LeftPanel.Width := 30;
LeftPanel.Align := alLeft;
LeftPanel.Color := $00fdf3eb;
LeftPanel.BorderStyle := bsNone;
LeftPanel.BevelOuter := bvNone;
VerticalRulerBox := TRulerBox.Create( LeftPanel );
VerticalRulerBox.Name := 'VerticalRulerBox' + IntToStr( AdvOfficePager1.AdvPageCount );
VerticalRulerBox.Parent := LeftPanel;
VerticalRulerBox.Align := alClient;
VerticalRulerBox.BackGround := $00fdf3eb;
VerticalRulerBox.GripBaseDim := 1;
VerticalRulerBox.RulerDir := rdVertical;
VerticalRulerBox.BackGround := $00fdf3eb;
VerticalRulerBox.RulerColor := $00fdf3eb;
ImageENView := TImageEnView.Create( Self );
ImageENView.Parent := AdvOfficePage;
ImageENView.Left := 0;
ImageENView.Top := 0;
ImageENView.Align := alClient;
ImageENView.Center := True;
ImageENView.Visible := True;
ImageENView.BorderStyle := bsNone;
ImageENView.MouseInteract := [ miSelect ];
AdvOfficePager1.ActivePage := AdvOfficePage;
end;
如果无法使用FindComponent,如何在运行时获取两个标尺中的每个标尺的句柄?我希望我已正确地提出这个问题,所提供的信息很清楚。
我尝试了这个,但它返回nil:
function TFormMain.GetHorzontalRuler: TRulerBox;
// find horzontal TRulerBox component on a TPanel on a TAdvOfficePage
var
rb: TRulerBox;
begin
rb := AdvOfficePager1.ActivePage.FindComponent( 'HorzontalRulerBox' + IntToStr( AdvOfficePager1.ActivePageIndex ) )
as TRulerBox;
if Assigned( rb ) then
Result := rb
else
Result := nil;
end;
新: - 这有效
function TFormMain.GetHorzRuler: TRulerBox;
var
tp: TPanel;
rb: TRulerBox;
begin
Result := nil;
tp := FindComponent( 'TopPanel' + IntToStr( AdvOfficePager1.ActivePageIndex + 1 ) ) as TPanel;
if Assigned( tp ) then
begin
rb := TRulerBox( tp.FindComponent( 'HorzontalRulerBox' + IntToStr( AdvOfficePager1.ActivePageIndex + 1 ) ) );
if Assigned( rb ) then
Result := rb;
end
else
Result := nil;
end;
function TFormMain.GetVertRuler: TRulerBox;
var
tp: TPanel;
rb: TRulerBox;
begin
Result := nil;
tp := FindComponent( 'LeftPanel' + IntToStr( AdvOfficePager1.ActivePageIndex + 1 ) ) as TPanel;
if Assigned( tp ) then
begin
rb := TRulerBox( tp.FindComponent( 'VerticalRulerBox' + IntToStr( AdvOfficePager1.ActivePageIndex + 1 ) ) );
if Assigned( rb ) then
Result := rb;
end
else
Result := nil;
end;
全部谢谢
答案 0 :(得分:2)
您让TopPanel
成为HorzontalRulerBox
的所有者(顺便说一下,它是HorIzontal :)),因此您需要使用FindComponent
进行搜索,但您必须首先搜索{ {1}} TFormMain
,并在代码中为TopPanel
添加一个名称。
TopPanel
答案 1 :(得分:1)
所有者组件必须使用<{1}} 功能。
所有者可能与父母不同,所以要小心。
在您的示例中,所有者组件可能是表单,也可能是OfficePager
尝试用自己替换FindComponent
(以引用表单)或AdvOfficePager1.ActivePage
- 我不使用这些组件,所以我不确定。