Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Shape OnClick Event? (https://www.delphipraxis.net/114574-shape-onclick-event.html)

ThYpHoOn 27. Mai 2008 16:32


Shape OnClick Event?
 
Guten Tag,

ich Programmiere derzeit im Rahmen des Schulunterrichts ein Billard-Spiel in Delphi. Der Tisch steht soweit und die Kugel kollidieren auch korrekt miteinander und mit der Wand.
Nun habe ich die Kugeln als ein Array genommen und per Shape erstellt. Wenn nun ein Foul auftreten würde und die Weiße Kugel bewegt werden müsste, muss man dies ja per OnClick auf den Shape der Weißen Kugel ( Kugeln[0].OnClick ?!) machen. Doch dies kann man ja logischerweise nicht per Prozedur machen, da es sich halt wie schon gesagt um ein Array handelt. Kennt ihr irgendeine bessere Lösung als die von meinem Lehrer:
OnClick-Event auf das komplette Formular, dann die Mouse-Position nehmen und dann schauen welche Shape-Position am nähsten von der Mouse-Position ist und diese dann übernehmen.


Gz ThY

rollstuhlfahrer 27. Mai 2008 16:39

Re: Shape OnClick Event?
 
HI ThYpHoOn,

1. würd ich deimen Lehrer nicht OnClick empfehlen, sondern OnMouseDown / OnMouseMove.
2.
Zitat:

Zitat von ThYpHoOn
Doch dies kann man ja logischerweise nicht per Prozedur machen, da es sich halt wie schon gesagt um ein Array handelt.

Natürlich kann man das machen. OnClick, OnMouseDown und OnMouseMove sind alles Ereignisse, die einen Sender beinhalten. Wenn du jetzt jeder Kugel die selbe Prozedur zuweist, dann kannst über Sender auswerten, von welcher das kommt. Du solltest den Kugeln dann halt noch ansprechende Namen geben, damit du einfacher herausfinden kannst, um wen es sich handelst oder Tag setzen.
3.
Zitat:

Zitat von ThYpHoOn
und dann schauen welche Shape-Position am nähsten von der Mouse-Position ist

Das kann unter umständen dazu führen, dass du 2 Kugeln als Ergebniss hast, also nicht immer zuverlässig ist.

rollstuhlfahrer

dominikkv 27. Mai 2008 16:42

Re: Shape OnClick Event?
 
Delphi-Quellcode:
type
  TFormX = class(TForm)
  private
    procedure MeineOnClickProcedure(Sender: TObject);
  end;

//

procedure TFormX.MeineOnClickProcedure(Sender: TObject);
begin
  showmessage('Ich wurde von ' + (Sender as TShape).name + ' aufgerufen!');
end;

// die Prozedur dem Event zuweisen:
Kugeln[0].OnClick := MeineOnClickProcedure;

// wenn du sie wieder entfernen willst
Kugeln[0].OnClick := nil;

Fussball-Robby 27. Mai 2008 16:44

Re: Shape OnClick Event?
 
TShape hat kein OnClick-Ereignis :wink:

dominikkv 27. Mai 2008 16:47

Re: Shape OnClick Event?
 
Zitat:

Zitat von Fussball-Robby
TShape hat kein OnClick-Ereignis :wink:

ohh... da sollte ich vielleicht doch davor nachschauen bevor ich was schreibe^^
Dann machs halt mit nem OnMouseUp (nachgeschaut, das gibts xD)

KahPee 17. Mai 2009 12:50

Re: Shape OnClick Event?
 
Hallo ich habe die gleiche Situation nur dass es sich bei mir um ein Bild handelt (Timage).

Allerdings kriege ich as nicht wie oben beschrieben hin...
Delphi-Quellcode:
type
  TForm1 = class(TForm)
   public
    { Private-Deklarationen }
    procedure OnImageClick(Sender: TObject);
  end;

//

procedure TForm1.OnClick(Sender: TObject);
begin
  showmessage('test');
end;

// die Prozedur dem Event zuweisen:
fields[1,1].pic.onclick := OnImageClick; //fields ist ein zweidimensionaler Array von einem record mit der Variable pic (Timage)
//hier die fehlermeldung dieser Zeile: Undefinierter Bezeichner: 'OnImageClick'


weis da jemand weiter?

rollstuhlfahrer 17. Mai 2009 17:52

Re: Shape OnClick Event?
 
Zitat:

// die Prozedur dem Event zuweisen:
fields[1,1].pic.onclick := OnImageClick; //fields ist ein zweidimensionaler Array von einem record mit der Variable pic (Timage)
//hier die fehlermeldung dieser Zeile: Undefinierter Bezeichner: 'OnImageClick'
Achtung: Du greift hier wohl von einem "normalen" Teil des Quelltextes auf einen Teil zu, der in einem Objekt liegt, heißt: Deine Prozedur, die da zuweisen will, findet die Prozedur OnImageClick nicht.

Dafür gibts 2 Lösungswege:
1) Du verschiebst den im Beitrag genannten Teil des Quelltextes in eine Prozedur von TForm1 -ODER-
2) (hierfür brauchst du ne Variable vom Typ TForm1) Du weist hier Form1.OnImageClick zu.

Bernhard

KahPee 18. Mai 2009 12:29

Re: Shape OnClick Event?
 
Vielen Dank das war es nicht ich habe den Fehler aber schon gefunde, hatte eine Prozedur an falscher Stelle deklariert trozdem vielen Dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 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