내 응용 프로그램은 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의 어떤 버튼을 클릭했는지 확인할 수있는 방법이 있습니까? Sender
사실 TButtonGroup
에 있고 TGrpButtonItem
이 아니기 때문에
아, 아마도 'ButtonGroupButtonClicked'를 사용해야했을 것입니다. 그것은 색인을 반환합니다. 시도를 시작하십시오. – Arnold