Autor Beitrag
marcelrusi
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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 user profile iconMartok: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: 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
ausblenden Delphi-Quelltext
1:
ComboBox.Items.AddObject('EinString', TObject(1));					

auslesen (aktuelle pos)
ausblenden Delphi-Quelltext
1:
2:
EinString := ComboBox.Items.Strings[ComboBox.ItemIndex];
Zahl      := Integer(ComboBox.Items.Objects[ComboBox.ItemIndex]);

String zur Zahl geben
ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 09.06.11 14:56 
Also mein Quelltext sieht bis jetzt so aus :


ausblenden 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 42
Erhaltene Danke: 3


Delphi (Seattle), C (MPLAB X)
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: 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 ;) :P
whitef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: Do 09.06.11 15:50 
wie wärs damit?

ausblenden 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 Threadstarter
Hält's aus hier
Beiträge: 10



BeitragVerfasst: Do 09.06.11 15:56 
Perfekt , Danke ;)

Hats mir sehr geholfen ;))
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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!

ausblenden 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 >= 0and (ID < ComboBox.Items.Count) then
    Label1.Caption := IntToStr(Integer(ComboBox.Items.Objects[ID]))
  else
    Label1.Caption := 'Kein Item gewählt!';
end;


user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 202
Erhaltene Danke: 1

Windows X
Delphi XE X
BeitragVerfasst: Do 09.06.11 19:06 
user profile iconBergmann89 hat folgendes geschrieben Zum zitierten Posting springen:
Hey,
user profile iconwhitef hat folgendes geschrieben Zum zitierten Posting springen:

ausblenden 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.


hast recht, war wohl ein wenig zu schnell^^