事件关联问题 在线等候(50分)

  • 主题发起人 riversoft
  • 开始时间
R

riversoft

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
btnChild: TBitBtn;
procedure btnChildClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btnChildClick(Sender: TObject);
begin
showmessage('OnClick');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
btnChild.Parent:=stringgrid1;
end;
end.

如果加btnChild.Parent:=stringgrid1;
无法相应btnChild.OnClick事件
 
当然无法相应。
你想干嘛。
 
这样可以:
procedure MyOnclick(Sender:TObject);
begin
........
end;
btnChild.Onclick:=MyOnclick;

保证你OK!
 
to:yfdciom
我已经指定了btnChild.Onclick:=MyOnclick,如果把
btnChild.Parent=self就可以响应,
但是把btnChild.parent=stringgird1死都不行,我不是新手。
 
奇怪就是奇怪,如果把TStringGrid改为TPanel就不会出现什么问题,
是不是TStringGrid不是容器类的问题啊
 
不是你说的原因,你把bitbtn 放到stringgrid上,你得指定放到哪个单元格。
 
我试了很多种TWinControl继承的控间,
除了TStringGrid与TDrawGird不行其他都可以,
到底是?,找不到答案
 
请教:yfdciom,
那怎么才可以把BitBtn放到单元格里面.
 
把你的代码贴出来。
 
to:riversoft
用动态生成的办法,
我曾经把speedbutton搞到listbox里去了,
一样可以显示出来。
 
我已经把代码贴出来了,在上面啊!
 
我是这样把一个panel 加到单元格中的,你把panel改成bitbtn就行了。

procedure TForm1.Button1Click(Sender: TObject);
var
p:TPanel;
r:TRect;
begin
p:= TPanel.Create(StringGrid1);
p.Parent:=StringGrid1;
r:=StringGrid1.CellRect(1,1); //其中的行,列你可自己指定
p.Left:=r.Left+2;
p.Top:=r.Top+2;
p.Width:=r.Right-r.Left;
p.Height:=r.Bottom-r.Top;
p.Color:=ClRed;
end;
 
to:yfdciom,
其实我是可以加进去的,只是加完没办法指向响应的事件过程而已,
你还不明白我的意思吗。
 
等一下,我正在研究
 
to:yfdciom
研究有结果吗
QQ:30019412 上讨论吧
 
我也碰到过类似问题,把按钮放进frame里面显示frame的ComponentCount=1;
如果放到panel里面显示panel的ComponentCount=0;
 
riversoft:I am sorry ;

我到VCL源代码里转了一圈,StringGrid 不能做为TWinControl 的Parent;
如果你想实现把按钮放在StringGrid上,只好采取其他办法。我得代码如下:
你新建一个工程:放置Button1,StrinGrid1;
uses
windows,SysUtils, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Grids, Classes;

type

TForm1 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure qazClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
var
p: TBitBtn;
procedure TForm1.Button1Click(Sender: TObject);
var
r:TRect;
begin
p:= TBitBtn.Create(self);
p.Name:='qaz';
p.Parent:=self;
r:=StringGrid1.CellRect(1,1);
p.Left:=r.Left+6;
p.Top:=r.Top+10;
p.Width:=r.Right-r.Left;
p.Height:=r.Bottom-r.Top;
p.Font.Color:=ClRed;
p.OnClick:=qazClick;
end;

procedure TForm1.qazClick(Sender: TObject);
begin
showmessage('we can make friends');
end;
希望和我联系:swarmmail@163.net
 
建议你用Speedbutton!
 
在我上面的代码中,把TBitBtn 换成TSpeedButton,你的问题就能解决。
 
老弟,给分结束问题吧。
 
顶部