Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Combobox items, anderen strings zuweisen (https://www.delphipraxis.net/149236-combobox-items-anderen-strings-zuweisen.html)

sun4623 17. Mär 2010 06:08


Combobox items, anderen strings zuweisen
 
Hallo und Guten Morgen :)

ich habe hier eine Combobox mit einträgen wie: (highscore , dreamcast , games) Diese Combobox wird in verschiedenen Prozeduren (1,2,3) benützt, jedoch sind die strings von Prozedur2 und prozedur3 anders wie die einträge der Combobox. Z.b. muss ich in Prozedur2 nicht den standart Combobox.text Dreamcast sondern DCast,oder anstelle von highscore hscore nehmen . Ich kann mich noch an ein paar code schnippsel erinnern in denen das ""problem"" recht simpel gelöst wurde. In der verwendeten Prozedur wurden die einträge der combobox ,einfach den passenden strings zugeteilt. Wie ging das nochmal?:oops:


Prozedur2;
....
....
combobox.item.... :=Dcast;
combobox.item.... :=hscore;
....
ShowMessage(Dcast);

freak4fun 17. Mär 2010 06:37

Re: Combobox items, anderen strings zuweisen
 
Morgen!

Schau dir mal den Thread an, da könnte was bei sein. :)

sun4623 17. Mär 2010 07:32

Re: Combobox items, anderen strings zuweisen
 
Hallo

Danke. Aber Nein ,dass war glaube ich nicht das was ich gesucht hatte... WEnn ich z.b. in der Combobox die auswahl "Dreamcast" gewählt habe möchte ich das in einer Prozedur der string Dcast verwendet wird.
Anhand dieses Beispiels soll mit jedem eintrag der Combobox bzw jeder selektion verfahren werdem. Wie mache ich das?

LG
sun

scrat1979 17. Mär 2010 07:47

Re: Combobox items, anderen strings zuweisen
 
Ich weiß zwar noch nicht genau, was du meinst, aber folgender Befehl gibt den aktuell selektierten Eintrag zurück:

Delphi-Quellcode:
  if cbBox.ItemIndex <> -1 Then               // -1 = Kein Eintrag ausgewählt -> nichts machen, sonst fliegt uns alles um die Ohren :)
   ShowMessage(cbBox.Items[cbBox.ItemIndex]);


[EDIT: Ein Haufen Rechtsschreibfehler behoben, den Rest dürft Ihr behalten]

Matze 17. Mär 2010 07:50

Re: Combobox items, anderen strings zuweisen
 
Zitat:

Zitat von sun4623
Z.b. muss ich in Prozedur2 nicht den standart Combobox.text Dreamcast sondern DCast,oder anstelle von highscore hscore nehmen .

Das klingt mir nach einer weniger gut durchdachten Programmstruktur.

Wäre es nicht sinnvoller, intern die gleichen Namen oder Konstanten zu verwenden?

scrat1979 17. Mär 2010 07:57

Re: Combobox items, anderen strings zuweisen
 
Zitat:

Zitat von Matze
Das klingt mir nach einer weniger gut durchdachten Programmstruktur.

... das war auch mein Gedanke. Ich denke aber, ich habe jetzt verstanden, was der TE möchte. Ich würde es zwar etwas komplexer und sauberer Lösen (Programmstruktur müsste aber vermutlich ganz anders konzipiert sein), aber folgende Lösung wäre ein Ansatz:

Delphi-Quellcode:
 VAR
   arrayProz1, arrayProz2 : array[1..3] of String;

 [...]

 arrayProz1[1] := 'String1_Proz1';
 arrayProz1[2] := 'String2_Proz1';
 arrayProz1[3] := 'String3_Proz1';

 arrayProz2[1] := 'String1_Proz2';
 arrayProz2[2] := 'String2_Proz2';
 arrayProz2[3] := 'String3_Proz2';

 [...]

 // In Prozedure 1
 ShowMessage(arrayProz1[cbBox.ItemIndex]);

 // In Procedure 2
 ShowMessage(arrayProz2[cbBox.ItemIndex]);

 [...]
... wie gesagt, nicht besonders sauber, aber ein Ansatz!

SCRaT

DeddyH 17. Mär 2010 08:06

Re: Combobox items, anderen strings zuweisen
 
Ich würde mir ja eine Klasse bauen und diese per ComboBox.Items.AddObject() in die Combobox bringen. So kann man dann seine Daten schön zusammenhalten.

[edit] :oops: so etwas war oben ja schon verlinkt [/edit]

sun4623 17. Mär 2010 11:03

Re: Combobox items, anderen strings zuweisen
 
Hallo
Danke für all eure antworten. :thumb:
Damit ihr euch ein besseres Bild von der Situation machen könnt: Es geht um das ausfüllen eines Formulars auf der Website. (Verstößt nicht gegen die AGB, da abgesprochen)
In der Combobox gibt es einträge wie: Kategorie: (Shooter , Rennspiel, Action/Adventure)
So nun gibt es auf der Seite und ihrem Formular ebenso eine Combobox, meine delphi.Combobox soll nun einen Wert übergeben.

Sprich: WebBrowser1.OleObject.document.forms.item(0).eleme nts.item('genre').value:=kategorie.text;

Jedoch geht dies nicht da das Webformular bzw. die Combobox der seite z.b.anstelle von Shooter (Wert/TXT in meiner Com.Box) nur den wert "FPS"nimmt. Die Seite und ihre Combobox hat also andere Werte wie meine. Außerdem geht es nicht nur um die eine Seite, es sollen noch 2 Andere Seiten und deren Formulare ausgefüllt werden ,diese haben wiederrum andere Werte in ihrer Combobox wie meine.

Ich weis ich drücke mich etwas unklar und komisch aus. Bin noch nicht allzulange dabei. :oops:

Ich hoffe ihr könnt mir helfen. :)

Liebe Grüße

DeddyH 17. Mär 2010 11:16

Re: Combobox items, anderen strings zuweisen
 
Hier ein Beispiel mit der angesprochenen eigenen Klasse (auf der Form befindet sich nur eine ComboBox):
Delphi-Quellcode:
type
  //eigene Klasse mit 2 Stringattributen
  TComboItem = class
  private
    FDisplayText,
    FInternalText: string;
  public
    //Anzeigetext
    property DisplayText: string read FDisplayText write FDisplayText;
    //intern genutzter Text
    property InternalText: string read FInternalText write FInternalText;
  end;

procedure TfrmTest.ComboBox1Change(Sender: TObject);
var MyItem: TComboItem;
begin
  //internen Text des ausgewählten Items anzeigen
  if ComboBox1.ItemIndex > -1 then
    begin
      MyItem := ComboBox1.Items.Objects[ComboBox1.ItemIndex] as TComboItem;
      ShowMessage(MyItem.InternalText);
    end;
end;

procedure TfrmTest.FormCreate(Sender: TObject);
var MyItem: TComboItem;
begin
  //Einfügen von 2 Instanzen der Klasse zur Combobox
  MyItem := TComboItem.Create;
  MyItem.DisplayText := 'Sichtbarer Text';
  MyItem.InternalText := 'Intern genutzter Text';
  ComboBox1.Items.AddObject(MyItem.DisplayText, MyItem);
  MyItem := TComboItem.Create;
  MyItem.DisplayText := 'Wuppdi';
  MyItem.InternalText := 'Hinter den 7 Bergen';
  ComboBox1.Items.AddObject(MyItem.DisplayText, MyItem);
  ComboBox1.ItemIndex := 0;
end;

procedure TfrmTest.FormDestroy(Sender: TObject);
var i: integer;
begin
  //Instanzen freigeben
  for i := ComboBox1.Items.Count - 1 downto 0 do
    ComboBox1.Items.Objects[i].Free;
end;

sun4623 17. Mär 2010 12:55

Re: Combobox items, anderen strings zuweisen
 
Hallo

Vielen lieben Dank an dich erstmal. :) Das scheint mir jedoch etwas, recht komplex für einen Anfänger wie mir. Verwirrt mich wirklich etwas. Wie nutze ich das dann mit dieser code zeile und 20 Combobox einträgen? Ich habe mich jetzt erstmal für den code-schnippsel von dem guten "scrat1979" entschieden.
Nochmal ein Danke an euch beiden.

@scrat1979 und co: Warum unsauber? Können bei solchen "un-sauberen" codes derart schneller fehler auftreten? Es heißt doch normalerweise: Desto weniger c0de, desto sauberer oder?

LG


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz