Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.464 Beiträge
 
Delphi 12 Athens
 
#10

AW: Ansprechen von während Laufzeit erzeugter Komponenten

  Alt 8. Mär 2022, 09:51
- Label.ParentColor := False // = eigene Farbe verwenden
- Konstanten machen den Code verständlicher und wartbarer
- For-Schleifen sind für eine vorher bekannte Anzahl von Durchläufen besser geeignet
- Koordinaten werden normalerweise mit x, y, ... bezeichnet
- Variablen sollten nicht mit A.. beginnen, das ist eigentlich Parametern vorbehalten (ALabel)
Delphi-Quellcode:
{Konstanten die an mehreren Stellen berücksichtigt werden}
const
  xmin = 1;
  xmax = 9;
  ymin = 1;
  ymax = 9;

type
  TForm1 = class(TForm)
{...}
    procedure PanelClick(Sender: TObject);
  private
    FMyIntegerArr: array[xMin..xMax, yMin..yMax] of Integer;
    FMyLabelArr: array[xMin..xMax, yMin..yMax] of TLabel;
    procedure InitMyLabel;
    function GetMyLabelPos(ALabel: TLabel): TPoint;
  end;

implementation

procedure TForm1.InitMyLabel;
var
  x, y: Integer;
  L: TLabel;
begin
  for y := ymin to ymax do
  begin
    for x := xmin to xmax do
    begin
      L := TLabel.Create(Self);
      L.Left := left_M - 5 + (x - xmin) * sw;
      L.Top := top_m - 5 + (y - ymin) * sw;
      L.Width := sw - 12;
      L.Height := sw - 12;
      L.Name := 'Feld' + IntToStr(y) + IntToStr(x);
      L.Caption := L.Name;
      l.ParentColor := False;
      L.Color := clSilver;
      L.Transparent := False;
      L.Parent := GroupBox1;
      L.OnClick := PanelClick;
      FMyLabelArr[x, y] := L;
    end;
  end;
end;

function TForm1.GetMyLabelPos(ALabel: TLabel): TPoint;
var
  x, y: Integer;
begin
  for y := ymin to ymax do
  begin
    for x := xmin to xmax do
    begin
      if FMyLabelArr[x, y] = ALabel then
      begin
        Result := TPoint(x, y);
        Exit;
      end;
    end;
  end;
  {nicht gefunden}
  Result := TPoint(-1, -1);
end;

procedure TForm1.PanelClick(Sender: TObject);
var
  P: TPoint;
  i: Integer;
begin
  P := GetMyLabelPos(Sender as TLabel);
  i := FMyIntegerArr[P.x, P.y];
  {...}
end;
  Mit Zitat antworten Zitat