Frage

Wie kann ich die Position (Zeilen- und Spaltenindex) von Kontrollen innerhalb TGridPanel herausfinden kann? Ich möchte für die Anzahl der Tasten gemeinsam OnClick Ereignis verwenden und müssen die X kennen, Y-Position der Taste.

Ich bin mit Delphi 2007.

War es hilfreich?

Lösung

Leider wegen die Magie der TGridPanel , ist es ein wenig komplizierter als nur die Top bekommen und Linke Eigenschaften ...

Dies sollte es für jede Kontrolle tun, passen sie an Ihre Bedürfnisse:

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;

Andere Tipps

Sie können Sender Guss als TButton verwenden und stellen sie dann für seine oben und links zum Beispiel:

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;

Oder wenn Ihr nur wollen wissen, welche Taste gedrückt wurde, können Sie auch die TAG-Eigenschaft verwenden, eine Zahl in jeder Taste zum Einfügen und anschließend den Tag-Wert in Ihrem Onclick-Ereignis abrufen. Denken Sie daran, zuerst die Tag-Eigenschaft auf etwas festgelegt. Sie können im Formular-Designer dies tun, wenn Ihr nur Tasten in die Gitterplatte oder in der Routine fallen Ihr mit Ihren Schaltflächen erstellen und einfügen.

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;

Sie können auch die Tag-Eigenschaft verwenden, um mehr zu speichern als nur eine ganze Zahl ist, da zur Zeit ein Zeiger die gleiche Speichergröße als integer verwendet man einen Zeiger auf eine ganze Zahl werfen kann und diesen Wert in die Tag-Eigenschaft einfügen. Seien Sie sich bewusst sein, dass jeder Zeiger in diesem Feld legen nach wie vor als eine ganze Zahl behandelt wird. Sie sind für den Speicher verantwortlich verweist er auf, wird es nicht von der Komponente verwaltet werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top