Autor Beitrag
ultraz06
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 27.01.09 19:54 
hi ich habe folgendes problem ich will dass wenn ich einen mausklick mache ein image verschwindet

ausblenden 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
      0begin  image1.visible:=false;
                image2.visible:=true;
                image3.visible:=true;
                image4.visible:=true;
                image5.visible:=true;
                end;
      1begin  image2.visible:=false;
                image1.visible:=false;
                image3.visible:=true;
                image4.visible:=true;
                image5.visible:=true;
                 end;
if image1.visible=false then 1// so soll das prinzip sein aber es geht nicht :(


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 user profile iconNarses: Topic aus Multimedia / Grafik verschoben am Di 27.01.2009 um 22:02
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: 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:

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 27.01.09 20:46 
ja und wie kann ich das verwirklichen?
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.01.09 20:53 
Schau Dir mal ein Set (=Menge) an. Da kannst Du Elemente einfügen und rauslöschen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 27.01.09 20:56 
user profile iconultraz06 hat folgendes geschrieben Zum zitierten Posting springen:
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...

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 27.01.09 20:57 
wenn ich das aufgreifen will
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Di 27.01.09 21:10 
user profile iconultraz06 hat folgendes geschrieben Zum zitierten Posting springen:
wenn ich das aufgreifen will
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
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
  ...

dann weiß ich nicht wie ich den quelltext gestalten soll


Überlegungen in Kommentaren

_________________
Delphi: XE - OS: Windows 7 Professional x64
ultraz06 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: 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 :D
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: Di 27.01.09 21:19 
if..then..else..

_________________
Delphi: XE - OS: Windows 7 Professional x64
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 27.01.09 21:24 
Wenn i dein Zähler ist:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: 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...
ausblenden 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?!?!?...
ausblenden Delphi-Quelltext
1:
2:
anz:=5   ;
anz:=anz+1;

und dann machst du bei JEDEM "Schuss"...
ausblenden Delphi-Quelltext
1:
2:
for n:=0 to anz do
begin

die Prüfung, ob n = 0, 1, ... ist...
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
   case n of
      0begin  image1.visible:=false;
                image2.visible:=true;
                image3.visible:=true;
                image4.visible:=true;
                image5.visible:=true;
                end;
      1begin  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:
ausblenden 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 27.01.09 21:33 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
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
BeitragVerfasst: Di 27.01.09 21:38 
user profile iconultraz06 hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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



BeitragVerfasst: Di 27.01.09 21:47 
Definiere anz als privates Feld der Klasse TForm1 und setz sie im OnCreate auf 5.
ultraz06 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 84



BeitragVerfasst: Di 27.01.09 21:49 
so wie kann die festlegeung der anzahl auf 5 in eine andere procedure legen das sie nicht ständig auf 5 gefixt wird?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 procedure tform1.munition;
var anz:integer;
begin
anz:=5   ;
anz:=anz-1;

Image1.Visible := anz >= 1;
Image2.Visible := anz >= 2;
Image3.Visible := anz >= 3;


Moderiert von user profile iconNarses: Delphi-Tag repariert
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.01.09 21:50 
Guck mal einen Post höher ;)
Horschdware
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 744
Erhaltene Danke: 54

Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
BeitragVerfasst: 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