| Autor |
Beitrag |
ultraz06
      
Beiträge: 84
|
Verfasst: Di 27.01.09 15:33
hi
ich habe folgendes problem, ich will wenn ich auf eine paintbox klicke immer das ein image verschwindet.
also es ist ein moorhuhn klon, also bei mausklick=schuss soll nach jedem schuss eine patrone in form eines images verschwinden
ich wollte es mit einer for schleife machen die vom begin des timers bis zu 0 diese aktion ausführt, aber ich weiß nicht wie ich es machen soll das immer eine andere patrone verschwindet beim mausklick
außerdem soll nach dem alle patronen nicht mehr sichtbar sind, auf die rechte maustaste nachladen gelegt werden, was wieder alle bilder darstellt.
ich habe bis jetzt folgendes:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.PaintBox1Click(Sender: TObject); var n:integer; timer:integer; image:integer; begin timer:=timer2.Interval; for n:=timer to 0 do begin case image of 0: image1.visible:=false; . . . |
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Di 27.01.09 15:43
Bei jedem Schuss den Counter hochzählen, und eine Prozedur erstellen, die jenachdem wie der counter steht die Bilder anzeigt.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 15:45
mhm versteh ich nicht so genau wie soll ich den counter hochzählen?
mit for schleife ?
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 15:47
Moin,
ich weiß nicht, ob du schon ein Spielklasse hast. Wenn nicht und du dir auch keine anlegen möchtest, dann würde ich das von Dude566 mal ausweiten:
Definiere eine neue Eigenschaft in deiner Form:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| TForm
private fKugeln:Integer; procedure SetKugeln(Value:Integer); public property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer); |
Damit kannst du die Kugeln besser steuern. Für MaxKugeln musst du natürlich noch einen Konstante bringen. In die SetKugeln:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure SetKugeln(Value:Integer); var i:Integer; begin fKugeln:=Value; For i:=0 to MaxKugeln do TImage(FindComponent('Image'+IntToStr(i))).Visible := (Value<=i); end; |
|
|
Dude566
      
Beiträge: 1592
Erhaltene Danke: 79
W8, W7 (Chrome, FF, IE)
Delphi XE2 Pro, Eclipse Juno, VS2012
|
Verfasst: Di 27.01.09 15:49
Du musst halt ständig Prüfen ob die Maus innerhalb deines Formbereiches geklickt wird, und wenn dies zutrifft muss dann halt z.b. Inc(counter) getätigt werden.
Kann aber auch sein das ich mich irre, bin mir da nicht sicher.
Denke es gibt noch bessere Lösungswege.
_________________ Es gibt 10 Gruppen von Menschen: diejenigen, die das Binärsystem verstehen, und die anderen.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 16:14
mhm das klingt sehr kompliziert mit
property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer); usw
geht das auch irgendwie alles einfacher ?
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 16:54
ultraz06 hat folgendes geschrieben : | mhm das klingt sehr kompliziert mit
property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer); usw
geht das auch irgendwie alles einfacher ? |
Naja, das ist der einfachste und übersichtlichste Weg. Dadurch machst du das ganze abpassbar. Wenn du also zu irgendeinem Zeitpunkt deinen Code zu den Kugeln ändern willst, dann ändert du im Endeffekt nur diese ein Prozedur.
Ich würde dir empfehlen, dich einfach mal zu dem Thema zu belesen. Vielleicht lassen sich deine Probleme damit schon lösen. Oder du stellst hier konkretere Fragen, dann kann man dir besser helfen  .
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 17:01
naja ich wollte es auf diesen weg machen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| begin anz:=7 ; for n:=0 to anz do begin begin case image of 0: begin image1.visible:=false; image2.visible:=true; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; 1: begin image2.visible:=false; image1.visible:=false; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; end; end; end; |
aber irgendwie geht das nicht :/
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 17:07
Sry, ich kann mir noch nicht einmal im Ansatz vorstellen, was dieser Code eigentlich zum Ziel hat. Das kann aber auch an der eigenwilligen Einrückung liegen.
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 17:07
ultraz06 hat folgendes geschrieben : | naja ich wollte es auf diesen weg machen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| begin anz:=7 ; for n:=0 to anz do begin begin case image of 0: begin image1.visible:=false; image2.visible:=true; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; 1: begin image2.visible:=false; image1.visible:=false; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; end; end; end; |
aber irgendwie geht das nicht :/ |
OK. Du setzt das alles einzeln. Das würde ich dir nicht vorschlagen. Deshalb: Ich hole jetzt mal ein bisschen aus. Ich versuche dir mal meinen Ansatz zu erklären.
Also:
Dieses Property ist eine Eigenschaft, wie z.B. Tag, die du dem Formular hinzufügtst. Wenn du nun die Kugeln ändern willst, dann änderst du einfach die Eigenschaft deiner Form. Allerdings brauchst du dafür eine procedure, die für dich das Stellen übernimmt. Das ist die SetKugeln-Procedure. Dort wird der aktuelle Kugelnwert gespeichert (fKugeln:=...). Als nächstes wird jedes Image durchgegangen (Das Findcomponent findet Komponenten mit dem Namen, da du die Images durchnummeriert hast, eigenet sich das am besten), und geschaut, ob die Nummer des Images gleich oder kleiner deiner Kugelanzahl ist. Ist das der Fall, dann darf das Image angezeigt werden, sonst nicht.
Dein einziger Code, den du in deinem Formular noch zu schreiben hättest, wäre: Kugeln:=Kugeln-1;. Damit würdest du die oben beschriebene Befehlskette auslösen.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 17:14
wenn ich nun meinen code behalten würde,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
| procedure TForm1.PaintBox1Click(Sender: TObject); var n:integer; timer:integer; image:integer; anz:integer; begin anz:=7 ; anz:=anz+1; for n:=0 to anz do begin begin case image of 0: begin image1.visible:=false; image2.visible:=true; image3.visible:=true; image4.visible:=true; image5.visible:=true;
end; 1: begin image2.visible:=false; image1.visible:=false; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; end; end; end; |
dann passiert trotzdem nix
an was könnte das liegen, vllt in der falschen procedure oder fehler im text ?
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 17:19
bei deinem code
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| procedure SetKugeln(Value:Integer); var i:Integer; begin fKugeln:=Value; For i:=0 to MaxKugeln do TImage(FindComponent('Image'+IntToStr(i))).Visible := (Value<=i); end;
TForm
private fKugeln:Integer; procedure SetKugeln(Value:Integer); public property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer); |
kommen fehlermeldungen das integer kein typenbezeichner sei usw
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 17:33
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 17:38
property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer);
kommt der fehler das set nicht geht später dann das
TImage(FindComponent('Image'+IntToStr(i))).Visible := (Value<=i);
findcomponent ungültige komponente ist
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 17:41
ultraz06 hat folgendes geschrieben : | property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer);
kommt der fehler das set nicht geht später dann das
TImage(FindComponent('Image'+IntToStr(i))).Visible := (Value<=i);
findcomponent ungültige komponente ist |
Ich habe das gerade mal in TDE 2006 ausprobiert und es geht. Zeig doch mal bitte den Quellcode.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 17:47
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
procedure SetKugeln(Value:Integer); var i:Integer; begin fKugeln:=Value; For i:=0 to MaxKugeln do TImage(FindComponent('Image'+IntToStr(i))).Visible := (Value<=i); end;
TForm
private fKugeln:Integer; procedure SetKugeln(Value:Integer); public property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer); |
mehr habe ich nicht zu dem thema
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 17:53
Ich glaube, du hast da was falsch verstanden  .
Dieser Code hier: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| TForm
private fKugeln:Integer; procedure SetKugeln(Value:Integer); public property Kugeln:Integer read fKugeln set SetKugeln(Value:Integer); |
Den musst du in die bestehende Form-Deklaration einfügen. Da steht doch am Anfang sowas wie Delphi-Quelltext
Und dort suchst du dir dann die einzelnen Punkte raus und ergänze das, was ich dir dazugeschrieben habe, ok?
Und die procedure fügst einfach vor dem lezten end. ein. Wenn du das gemacht hast, dann zeigst du mal itte nochmal den Quelltext.
Des Weiteren würde ich dir mal den Crashkurs Delphi von unserem hochgeschätzten, aber zur Zeit wenig anwesenden Chefentwickler empfehlen.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 17:57
alles klar^^
eine frage habe ich noch ich habe jetzt habe ich erstmal das mit den visiblen gemacht
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure tform1.munition; var n:integer; image:integer; anz:integer; begin anz:=5 ; anz:=anz+1; for n:=0 to anz do begin begin case n of 0: begin image1.visible:=false; image2.visible:=true; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; 1: begin image2.visible:=false; image1.visible:=false; image3.visible:=true; image4.visible:=true; image5.visible:=true; end; if image1.visible=false then 1; |
also ich möchte wenn die 0 erfüllt ist ,die 1 folgen lassen weil so macht er o und 1 gemeinsam
|
|
Regan
      
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 27.01.09 18:46
Erstell mal bitte dazu einen neuen Thread. Das hat mit diesem Thema nicht mehr etwas zu tun.
|
|