我的應用程序使用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