Zitat von
Hallo_Thomas:
Geht das wirklich nicht eleganter?
Warum brauchst du das eleganter? Was verstehst du unter eleganter?
Es fallen einem leicht 5 und mehr Wege ein dieses Problem zu lösen, die Frage ist, wofür brauchst du das?
Ob eine Lösung elegant ist, ist von der Problemstellung abhängig (die wir noch nicht kennen). Vielleicht ist schon das array of array of TButton unelegant? Vielleicht musst du nur deine Buttons in der Form btn001x001 benennen? Vielleicht ist es sinnvoll einene eigne Button-Klasse mit X und Y Eigenschaft zu entwickeln? Oder es reich doch X und Y in der Tag Eigenschaft zu codieren.
Ausgehend von dem was ich bisher über das Problem weiß, würde ich zu Schleifen-Methode tendieren. Das Array of Array of TButton enthält bereits die benötigte Information, wozu also noch ein Tag in Abhängigkeit davon setzen. Da du hier von Button-Clicks sprichst sollte das ganze auch nicht zeitkritsch sein. Aber ob es elegant ist...?
Delphi-Quellcode:
function TForm1.TrySenderToXY(Sender: TObject; var X, Y: Integer): Boolean;
var
i, j: Integer;
btn: TButton;
begin
Result := False;
if not (Sender is TButton) then
Exit;
btn := TButton(Sender);
for i := Low(xyButtons) to High(xyButtons) do
for j := Low(xyButtons[i]) to High(xyButtons[i]) do
if xyButtons[i, j] = btn then
begin
X := i;
Y := j;
Result := True;
Break;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
var
x, y: Integer;
begin
if TrySenderToXY(Sender, X, Y) then
Caption := Format('Clicked at %d x %d', [x, y])
else
Caption := 'Unknown clicked';
end;