我的应用程序使用TButtonGroup控件。我为每个按钮分配一个事件处理程序:doClick。通过分配信息到每个按钮(Pointer (i)
),我可以找出哪个按钮被调用。这是代码:有没有办法找出TButtonGroup的哪个按钮被点击?
procedure TVector_Menu.Synchronize (rows, cols: Int32);
var btn: TGrpButtonItem;
i: Int32;
begin
ButtonGroup.Items.Clear;
Self.Rows := rows;
Self.Cols := cols;
for i := 0 to rows * cols - 1 do
begin
btn := Buttongroup.Items.Add;
btn.Data := Pointer (i);
btn.ImageIndex := i;
btn.OnClick := doClick;
end; // for
Self.ClientHeight := 4 + rows * ButtonGroup.ButtonHeight;
Self.ClientWidth := 22 + cols * ButtonGroup.ButtonWidth;
end; // Synchronize //
procedure TVector_Menu.doClick (Sender: TObject);
var btn: TGrpButtonItem;
i, r, c: Int32;
begin
btn := (Sender as TGrpButtonItem); // @@@ TButtonGroup
i := Int32 (btn.Data);
get_rc (i, r, c);
if Assigned (FOnClick)
then FOnClick (Sender, @FButton_Matrix [r, c]);
end; // doClick //
当doClick叫我在行标记为得到一个无效的类型转换“@@@”。当我为btn和类型转换使用TButtonGroup时,类型转换是正确的,但是这个类型不包含数据属性,并且不会有太大的用处。
作为测试,我为TButtonGroup控件分配了一个OnClick事件处理程序,并且我注意到当我单击一个按钮时,首先调用按钮事件处理程序,然后调用TButtonGroup,其中包含按钮,事件处理程序。
问题:有没有办法找出TButtonGroup的哪个按钮被点击?
在Windows 7/64
嗯,我看到我可能应该使用'ButtonGroupButtonClicked'。那个返回一个索引。开始尝试。 – Arnold 2012-03-18 20:02:04