Autor |
Beitrag |
marcelrusi
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 09.06.11 14:26
Hallo Leute,
Ich habe folgendes Problem:
Ich möchte bei Delphi ein Programm erstellen, bei dem man aus einer Combobox ( geht das ?? ) einen Begriff auswählt und eine Zahl angegeben bekommt.
Beispiel: Wenn ich 'Stein' auswähle kommt in ein Label die Zahl 1.
Kann mir bitte jemand erklären wie das geht ??
Moderiert von Martok: Topic aus Sonstiges (Delphi) verschoben am Do 09.06.2011 um 14:51
Zuletzt bearbeitet von marcelrusi am Do 09.06.11 15:57, insgesamt 2-mal bearbeitet
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 09.06.11 14:34
Hey,
mach dir ein Array mit den Zahlen die du ausgeben willst. In die ComboBox schreibst du in die "Items"-Eigenschaft die Wörter (in der gleichen Reihenfolge wie dazugehörigen Zahlen im Array. Dann brauchst du noch ein Label auf dem du die Zaheln ausgibst. Dann machst du einen DFoppelklick auf deine ComboBox, um so die OnChange-Methode zu erstellen, die wird aufgerufen, sobald due den Wert der Box änderst. In dieser Methode kannst du mit ComboBox.ItemIndex auf den Index des selektierten Items zugreifen. Mit diesem Index holst du deine Zahl aus dem Array und gibst sie auf dem Label aus.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
Für diesen Beitrag haben gedankt: marcelrusi
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Do 09.06.11 14:45
wozu noch extra ein Array ? in der ComboBox ist ja ne stringlist .... da kannste doch mit String und Object arbeiten?
Beim Reinfügen z.B.
String mit zugehöriger Zahl eintragen
Delphi-Quelltext 1:
| ComboBox.Items.AddObject('EinString', TObject(1)); |
auslesen (aktuelle pos)
Delphi-Quelltext 1: 2:
| EinString := ComboBox.Items.Strings[ComboBox.ItemIndex]; Zahl := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]); |
String zur Zahl geben
Delphi-Quelltext 1:
| EinString := ComboBox.Items.Strings[ComboBox.Items.IndexOfObject(TObject(1))]; |
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Für diesen Beitrag haben gedankt: marcelrusi
|
|
marcelrusi 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 09.06.11 14:56
Also mein Quelltext sieht bis jetzt so aus :
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.ComboBox1Change(Sender: TObject); begin ComboBox1.Items.AddObject ('Stein', TObject(1)); ComboBox1.Items.AddObject ('Gras', TObject(2)); ComboBox1.Items.AddObject ('Erde', TObject(3)); ComboBox1.Items.AddObject ('Cobblestone', TObject(4)); ComboBox1.Items.AddObject ('Holz', TObject(5)); ComboBox1.Items.AddObject ('Baum', TObject(6)); |
ist wahrscheinlich nicht richtig, damit die Begriffe 'Stein' etc. in der Combobox erscheinen....
wie funktioniert das richtig ?
sorry für mein Unverständniss, aber ich arbeite erst seit kurzen mit Delphi 
|
|
mvollmer
      
Beiträge: 42
Erhaltene Danke: 3
Delphi (Seattle), C (MPLAB X)
|
Verfasst: Do 09.06.11 15:03
So wie du es jetzt machst, werden beim ändern des ComboBox Items diese 6 Items hinzugefügt.
Nimm Sie dort raus und schreib sie in den FormCreate Methode.
Im OnChange Ereignis sollte nur das ändern des Labels drinstehen.
btw: sieht stark nach Minecraft aus^^
Für diesen Beitrag haben gedankt: marcelrusi
|
|
marcelrusi 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 09.06.11 15:12
Ah ok und wo schreibe ich das :
1:EinString := ComboBox.Items.Strings[ComboBox.ItemIndex];
2:Zahl := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);
und das :
1:EinString := ComboBox.Items.Strings[ComboBox.Items.IndexOfObject(TObject(1))];
rein ?
Mit Minecraft hast du recht 
|
|
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Do 09.06.11 15:50
wie wärs damit?
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Items.Add('Stein'); ComboBox1.Items.Add('Gras'); ComboBox1.Items.Add('Erde'); ComboBox1.Items.Add('Cobblestone'); ComboBox1.Items.Add('Holz'); ComboBox1.Items.Add('Baum'); end;
procedure TForm1.ComboBox1Change(Sender: TObject); begin label1.Caption := InttoStr(ComboBox1.ItemIndex + 1); if ComboBox1.ItemIndex + 1 = 0 then label1.Caption := 'Bitte wählen...'; end; |
Für diesen Beitrag haben gedankt: marcelrusi
|
|
marcelrusi 
Hält's aus hier
Beiträge: 10
|
Verfasst: Do 09.06.11 15:56
Perfekt , Danke
Hats mir sehr geholfen  )
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Do 09.06.11 16:47
Hey,
dazu müssen die Zahlen zu den Strings aber aufsteigend sortiert und lückenlos sein. Und da bei Minecraft manche IDs nich belegt sind wird er da früher oder später wieder Probleme haben. Deshalb ist die Verknüpfung mit den Objekten hier die richtige Lösung. Dein Code war ja auch richtig, nur an der falschen Stelle!
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| procedure TForm1.FormCreate(Sender: TObject); begin ComboBox1.Items.AddObject('Stein', TObject(1)); ComboBox1.Items.AddObject('Gras', TObject(2)); ComboBox1.Items.AddObject('Erde', TObject(3)); ComboBox1.Items.AddObject('Cobblestone', TObject(4)); ComboBox1.Items.AddObject('Holz', TObject(5)); ComboBox1.Items.AddObject('Baum', TObject(6)); end;
procedure TForm1.ComboBox1Change(Sender: TObject); var ID: Integer; begin ID := ComboBox.ItemIndex; if (ID >= 0) and (ID < ComboBox.Items.Count) then Label1.Caption := IntToStr(Integer(ComboBox.Items.Objects[ID])) else Label1.Caption := 'Kein Item gewählt!'; end; |
whitef hat folgendes geschrieben : |
Delphi-Quelltext 1: 2: 3: 4:
| label1.Caption := InttoStr(ComboBox1.ItemIndex + 1); if ComboBox1.ItemIndex + 1 = 0 then label1.Caption := 'Bitte wählen...'; end; | |
Warum erst rechnen? Prüf doch gleich auf -1.
€: vlt hilft dir DAS auch weiter. Denn so wie es aussieht hast du große Probleme Code selber zu schreiben, und einfach Copy&Paste is nich Sinn der Sache. Vorallem nich wenn man den kopierten Code nicht versteht un dann irgendwo im Programm einfügt und sich wundert warum nix geht
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
whitef
      
Beiträge: 202
Erhaltene Danke: 1
Windows X
Delphi XE X
|
Verfasst: Do 09.06.11 19:06
|
|