蓝
蓝叶菱
Unregistered / Unconfirmed
GUEST, unregistred user!
从TCustomControl继承下的控件,怎么开发才能让开发的控件在运行的时候,根本看不到或者透明?
帖子地址:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3422699
不明白看下面:
程序是按照另外一个窗口控件的位置来对主窗口的DXDRAW进行绘图,并且根据控件的位置,显示情况,循环判断执行事件。
如果本身控件就是一个一个SURFACE,就不需要了,拖曳控件就OK了。传奇为什么不这么写。
鹧鸪菜 15:25:58
传奇:比如一个小小的鼠标事件,传奇居然这样写,
function TDControl.MouseMove (Shift: TShiftState; X, Y: Integer): Boolean;
var
i: integer;
begin
Result := FALSE;
for i:=DControls.Count-1 downto 0 do
if TDControl(DControls).Visible then
if TDControl(DControls).MouseMove(Shift, X-Left, Y-Top) then begin
Result := TRUE;
exit;
end;
if (MouseCaptureControl <> nil) then begin //MouseCapture 捞搁 磊脚捞 快急
if (MouseCaptureControl = self) then begin
if Assigned (FOnMouseMove) then
FOnMouseMove (self, Shift, X, Y);
Result := TRUE;
end;
exit;
end;
if Background then exit;
if InRange (X, Y) then begin
if Assigned (FOnMouseMove) then
FOnMouseMove (self, Shift, X, Y);
Result := TRUE;
end;
end;
玉米 15:26:16
那他是怎么响应事件的?
鹧鸪菜 15:27:42
既然DELPHI不支持多重继承,那么只能自己开发SURFACE,把你的控件和SURFACE管理,不过和传奇的原理相同。
鹧鸪菜 15:29:46
事件的传递了,看上面,循环语句,和坐标来判断,通过循环一个一个的TDCONTROL,有多少传递多少了。
传奇又开发了一个TCONTROL管理控件。管理这些控件。
玉米 15:30:16
等于说后台用GDI,前台用DX
鹧鸪菜 15:32:04
主窗口就是一个DXDRAW,子窗体好多控件,
可是这些控件重来没有在主窗体出现过。可以看到子窗体就是SURFACE模板罢了,
鹧鸪菜 15:32:20
可是就是响应事件要循环,我感觉不好。
鹧鸪菜 15:32:49
你想把按钮直接放到DXDRAW上,点就响应事件改多好啊。
看样子不能。
帖子地址:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3422699
不明白看下面:
程序是按照另外一个窗口控件的位置来对主窗口的DXDRAW进行绘图,并且根据控件的位置,显示情况,循环判断执行事件。
如果本身控件就是一个一个SURFACE,就不需要了,拖曳控件就OK了。传奇为什么不这么写。
鹧鸪菜 15:25:58
传奇:比如一个小小的鼠标事件,传奇居然这样写,
function TDControl.MouseMove (Shift: TShiftState; X, Y: Integer): Boolean;
var
i: integer;
begin
Result := FALSE;
for i:=DControls.Count-1 downto 0 do
if TDControl(DControls).Visible then
if TDControl(DControls).MouseMove(Shift, X-Left, Y-Top) then begin
Result := TRUE;
exit;
end;
if (MouseCaptureControl <> nil) then begin //MouseCapture 捞搁 磊脚捞 快急
if (MouseCaptureControl = self) then begin
if Assigned (FOnMouseMove) then
FOnMouseMove (self, Shift, X, Y);
Result := TRUE;
end;
exit;
end;
if Background then exit;
if InRange (X, Y) then begin
if Assigned (FOnMouseMove) then
FOnMouseMove (self, Shift, X, Y);
Result := TRUE;
end;
end;
玉米 15:26:16
那他是怎么响应事件的?
鹧鸪菜 15:27:42
既然DELPHI不支持多重继承,那么只能自己开发SURFACE,把你的控件和SURFACE管理,不过和传奇的原理相同。
鹧鸪菜 15:29:46
事件的传递了,看上面,循环语句,和坐标来判断,通过循环一个一个的TDCONTROL,有多少传递多少了。
传奇又开发了一个TCONTROL管理控件。管理这些控件。
玉米 15:30:16
等于说后台用GDI,前台用DX
鹧鸪菜 15:32:04
主窗口就是一个DXDRAW,子窗体好多控件,
可是这些控件重来没有在主窗体出现过。可以看到子窗体就是SURFACE模板罢了,
鹧鸪菜 15:32:20
可是就是响应事件要循环,我感觉不好。
鹧鸪菜 15:32:49
你想把按钮直接放到DXDRAW上,点就响应事件改多好啊。
看样子不能。