| Autor |
Beitrag |
ultraz06
      
Beiträge: 84
|
Verfasst: Di 27.01.09 19:54
hi ich habe folgendes problem ich will dass wenn ich einen mausklick mache ein image verschwindet
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 soll nach jedem einzelnen mausklick ein image verschwinden nach dem jetzigen quelltext vrschwinden aber beide images 1&2
die munition procedure habe ich in eine timer routine gesetzt Moderiert von Narses: Topic aus Multimedia / Grafik verschoben am Di 27.01.2009 um 22:02
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 20:04
Wie ich bereits im anderen Thread gesagt hatte: ich verstehe Deinen Code überhaupt nicht. Wozu die Schleife? Wo steht das mit dem ButtonClick bzw. wieso nutzt Du nicht das entsprechende Event? Was meinst Du mit "beide" Images, ich seh 5 davon im Code?
|
|
Tachoron
Hält's aus hier
Beiträge: 5
|
Verfasst: Di 27.01.09 20:08
Ich glaube du solltest dich nocheinmal in den Grundlagen vertraut machen,
denn das was du so geschrieben hast wird nicht zum Ziel führen.
In deinem Fall durchläufst du nunmal in der Schleife alle case-Fälle und führst
dementsprechend den gesamten Code aus.
Da aber nur bei jedem Klick etwas passieren soll, darfst du auch nur einmal
wenn der Klick ausgelöst wird ein Bild verschwinden lassen. Dafür brauchst du keine Schleife sondern musst nur global speichern wieviele Bilder noch sichtbar sind.
Gruß
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 20:18
also es sind 5 patronen wie bei einem moorhuhnspiel
bei jedem mausklick soll eine patrone ,als image dargestellt, verschwinden.
mit der schleife wollte ich die image anzahl von 0 auf 5 zählen und bei jedem punkt der case of anweisung ein image verschwinden lassen
nun will ich die bedingugn einbauen das wenn imagex.visible=false erst dann der 2 punkt aus der case of anweisung setzen soll
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 27.01.09 20:36
Mein Tip wie immer:
schreibe erst einmal Pseudocode und werde dir darüber klar, was das Programm machen soll, bevor du anfängst Code zu schreiben. Dann Schaut das ungefähr so aus:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| Programmstart: zähler auf 5 setzen alle bilder anzeigen -----
Mausklick: ein bild verdecken zähler verringern ----
Unterproblem "bild verdecken": wenn zähler = 5 => bild 5 verdecken wenn zähler = 4 => bild 4 verdecken ... ----- |
Ich möchte mich übrigens meinen Vorrednern anschliessen, dass du dir dringend nochmals die Grundlagen ansehen solltest.
MfG
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 20:46
ja und wie kann ich das verwirklichen?
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 20:53
Schau Dir mal ein Set (=Menge) an. Da kannst Du Elemente einfügen und rauslöschen.
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.01.09 20:56
ultraz06 hat folgendes geschrieben : | | ja und wie kann ich das verwirklichen? |
Versuche es doch erst einmal. Wie soll man auf eine so allgemeine Frage sinnvoll antworten? Frage direkt. Zum Beispiel "Wie kann ich denn etwas direkt nach dem Programmstart ausführen?", die Antwort wäre "Das geht mit OnCreate, klicke einfach doppelt auf das Formular, dann bist du in dem Code für das Ereignis.".
Aber ohne konkrete Frage weiß ich nicht was ich überhaupt erklären muss...
DeddyH hat folgendes geschrieben : | | Schau Dir mal ein Set (=Menge) an. Da kannst Du Elemente einfügen und rauslöschen. |
Das könnte eher für noch mehr Verwirrung sorgen glaube ich.  Auch wenn es natürlich passend ist.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 20:57
wenn ich das aufgreifen will
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| Programmstart: zähler auf 5 setzen alle bilder anzeigen -----
Mausklick: ein bild verdecken zähler verringern ----
Unterproblem "bild verdecken": wenn zähler = 5 => bild 5 verdecken wenn zähler = 4 => bild 4 verdecken ... |
dann weiß ich nicht wie ich den quelltext gestalten soll
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 27.01.09 21:10
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 21:15
Programmstart: // wie komme ich in den Code-Abschnitt, der bei Programmstart aufgerufen wird?
zähler auf 5 setzen // wie realisiere ich einen zähler? welcher datentyp eignet sich? welche werte kann dieser zähler annehmen?
alle bilder anzeigen // wieviele bilder habe ich? wie zeige ich ein bild an?
-----
Mausklick: // wie komme ich in den Code-Abschnitt, der bei Mausklick aufgerufen wird?
ein bild verdecken
zähler verringern // wie verringere ich den Wert eines Zählers um 1?
----
Unterproblem "bild verdecken":
wenn zähler = 5 => bild 5 verdecken // wie prüfe ich, welchen wert mein zähler hat? wie verstecke ich ein bild?
wenn zähler = 4 => bild 4 verdecken
in programmstart mit form1.create
meine variable zb i:=5;
alle imeges auf visible true setzen;
maus klick in dem fall paintbox1.click
i:=i-1;
beim unterproblem bin ich überfragt 
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 27.01.09 21:19
if..then..else..
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
jaenicke
      
Beiträge: 19339
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 27.01.09 21:24
Wenn i dein Zähler ist: Delphi-Quelltext 1: 2: 3: 4:
| Image1.Visible := i >= 1; Image2.Visible := i >= 2; Image3.Visible := i >= 3; ... | So blendest du die Bilder ein, wenn der Zähler noch genauso groß oder größer als die Nummer des Bildes ist.
|
|
DaKirsche
      
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Di 27.01.09 21:29
Also was du jetzt gerade machst ist ja nun folgendes:
Du hast einen Timer, den du startest, wenn eine "Kugel abgefeuert" wurde, oder nicht?
In diesem Timer startest du die procedure TForm1.munition.....
D.h.:
Jedesmal, wenn du abfeuerst wird das ganze Magazin abgefeuert, weil du in der Prozedur munition folgende Schritte machst:
Du initialisierst deine Variablen...
Delphi-Quelltext 1: 2: 3:
| var n:integer; image:integer; anz:integer; |
...legst die Anzahl der Kugeln fest und erhöhst die nochmal um 1?!?!?...
Delphi-Quelltext
und dann machst du bei JEDEM "Schuss"...
Delphi-Quelltext 1: 2:
| for n:=0 to anz do begin |
die Prüfung, ob n = 0, 1, ... ist...
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| 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; |
und dann lässt du die Bilder verstecken....
In Worten macht dein Quellcode folgendes:
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Setze Anzahl auf 5; Erhöhe Anzahl um 1;
Für JEDEN Wert zwischen einschliesslich 0 und einschliesslich 6 als n prüfe nacheinander, ob n = 1 ist. wenn ja: verstecke Kugel 1 wenn nein: prüfe, ob n = 2 ist. wenn ja: verstecke Kugel 1 UND Kugel 2 [...] Wenn n bei 6 angekommen ist beende die Prozedur |
Was du machen solltest ist eher sowas:
In Worten macht dein Quellcode folgendes:
Quelltext 1: 2: 3: 4: 5: 6:
| Lese Anzahl ein (z.B. von einer globalen oder übergeordneten Variable o.ä.);
Wenn Anzahl kleiner oder gleich der Magazingröße ist verstecke die Kugeln, die verschossen sind (z.B. wie im Beitrag von jaenicke beschrieben)
Ansonsten zeige an, dass nachgeladen werden muss |
Erst wenn die Prozedur bei n = 6 angekommen ist wird dir das Ergebnis angezeigt...
Also nutzt du eine "Waffe", die pro Betätigung des Abzugs ein ganzes Magazin verschiesst....
Das wäre ja mal Munitionsverschwendung 
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 21:33
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure tform1.munition; var n:integer; image:integer; anz:integer; begin anz:=5 ; anz:=anz-1;
Image1.Visible := i >= 1; Image2.Visible := i >= 2; Image3.Visible := i >= 3; |
muss ich da noch ne schleife rein bauen die anz runterzählt?
|
|
DaKirsche
      
Beiträge: 187
Win XP Pro, SuSe Linux 7.3 - 10.2, Win 2k3 Server, Win 2000, Win NT 4.0
Delphi 2006 Pro, Java, HTML, SQL, PHP, CSS
|
Verfasst: Di 27.01.09 21:38
ultraz06 hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure tform1.munition; var n:integer; image:integer; anz:integer; begin anz:=5 ; anz:=anz-1;
Image1.Visible := i >= 1; Image2.Visible := i >= 2; Image3.Visible := i >= 3; |
muss ich da noch ne schleife rein bauen die anz runterzählt? |
Die markierten Zeilen gehören da nicht rein....
Du setzt jedes Mal, wenn die Prozedur aufgerufen wird...also bei jedem Schuss, die anzahl wieder auf 5 und ziehst dann einen ab....
Also wird anz immer 4 sein.
ausserdem solltest du statt i anz mit 1, 2 oder so vergleichen....i hast du doch garnicht in der Prozedur definiert...
//Edit: Die Variale anz musst du von woanders holen und in munition immer nur um 1 runterzählen.
bei einer Prozedur oder Funktion nachladen als Beispiel füllst du die Munition wieder auf und machst alle Munitionsbilder wieder sichtbar.
_________________ Die simpelsten Fehler sind meist die Schwersten...
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 21:47
Definiere anz als privates Feld der Klasse TForm1 und setz sie im OnCreate auf 5.
|
|
ultraz06 
      
Beiträge: 84
|
Verfasst: Di 27.01.09 21:49
|
|
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 27.01.09 21:50
Guck mal einen Post höher 
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 27.01.09 21:52
Wiederhole die Grundlagen:
www.amazon.de/Delphi...233085830&sr=8-1 Echt gutes Buch. Nicht nur für Kinder 
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|