Мое приложение использует элемент управления TButtonGroup.Каждой кнопке назначаю свой обработчик события: doClick.Назначая информацию каждой кнопке (Pointer (i)
), я могу выяснить, какая кнопка была вызвана.Это код:
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, я получаю недопустимый тип в строке, помеченной '@@@'.Typecast является правильным, когда я использую TButtonGroup для btn, а также в typecast, но в этом нет свойства данных, и оно в любом случае было бы бесполезным.
В качестве теста я назначил OnClickобработчик событий для элемента управления TButtonGroup, и я заметил, что когда я нажимаю кнопку, сначала вызывается обработчик события кнопки, а затем TButtonGroup, содержащий кнопку, обработчик события.
Вопрос: есть ли способ узнатькакая кнопка TButtonGroup была нажата?
Использование Delphi XE в Windows 7/64