AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Den Index zurückbekommen

Ein Thema von Magu_ · begonnen am 19. Okt 2006 · letzter Beitrag vom 19. Okt 2006
Antwort Antwort
Seite 1 von 2  1 2      
Magu_

Registriert seit: 19. Okt 2006
3 Beiträge
 
#1

Den Index zurückbekommen

  Alt 19. Okt 2006, 14:07
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_
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 14:09
Im Parameter Sender erhälst du eine Referenz auf den gedrückten Button. In diesem kannst du .Tag verwenden um den Index abzulegen.
Markus Kinzler
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#3

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 14:17
Hi und herzlich Willkommen in der 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 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 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 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!)
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#4

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 14:30
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
  Mit Zitat antworten Zitat
Magu_

Registriert seit: 19. Okt 2006
3 Beiträge
 
#5

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 16:19
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 16:27
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.
Markus Kinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 16:30
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.
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#8

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 16:38
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 16:52
 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;
Andreas
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: Den Index zurückbekommen

  Alt 19. Okt 2006, 17:07
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz