Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Den Index zurückbekommen (https://www.delphipraxis.net/79273-den-index-zurueckbekommen.html)

Magu_ 19. Okt 2006 13:07


Den Index zurückbekommen
 
OK Edit:

Ich benutze ein ein paar selbsgenerierte Buttons. Es handelt sich hierbei um ein Zweidimensionales Array.

Delphi-Quellcode:
procedure erzeugen;
begin
 for i:= 1 to 9 do
  for j:= 1 to 9 do
   begin
    Buttons[i,j]:=TButton.Create(Form1);
    Buttons[i,j].Parent:=Form1;
    Buttons[i,j].OnClick:=Form1.Button1.OnClick;
    Buttons[i,j].Caption:='X';
    Buttons[i,j].Left:=10+i*40;
    Buttons[i,J].Top:=10+j*40;
    Buttons[i,j].Width:=20;
    Buttons[i,j].height:=20;
   end;
Erst mal's Danke für die Info's.

Das mit dem Sender brachte ich ihrgendwie nur bei eindimensionalen Array's zustande. Kann ich die ihrgendwie verknüpfen so nach dem Motto "(x,y):=" ?

Und dass von Maja hab ich leider auch nicht so ganz verstanden.

Mein Problem ist nun, wie kann ich rausfinden welcher Button gedrückt wurde? Oder mit anderen Worten gibt es einen Befehl um an die zwei Indexzahlen ranzukommen?

Wäre super wenn ihr mir helfen könntet.

merci

Magu_

mkinzler 19. Okt 2006 13:09

Re: Den Index zurückbekommen
 
Im Parameter Sender erhälst du eine Referenz auf den gedrückten Button. In diesem kannst du .Tag verwenden um den Index abzulegen.

Der_Unwissende 19. Okt 2006 13:17

Re: Den Index zurückbekommen
 
Hi und herzlich Willkommen in der DP :dp:

Leider ist es in der DP nicht all zu weit mit dem Hellsehen her (glaube da vermisst jmd. seine Glaskugel), aber auch Teesatzlesen u.A. klappt nur bedingt gut. Deshalb ist es immer schön, wenn die Leute die Hilfe wollen möglichst selbstständig auf die Idee kommen, zu sagen was genau ihr Problem ist.

Zitat:

Zitat von Magu_
Ich benutze ein ein paar selbsgenerierte Buttons. Es handelt sich hierbei um ein Zweidimensionales Array.

Was genau meinst du damit? Du generierst Buttons, sind das TButton Nachfahren (oder TCustomButton) oder was genau? Was heißt in dem Kontext zweidimensionales Array?

Zitat:

Zitat von Magu_
Die OnClick Geschichte hab ich durch einen unsichtbaren Button gelöst, der Alle Info's für die Arraybuttons hat.

Welche OnClick Geschichte meinst du? Was sind Alle Info's für die Arraybuttons?

Zitat:

Zitat von Magu_
Mein Problem ist nun, wie kann ich rausfinden welcher Button gedrückt wurde? Oder mit anderen Worten gibt es einen Befehl um an die zwei Indexzahlen ranzukommen?

Klar, es gibt den fertigen Befehl gib_mir_zu_meiner_eigenen_unbekannten_Implementier ung_den_von_mir_jetzt_benötigten_Wert, der ist aber noch nicht in Delphi 6.0 implementiert, glaube dauert noch ein Weilchen bis der so richtig stabil läuft. Bis dahin musst man noch wissen, wie was eingefügt wurde.

Gruß Der Unwissende (nicht falsch verstehen, wollte hier nur deutlich zeigen, dass du echt wenig Infos rausgibst. Mehr Informationen sind immer gut!)

Maja Jessica 19. Okt 2006 13:30

Re: Den Index zurückbekommen
 
Hallo

Eventuell hilft dir dieses ein wenig weiter!?

Delphi-Quellcode:
Procedure ButtonWerBistDu(Sender: TObject);
begin
  if sender is TButton Then ShowMessage(TButton(sender).Caption);
end;
MJ

Magu_ 19. Okt 2006 15:19

Re: Den Index zurückbekommen
 
Tja Danke erstmalls.

Ich verstehe das letzte Post nicht wirklich. Inwiefern nützt mir diese Procedure etwas, da ja eh überall das gleiche in den Proceduren steht? Ich meine bei den Click's der einzelnen Buttons.

Könnt ihr mir hier mir noch etwas unter die Arme greifen und mich auf das Offensichtliche hinweissen. Danke

mkinzler 19. Okt 2006 15:27

Re: Den Index zurückbekommen
 
Hast du für jeden Button eine eigene Methode? Dann würde ich dein Problem nicht verstehen.
Wenn du die selbe nimmst, was besser wäre, dann erhltst du wie erwähnt im Parameter Sender eine Referenz (Zeiger) auf den Button.

Muetze1 19. Okt 2006 15:30

Re: Den Index zurückbekommen
 
Zitat:

Zitat von Magu_
Ich verstehe das letzte Post nicht wirklich. Inwiefern nützt mir diese Procedure etwas, da ja eh überall das gleiche in den Proceduren steht? Ich meine bei den Click's der einzelnen Buttons.

Wenn überall das gleiche drinne steht, dann weise allen auch nur eine OnClick Procedure zu. Mit dem Parameter Sender bekommst den Button übergeben, welcher gedrückt wurde. D.h. du kannst Sender nutzen wenn du an genau dem Button der gedrück wurde was machen willst. Ansonsten kannst du dessen Position in dem 2-Dim-Array auch leicht heraus finden, in dem du das Array durchläufst und einfach schaust, welcher Array Eintrag dem Sender entspricht.

Maja Jessica 19. Okt 2006 15:38

Re: Den Index zurückbekommen
 
Hi,

du könntest bei der Erstellung der Buttons jedem Button, wie schon vorgeschlagen wurde, über eine Laufvariable eine Identnummer
in .TAG mitgeben.

Delphi-Quellcode:
...
var x : Integer;
  x := 0;
...  
begin
    inc(x);
    Buttons[i,j]:=TButton.Create(Form1);
    Buttons[i,j].Parent:=Form1;
    Buttons[i,j].Tag:=x;
...


Procedure ButtonWerBistDu(Sender: TObject);
begin
  if sender is TButton Then ShowMessage('Ich bin Button '+IntToStr(TButton(sender).Tag));
end;
MJ

shmia 19. Okt 2006 15:52

Re: Den Index zurückbekommen
 
Delphi-Quellcode:
 Buttons[i,j].Tag:=i + (j shl 8);
Delphi-Quellcode:
Procedure ButtonWerBistDu(Sender: TObject);
var
   x, y : integer;
begin
   if sender is TComponent Then
   begin
      x := TComponent(sender).Tag and 255;
      y := TComponent(sender).Tag shr 8;
      ShowMessageFmt('Ich bin Button x=%d, y=%d', [x,y]);
   end;
end;

marabu 19. Okt 2006 16:07

Re: Den Index zurückbekommen
 
Hallo,

du hast den Index für jede Dimension (i und j) bereits an den Button geknüpft:

Delphi-Quellcode:
const
  LEFT_MARGIN = 10;
  HORZ_DISTANCE = 40;
  TOP_MARGIN = 10;
  VERT_DISTANCE = 40;

function TMainForm.CreateButton(iCol, iRow: Integer): TButton;
begin
  Result := TButton.Create(self);
  with Result do
  begin
    // ...
    Left := LEFT_MARGIN + iCol * HORZ_DISTANCE;
    Top := TOP_MARGIN + iRow * VERT_DISTANCE;
  end;
end;
Du kannst im Ereignis-Code für OnClick() des Buttons jederzeit wieder auf Zeilen- und Spaltenindex zurückgreifen:

Delphi-Quellcode:
procedure TMainForm.ButtonClick(Sender: TButton);
var
  iCol, iRow: Integer;
begin
  with Sender as TButton do
  begin
    iCol := (Left - LEFT_MARGIN) div HORZ_DISTANCE;
    iRow := (TOP - TOP_MARGIN) div VERT_DISTANCE;
  end;
end;
Freundliche Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:50 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz