문제

tgridpanel 내부의 컨트롤의 위치 (행 및 열 인덱스)를 어떻게 찾을 수 있습니까? 버튼 수에 대한 일반적인 OnClick 이벤트를 사용하고 버튼의 x, y 위치를 알아야합니다.

Delphi 2007을 사용하고 있습니다.

도움이 되었습니까?

해결책

불행히도, 때문입니다 Tgridpanel의 마법, 그것은 단지 상단과 왼쪽 속성을 얻는 것보다 조금 더 복잡합니다 ...

이것은 모든 제어를 위해 수행해야합니다. 귀하의 요구에 맞게 조정하십시오.

procedure GetRowColumn(const AControl: TControl; var ARow, AColumn: Integer);
var
  I: Integer;
begin
  if AControl.Parent is TGridPanel then
  begin
    I := TGridPanel(AControl.Parent).ControlCollection.IndexOf(AControl);
    if I > -1 then
    begin
      ARow := TGridPanel(AControl.Parent).ControlCollection[I].Row;
      AColumn := TGridPanel(AControl.Parent).ControlCollection[I].Column;
    end;
  end;
end;

procedure TForm1.ButtonClick(Sender: TObject);
var
  Row, Column : Integer;
begin
  GetRowColumn(Sender as TControl, Row, Column);
  // do something with Row and Column
  ShowMessage( Format('row=%d - col=%d',[Row, Column]));
end;

다른 팁

발신자 캐스트를 tbutton으로 사용한 다음 상단과 왼쪽을 요청할 수 있습니다.

Procedure TForm1.OnClick(Sender:tObject);
var
  X,Y : Integer;
begin
  if Sender is TButton then
    begin
      X := TButton(Sender).Top;
      Y := TButton(Sender).Left;
      // do something with X & Y
    end;
end;

또는 버튼을 누르는 버튼을 알고 싶다면 태그 속성을 사용하여 각 버튼에 숫자를 삽입 한 다음 OnClick 이벤트에서 태그 값을 검색 할 수도 있습니다. 먼저 태그 속성을 무언가로 설정하는 것을 기억하십시오. 단지 버튼을 그리드 패널에 또는 버튼을 만들고 삽입하는 데 사용하는 루틴에서 폼 디자이너로이를 수행 할 수 있습니다.

Procedure TForm1.OnClick(Sender:tObject);
var
  iButton : integer;
begin
  if Sender is TComponent then
    begin
      iButton := TComponent(Sender).Tag;
      // do something with iButton
    end;
end;

포인터는 현재 정수와 동일한 메모리 크기를 사용하여 정수에 포인터를 시전하고 해당 값을 태그 속성에 삽입 할 수 있기 때문에 태그 속성을 사용하여 정수 이상을 저장할 수도 있습니다. 이 분야에 배치 한 포인터는 여전히 정수로 취급됩니다. 당신은 그것이 가리키는 메모리에 대한 책임이 있으며, 구성 요소가 관리하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top