有关创建复合组件的两个问题(100分)

  • 主题发起人 主题发起人 young2002
  • 开始时间 开始时间
Y

young2002

Unregistered / Unconfirmed
GUEST, unregistred user!
问题1:创建复合组件时,如何将多个组件的事件统一为一个事件,例如:父类为TWincontrol,
width := 50;Height := 50;重载create方法:创建一个TPanel(50x50),在这个Panel上再
创建几个按钮。要求将各个按钮的Onclick事件统一为整个组件的OnOneButtonClick事件,
也就是按下任何按钮都将触发OnOneButtonClick事件
问题2:例如:父类为TWincontrol,width := 50;Height := 50;重载create方法:创建一个
TPanel(50x50)。定义两个事件:OnTopDown和OnBottomDown分别为鼠标点击Panel的上部和下部
时触发。
  以上两个问题怎么解决,望高手指点!
 
type
mycontrol= class(TWinControl)
private
FPanel: TPanel;
....
protected
procedure CheckPanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; x, y: Integer);
procedure Loaded; override;
public
constructor Create(AOwner: TComponent); override;
published
property OnOneButtonClick: TNotifyEvent read FOnOneButtonClick write FOnOneButtonClick;
property OnTopDown: TNotifyEvent read FOnTopDown write FOnTopDown;
property OnBottomDown: TNotifyEvent read FOnBottomDown write FOnBottomDown;
end;



constructor TMyControl.Create(AOwner: TComponent); override;
begin
inherited;
FPanel := TPanel.Create(Self);
FPanel.Parent := Self;
FPanel.OnMouseDown := CheckPanelMouseDown;
end;

procedure TMyControl.Loaded; override;
begin
inherited;
FPanel.Onclick := FOnOneButtonClick;
end;

procedure TMyControl.CheckPanelMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; x, y: Integer);
begin
if Assigned(FOnTopDown) and (位于panel上部) then
FOnTopDown(Self)
else if Assigned(FOnBottomDown) and (位于panel下部) then
FOnBottomDown(Self);
end;
 
楼上厉害
程序都写出来了
 
有点儿不对
 
问题自己解决了,散分
 
后退
顶部