Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Label


kevinsky1111 - Mo 29.06.09 06:25
Titel: Label
Ich muss für die schule ein spiel mit delphi programmieren und weiß nicht ob das was ich da geschrieben habe stimmt(bin ein Anfänger):

also die sachlage ist die, ich habe ein label das label hat die farbe cllimo wenn ich einen button (ist unwichtig) drücke dann erscheint eine zahl dadurch wird das label rot eingefärbt. Falls diese zahl nochmal vorkommt sollte mein label nicht noch mal rot werden sondern ich einem anderen label hineinschreiben "Sie haben verloren"

das ist der derzeitige code:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
begin
if label4.font.color=clred
then
if label4.font.color:=clred
then label24.caption:='Sie haben verloren!';
end;


nun stell ich mir die frage ob das richtig ist?

Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
Moderiert von user profile iconGausi: Topic aus Multimedia / Grafik verschoben am Mo 29.06.2009 um 07:39


alzaimar - Mo 29.06.09 06:51

Erstens klemmt deine Shift-Taste, zweitens kannst Du das doch probieren und drittens: Nein. Lies den Code mal vor, indem Du das auf Deutsch übersetzt.
"Wenn die Farbe vom Label rot ist, dann: Wenn die Farbe vom Label rot ist dann schreib in ein anderes Label 'Sie haben verloren'".

Quark? Quark!

Wenn der Button geklickt wird, schaust Du nach, ob die das Label schon rot ist. Wenn JA, gibst du aus 'Verloren', SONST färbst Du das Label rot.

Das Ganze nun zurück in Delphi übersetzen und: Fertig.


ffgorcky - Mo 29.06.09 08:52

Also möchtest Du ein Spiel schreiben, in dem Du zum Beispiel mit einem Würfel möglichst alle 6 unterschiedlichen Zahlen hintereinander würfelst?
Sprich: Du möchtest in etwa so was machen?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure wieAuchImmerSieHeisst();
var derzeitigesLabel:TLabel;
begin
zahl:=random(5)+1;
derzeitigesLabel:=FindComponent('Label'+IntToStr(zahl);
if derzeitigesLabel.Color:=clred then
    MessageBox(Handle,'Sie haben leider erneut dieselbe Zahl gewürfelt!'+#13#10+'Damit ist das Spiel vorbei!','Leider verloren!',MB_OK)
else
    derzeitigesLabel.Color:=clred;
end;


....oder habe ich Dein Problem gerade falsch verstanden?


kevinsky1111 - Mo 29.06.09 13:12

user profile iconalzaimar hat folgendes geschrieben Zum zitierten Posting springen:


Wenn der Button geklickt wird, schaust Du nach, ob die das Label schon rot ist. Wenn JA, gibst du aus 'Verloren', SONST färbst Du das Label rot.



ich habs geschafft aber da ist noch ein problem:

ich hab noch 8 dieser labels.
beim 1. funktionierts, doch beim 2. steht immer da 'Sie haben verloren'.
Wo steckt der Fehler?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
begin
     if label5.color=clred
     then label24.caption:='Sie haben verloren!'
     else
     begin
     if ergebnis=2
     then Label5.Color := clred;
     end;
   end;
   begin
     if label6.color=clred
     then label24.caption:='Sie haben verloren!'
     else
     begin
     if ergebnis=3
     then Label6.Color := clred;
     end;
   end;


Moderiert von user profile iconKha: Delphi-Tags hinzugefügt


jaenicke - Mo 29.06.09 13:19

user profile iconkevinsky1111 hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
begin
     if label5.color=clred
     then label24.caption:='Sie haben verloren!'
     else
     begin
     if ergebnis=2
     then Label5.Color := clred;
     end;
   end;
   begin
     if label6.color=clred
     then label24.caption:='Sie haben verloren!'
     else
     begin
     if ergebnis=3
     then Label6.Color := clred;
     end;
   end;
Wozu die begin..end Blöcke, wenn du gar keine if-Abfrage davor setzt und das immer ausführen lässt? :gruebel:

Zudem verstehe ich noch nicht ganz was das eigentlich werden soll? Mehrere Labels sollen parallel das selbe anzeigen oder wie?


kevinsky1111 - Mo 29.06.09 13:21

Weitere Frage:
Ich bin mir sicher das ich es so schreiben muss, doch was ist an diesen beiden zeilen falsch:

Delphi-Quelltext
1:
2:
     if label5.color=clred and ergebnis=2
     then label24.caption:='Sie haben verloren!'


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


jaenicke - Mo 29.06.09 13:23


Delphi-Quelltext
1:
2:
    if Label5.Color = clRed and (ergebnis = 2) then
      Label24.Caption := 'Sie haben verloren!';


kevinsky1111 - Mo 29.06.09 13:25

Nur zur Verständniss:
dieses Spiel sollte es werden:

http://upload.wikimedia.org/wikipedia/de/3/35/Shut_the_box.jpg

Moderiert von user profile iconChristian S.: Img- und Url-Tags umgewandelt ... bisschen groß sonst ;-)


kevinsky1111 - Mo 29.06.09 13:29

dann bekomm ich das:


Delphi-Quelltext
1:
2:
  if label5.color=clred and (ergebnis=2)
     then label24.caption:='Sie haben verloren!'




[Error] Unit1.pas(102): Operator not applicable to this operand type

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt


jaenicke - Mo 29.06.09 13:30

Ja, beim ersten Vergleich fehlt noch die Klammer, die hab ich beim Highlighten vergessen...

Nimm doch mal ein kleineres Bild, das zerlegt ja das ganze Layout...
(Außerdem reicht der Link zu Wikipedia, am Bild sieht man ja eh nicht wie das Spiel läuft.)


Georg08 - Mo 29.06.09 13:31

schreibst du etwa für jedes label eine eigene if-abfrage?
steck das ganze doch in eine allgemeinere variante ;-)


Tilo - Mo 29.06.09 13:34

user profile iconkevinsky1111 hat folgendes geschrieben Zum zitierten Posting springen:
dann bekomm ich das:

if label5.color=clred and (ergebnis=2)
then label24.caption:='Sie haben verloren!'



[Error] Unit1.pas(102): Operator not applicable to this operand type


kleiner Tipp: Nutze Formatierungstags (unter "Bereiche" über dem Editorfenster)

and ist höherwertig als "=" demnach müsste Du es so schreiben:

Delphi-Quelltext
1:
2:
  if (label5.color=clred) and (ergebnis=2)
     then label24.caption:='Sie haben verloren!'


so hat jaenicke es gemeint.
sehe das Christian S. schon die Tags eingefügt hat.


jaenicke - Mo 29.06.09 13:34

Ja, vor allem geht eine Prüfung auf ein bestimmtes Ergebnis ja sowieso nicht. Man kann ja ggf. aussuchen welche Klappen man schließt... ;-)


kevinsky1111 - Mo 29.06.09 13:37

dannnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnke Sebastian jänicke und alle die mir geholfen haben!

hast mir sehr geholfen