Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Label-Feld prüfen
gfckiller - Sa 13.11.10 18:40
Titel: Label-Feld prüfen
Hallo alle miteinander,
ich bin neu im Forum und freu mich, dass ich gleich etwas gefunden habe.
Ich beschäftige mich seit einiger Zeit mit Delphi (das letzte mal Aktiv in der Schule) und wollte nun nach einiger Zeit mal wieder etwas ausprobieren. Leider schwieriger als ich gedacht habe, weshalb ich mich jetzt an euch wende. :)
Kurz warom es geht:
Ich habe ein Spiel bei dem der Gegner Einheiten hat und ich auf diese Einheiten mit verschienen Einheiten reagieren kann.
Beispielsweise hat der Gegner Soldaten also gibt es für mich die Möglichkeit, mit Soldaten, Panzern, ....ect. anzugreifen.
Nun das Problem...
Ich hab eine Checkbox Soldat. Wenn ich die Anklicke soll in eines der 24 Labelfelder als Reaktion stehen: Soldaten, im nächsten Panzer mit der Bedingung , und jetzt da seigentliche Problem, wenn im ersten Labelfeld schon etwas steht, soll er es prüfen und die nächste Einheit in das 2. Labelfeld schreiben, wenn dieses voll ist in das 3. usw...
Ich habe mal Bilder hochgeladen und den bisherigen Quellcode:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin if Checkbox1.State=cbChecked then if label3.Caption='' then label3.caption:='Panzer' else label4.caption:='Panzer'; if label4.Caption='' then label4.caption:='Panzer' else label5.caption:='Panzer'; if label5.Caption='' then label5.caption:='Panzer' else label6.caption:='Panzer'; if label6.Caption='' then label6.caption:='Panzer' else label7.caption:='Panzer'; if label7.Caption='' then label7.caption:='Panzer' else label8.caption:='Panzer'; if label8.Caption='' then label8.caption:='Panzer' else label9.caption:='Panzer'; if label9.Caption='' then label9.caption:='Panzer' else label10.caption:='Panzer'; if label10.Caption='' then label10.caption:='Panzer' else label11.caption:='Panzer'; end; |
Das doofe ist nur, er schreibt es in jedes Feld ...
Ich hoffe ihr könnt mir Tipps geben.
In Hoffnung
gfckiller
Moderiert von
Martok: Quote- durch Delphi-Tags ersetzt
glotzer - Sa 13.11.10 18:46
das erste was ich sehe ist das da ein begin...end fehlt
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.CheckBox1Click(Sender: TObject); begin if Checkbox1.State=cbChecked then begin if label3.Caption='' then label3.caption:='Panzer' else label4.caption:='Panzer'; if label4.Caption='' then label4.caption:='Panzer' else label5.caption:='Panzer'; if label5.Caption='' then label5.caption:='Panzer' else label6.caption:='Panzer'; if label6.Caption='' then label6.caption:='Panzer' else label7.caption:='Panzer'; if label7.Caption='' then label7.caption:='Panzer' else label8.caption:='Panzer'; if label8.Caption='' then label8.caption:='Panzer' else label9.caption:='Panzer'; if label9.Caption='' then label9.caption:='Panzer' else label10.caption:='Panzer'; if label10.Caption='' then label10.caption:='Panzer' else label11.caption:='Panzer'; end; end; |
bummi - Sa 13.11.10 18:47
die Zahlen bitte anpassen..
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm2.CheckBox1Click(Sender: TObject); var I: Integer; l:TLabel; begin if Checkbox1.Checked then for I := 1 to 6 do begin l := TLabel(FindComponent('Label' + IntToStr(i))); if Assigned(l) and (l.Caption = '') then begin l.Caption := 'Panzer'; break; end; end; end; |
gfckiller - Sa 13.11.10 18:55
Wow, danke. Es klappt. Vielleicht noch ganz kurz die Frage, wenn gegen den Soldaten jetzt nichtnur Panzer kämpfen können, sondern noch....weiß nicht, 3 andere Einheiten, wie lass ich die in den entsprechneden Label-Feldern darstellen?:(
Trotzdem ein riesen Dank an dich.
bummi - Sa 13.11.10 19:02
Ich fürchte ich haben noch nicht verstanden was Du vorhast :?:
gfckiller - Sa 13.11.10 19:14
Kein Problem. :)
Hier einmal ein konkretes Beispiel:
Wenn ich jetzt Soldat anklicke, soll im 1. Label stehen: Panzer, im 2. Mine im 3. Panzerfaust...
Wenn ich jetzt Panzer anklicke(siehe Bild) dann soll im 1. Label stehen: Panzer, im 2. Panzerfaust im 3. Antipanzermine...
ABER wenn ich jetzt zuerst Soldat anklicke, und die ersten 3 Labelfelder dadurch belegt sind, und ich nun Panzer anklicke müssten die nächsten 3 Sachen ja dann in Label4 Label5 und Label6 stehen..andersherum natürlich genaus, wenn ich zuerst mit Panzer anfange sollten die Soldatensachen bei Label4 5 und 6 weitergehen. Ich weiß hohe Ansprüche..aber ich wollt es echt mal versuchen :(
Hab mir zum schluss dann auch gedacht (in meinem Fall kommt ja die Panzerfaust 2x vor) dass doppelte Sachen dann wegfallen und bloß einmal erwähnt sein brauchen. Aber das denke ich, ist dann doch zu viel verlangt...
Ich hoffe cih konnte es ein bisschen besser erklären.
Mit freundlichen Grüßen
Patrick
bummi - Sa 13.11.10 19:27
ich habe es immer noch nicht ganz "gefressen" und Bild finde ich keines, aber kann es sein daß Du Dir mit einer Listbox und dem Einfügen/Anhängen von Texten leichter tätest?
gfckiller - Sa 13.11.10 19:54
Hm wo du das so sagst, befürchte ich auch, dass es (mir) aufjedenfall einfacher fallen würde..
Ich werd es gleich mal probieren , in der Hoffnung, dass es klappt. :)
Danke trotzdem für die Hilfe.
Einen schönen Abend wünsch ich noch.
Gerd Kayser - Sa 13.11.10 20:06
Warum so umständlich mit zig Labeln? Verwende
ein Label. Beispiel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TMainform.Button1Click(Sender: TObject); begin Label1.Caption := 'Panzer' + #13 + 'Mine' + #13 + 'Soldat'; if Pos(Label1.Caption, 'Panzerfaust') = 0 then Label1.Caption := Label1.Caption + #13 +'Panzerfaust'; end; |
Martok - Sa 13.11.10 20:28
Visuelle Komponenten sind nicht für die Datenhaltung, nur für die Darstellung gedacht!
Gerd Kayser - Sa 13.11.10 20:31
Martok hat folgendes geschrieben : |
| Visuelle Komponenten sind nicht für die Datenhaltung, nur für die Darstellung gedacht! |
Wenn ich die Ausgangsfragestellung richtig interpretiere, dann geht es um die Darstellung, nicht um Datenhaltung. Schließlich sollen in dem Spiel Informationen angezeigt werden.
bummi - Sa 13.11.10 21:42
@Gerd Kayser
jep, aber Du parst die Darstellung....
Gerd Kayser - Sa 13.11.10 21:45
bummi hat folgendes geschrieben : |
| jep, aber Du parst die Darstellung.... |
Warum kompliziert, wenn es auch einfacher geht? ;-)
bummi - Sa 13.11.10 21:53
eben... :D
Gerd Kayser - Sa 13.11.10 22:21
bummi hat folgendes geschrieben : |
| eben... :D |
Na, wenn es so stört, hier eine andere Lösung:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TMainform.Button5Click(Sender: TObject); var Text : string; Schleife : integer; begin Text := ''; for Schleife := 0 to ComponentCount - 1 do if (Components[Schleife] is TCheckBox) then if (TCheckBox(Components[Schleife]).Checked) then Text := Text + TCheckBox(Components[Schleife]).Caption + #13; if (Text <> '') then if (AnsiLastChar(Text) = #13) then Delete(Text, Length(Text), 1); Label1.Caption := Text; end; |
Edit1: Die letzte if-Abfrage geändert. Damit kommt die Prozedur auch mit 0 angekreuzten CheckBoxen klar.
gfckiller - So 14.11.10 01:51
Gerd Kayser hat folgendes geschrieben : |
Warum so umständlich mit zig Labeln? Verwende ein Label. Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TMainform.Button1Click(Sender: TObject); begin Label1.Caption := 'Panzer' + #13 + 'Mine' + #13 + 'Soldat'; if Pos(Label1.Caption, 'Panzerfaust') = 0 then Label1.Caption := Label1.Caption + #13 +'Panzerfaust'; end; | |
Hallo nocheinmal,
hab das eben erst gelesen und wollte es mal ausprobieren, muss dann aber doch nochmal fragen.:/
Wenn ich das so einfüge, war mir klar, dass es nicht funktionieren kann , aber was muss ich gleich nochmal ändern, damit es funzt...
Fehler wäre:
[Error] Unit1.pas(57): ';' expected but '.' found
[Error] Unit1.pas(59): Undeclared identifier: 'Label1'
[Error] Unit1.pas(60): Incompatible types
[Error] Unit1.pas(60): Type of expression must be BOOLEAN
[Error] Unit1.pas(71): ';' expected but '.' found
[Error] Unit1.pas(73): Declaration expected but end of file found
[Error] Unit1.pas(40): Unsatisfied forward or external declaration: 'TForm1.CheckBox1Click'
[Error] Unit1.pas(41): Unsatisfied forward or external declaration: 'TForm1.Button1Click'
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
P.s. Japs, es geht mir um die Darstellung nicht um die Haltung der Daten :)
Gruß
---------------
Ah schon gut, ich hab es.
jaenicke - So 14.11.10 07:28
gfckiller hat folgendes geschrieben : |
| P.s. Japs, es geht mir um die Darstellung nicht um die Haltung der Daten :) |
Du packst aber die Daten nicht nur zur Darstellung in die Labels, sondern du liest die auch wieder dort aus.
Und damit benutzt du die visuellen Komponenten als Datenspeicher. Damit machst du dir das Leben nur unnötig schwer...
Wenn du den aktuellen Status unabhängig von den Labels speichern würdest, könntest du ihn dort auch direkt auslesen.
gfckiller - Mo 15.11.10 12:15
Ah, so hab ich das nicht gesehen.
Danke für den Vermerk.
Gruß
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!