Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi alternative zu 225 onclick-ereignissen ? (https://www.delphipraxis.net/33605-alternative-zu-225-onclick-ereignissen.html)

alcaeus 9. Nov 2004 22:26

Re: alternative zu 225 onclick-ereignissen ?
 
Hi dEluXe,

dazu gibts den FindComponent-Befehl:
[dp]"FindComponent"[/dp]
Delphi-Referenz durchsuchenFindComponent

Greetz
alcaeus

himitsu 9. Nov 2004 22:36

Re: alternative zu 225 onclick-ereignissen ?
 
oder mal ganz radikal ^^


nimm nur ein Image und in onMouseDown bekommst du die Klickposition.

wie man in ein Image reinmalt, wirst du ja wissen und die Feldnummern (X:Y) bekommst du so raus
Delphi-Quellcode:
PosX := X div Feldbreite;
PosY := Y div Feldhoehe;

SirThornberry 10. Nov 2004 06:32

Re: alternative zu 225 onclick-ereignissen ?
 
ich finde das mit einem image auch die einfachste variante. - Und du musst auch nicht 225 mal das OnClick schreiben wenn du ein array nutzt. Hier mal bissl source falls du es doch mit mehreren Images machen willst
Delphi-Quellcode:
  TForm1 = class(TForm)
  [...]
    fImages: Array[1..225] of TImage;
    procedure FImgClick(Sender: TObject);
  [...]

[...]
procedure TForm1.OnCreateProc(Sender: TObject);
var LCount, LX, LY, LWidth: Integer;
begin
  LWidth := 20;
  LX := 0;
  LY := 0;
  for LCount := 1 to 225 do
  begin
    fImages[LCount] := TImage.Create(Self);
    fImages[LCount].Parent := Self;
    fImages.SetBounds(LX, LY, LWidth, LWidth);
    fImages.Tag := LCount; //um später herauszufinden welches geklickt wurde
    fImages.OnClick := FImgClick;
    inc(LX, LWidth);
    if LX = 15 * LWidth then
    begin
      LX := 0;
      inc(LY, LWidth);
    end;
  end;
end;
[...]
procedure TForm1.FImgClick(Sender: TObject);
var LImage: TImage;
begin
  if Sender is TImage then
  begin
    LImage := TImage(Sender);
    //mit LImage.Tag findest du jetzt raus welches Image geklickt wurde
  end;
end;
[...]
procedure TForm1.OnDestroyProc(Sender: TObject);
var LCount: Integer;
begin
  //freigeben der Images
  for LCount := 1 to 225 do
    fImages[LCount].Free;
end;

himitsu 10. Nov 2004 06:46

Re: alternative zu 225 onclick-ereignissen ?
 
Natürlich könnte man auch
Delphi-Quellcode:
fImages: Array[1..15] of Array[1..15] of TImage;
verwenden :roll:

Luckie 10. Nov 2004 13:38

Re: alternative zu 225 onclick-ereignissen ?
 
Kuck dir mal mein Vire Gewinnt an: http://www.luckie-online.de/Delphi/Programme/ So sollte man das eigentlich sauber lösen und nicht mit 225 Images. :roll:

dEluXe 10. Nov 2004 18:58

Re: alternative zu 225 onclick-ereignissen ?
 
HiHo,

So hab jetzt längere Zeit mal rumexperimentiert und hab das Problem letztendlich dadurch gelöst, dass ich die Images dynamisch erstellt habe und dann beim onclick-Ereignis das Tag auslese, um den Namen zu bestimmen.

Also ertsmal funktioniert es,
werde es jetzt jedoch noch mal mit einem Image (Koordinaten berechnen) versuchen zu lösen.

Vielen Dank für eure schnelle und zahlreiche Hilfe

dEluXe

karisma 10. Nov 2004 19:06

Re: alternative zu 225 onclick-ereignissen ?
 
Zitat:

Natürlich könnte man auch
Quellcode: markieren
fImages: Array[1..15] of Array[1..15] of TImage;

verwenden
Einfacher sollte fImages: Array[1..15, 1..15] of TImage sein.
Wobei ich vllt. eine andere Variante bevorzugen würde. Mach doch einfach ein array[1..15, 1..15] of integer; (z.b. 0 nix, 1 -> spieler1, 2 -> spieler2) und benutzt canvas zum zeichnen.... Dann wartest du auf einen Click in das Canvas, wertest die Postion aus und setzt das entsprechende feld auf den Wert und lässt dann ein Rechteck an die entsprechenden Koordinaten zeichnen... :)

MFG... vllt hab ich noch ein Beispiel prog dazu da, wenn du das brauchst sag bescheid :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 Uhr.
Seite 2 von 2     12   

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