tgridpanel 내부의 제어 위치를 찾습니다
-
05-07-2019 - |
문제
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;
포인터는 현재 정수와 동일한 메모리 크기를 사용하여 정수에 포인터를 시전하고 해당 값을 태그 속성에 삽입 할 수 있기 때문에 태그 속성을 사용하여 정수 이상을 저장할 수도 있습니다. 이 분야에 배치 한 포인터는 여전히 정수로 취급됩니다. 당신은 그것이 가리키는 메모리에 대한 책임이 있으며, 구성 요소가 관리하지 않습니다.
제휴하지 않습니다 StackOverflow