Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Werte in Combobox einfügen klappt so nicht (https://www.delphipraxis.net/185288-werte-combobox-einfuegen-klappt-so-nicht.html)

khh 28. Mai 2015 10:40

Delphi-Version: 5

Werte in Combobox einfügen klappt so nicht
 
Hallo zusammen,
ich habe eine Combobox mit diversen Items als Vorgabe.
Nun möchte ich per Zuweisung als Beispiel
Delphi-Quellcode:
Combobox3.Text:= '37';
einfügen.
37 ist aber nicht in der Itemliste.
Das funktioniert aber leider nur wenn der Style auf csDropDown gesetzt ist.


Ich brauche aber als Style csdropdownList, damit sich auf dem Touchscreen per "FingerKlick" ins Feld die Liste öffnet.
Gibts dazu ne Alternative?

Ich danke euch

DeddyH 28. Mai 2015 10:48

AW: Werte in Combobox einfügen klappt so nicht
 
Delphi-Quellcode:
Combobox3.Items.Add('37');

khh 28. Mai 2015 10:56

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von DeddyH (Beitrag 1303364)
Delphi-Quellcode:
Combobox3.Items.Add('37');

so hab ich die '37' zwar in der Liste, aber nicht als selektierten Wert :-(

Neutral General 28. Mai 2015 10:59

AW: Werte in Combobox einfügen klappt so nicht
 
Delphi-Quellcode:
ComboBox3.Items.Add('37');
ComboBox3.ItemIndex := Combobox3.Items.Count-1;

Perlsau 28. Mai 2015 11:03

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von khh (Beitrag 1303360)
Combobox mit diversen Items als Vorgabe. Nun möchte ich per Zuweisung als Beispiel
Delphi-Quellcode:
Combobox3.Text:= '37';
einfügen.
37 ist aber nicht in der Itemliste. Das funktioniert aber leider nur wenn der Style auf csDropDown gesetzt ist.

Irritierend ist, daß du erst schreibst, '37' sei nicht in er Itemliste, "es" dann aber dennoch funktionieren sollte.
Wie DeddyH schon schrieb, weist man eine Stringliste einen neuen Wert mittels Add oder Append zu. Add ist eine Funktion und liefert den Index des neu angefügten Items zurück. Benötigt man den Index nicht, kann man stattdessen die Procedure Append verwenden. Wenn du dagegen dem Property Text einer ComboBox einen String zuweist, änderst du lediglich den angezeigten Text, ohne ein neues Item anzulegen. Über all das gibt die Online-Hilfe deiner Delphi-Version erschöpfend Auskunft.

Zitat:

Zitat von Neutral General (Beitrag 1303366)
Delphi-Quellcode:
ComboBox3.Items.Add('37');
ComboBox3.ItemIndex := Combobox3.Items.Count-1;

Weshalb so umständlich? Add liefert doch bereits den neuen Index zurück, da muß man doch nicht nochmal Count bemühen ... :gruebel:

Popov 28. Mai 2015 11:06

AW: Werte in Combobox einfügen klappt so nicht
 
Delphi-Quellcode:
  Combobox3.Items.Add('37');
  ComboBox3.ItemIndex := Combobox3.Items.IndexOf('37');
oder
Delphi-Quellcode:
  with Combobox3 do
  begin
    Items.Clear;
    Items.Add('37');
    ItemIndex := Items.IndexOf('37');
    //ItemIndex := Items.IndexOf(Trim(Items.Text));
  end;
oder
Delphi-Quellcode:
  with Combobox3 do
  begin
    Items.Clear;
    ItemIndex := Items.Add('37');
  end;

DeddyH 28. Mai 2015 11:08

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von Neutral General (Beitrag 1303366)
Delphi-Quellcode:
ComboBox3.Items.Add('37');
ComboBox3.ItemIndex := Combobox3.Items.Count-1;

Funktioniert so zwar auch, aber ich persönlich würde IndexOf verwenden, auch wenn es ggf. einen Tick länger dauert.
Delphi-Quellcode:
s := '37';
ComboBox3.Items.Add(s);
ComboBox3.ItemIndex := Combobox3.Items.IndexOf(s);

Perlsau 28. Mai 2015 11:11

AW: Werte in Combobox einfügen klappt so nicht
 
Was spricht eigentlich dagegen, den von Add zurückgelieferten Wert gleich als ItemIndex zu setzen?

Delphi-Quellcode:
Liste.ItemIndex := Liste.Add('Neues Item');

DeddyH 28. Mai 2015 11:28

AW: Werte in Combobox einfügen klappt so nicht
 
Nix, hab ich nur nicht dran gedacht :)

khh 28. Mai 2015 11:57

AW: Werte in Combobox einfügen klappt so nicht
 
>> Irritierend ist, daß du erst schreibst, '37' sei nicht in er Itemliste, "es" dann aber dennoch funktionieren sollte.

war vielleicht etwas schlecht ausgedrückt :-(
Soll heissen es muss auch ein Wert zu übergeben sein, der nicht in der Itemliste steht.

Perlsau 28. Mai 2015 12:02

AW: Werte in Combobox einfügen klappt so nicht
 
:wiejetzt: ... der Itemliste einen Wert übergeben, der noch nicht darin enthalten ist?
Wer soll wem einen Wert übergeben?

khh 28. Mai 2015 12:04

AW: Werte in Combobox einfügen klappt so nicht
 
ok, ich danke euch

funktioniert!

khh 28. Mai 2015 12:06

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von Perlsau (Beitrag 1303382)
:wiejetzt: ... der Itemliste einen Wert übergeben, der noch nicht darin enthalten ist?
Wer soll wem einen Wert übergeben?

naja der Wert soll aus der Datenbank kommen und kann eben ein anderer sein, als die in der Liste.

Hab ich mich sooo unverständlich ausgedrückt?

Popov 28. Mai 2015 12:11

AW: Werte in Combobox einfügen klappt so nicht
 
Verstehe ich das jetzt richtig? Du willst in der ComboBox den Style csDropDownList, weil du dann einfach auf das Feld klicken kannst (statt nur auf den Button rechts neben dem Feld), auf der anderen Seite aber willst du die Funktion Text aus dem Style csDropDown, wo du einen Text eingeben kannst, ohne dass es in der Liste ist und auch nicht dort aufgenommen wird?

Damit klappt die ComboBox im Style csDropDown die Liste auf wenn man sie wechselt.
Delphi-Quellcode:
procedure TForm1.ComboBox1Enter(Sender: TObject);
begin
  with TComboBox(Sender) do
  begin
    Perform(CB_SHOWDROPDOWN, Integer(True), 0); // Integer(False) für zu
    SetFocus;
  end;
end;

khh 28. Mai 2015 12:31

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von Popov (Beitrag 1303386)
Verstehe ich das jetzt richtig? Du willst in der ComboBox den Style csDropDownList, weil du dann einfach auf das Feld klicken kannst (statt nur auf den Button rechts neben dem Feld), auf der anderen Seite aber willst du die Funktion Text aus dem Style csDropDown, wo du einen Text eingeben kannst, ohne dass es in der Liste ist und auch nicht dort aufgenommen wird?

genau so ist das für mein Vorhaben ideal.

khh 28. Mai 2015 12:44

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von Popov (Beitrag 1303386)

Damit klappt die ComboBox im Style csDropDown die Liste auf wenn man sie wechselt.
Delphi-Quellcode:
procedure TForm1.ComboBox1Enter(Sender: TObject);
begin
  with TComboBox(Sender) do
  begin
    Perform(CB_SHOWDROPDOWN, Integer(True), 0); // Integer(False) für zu
    SetFocus;
  end;
end;

das hatte ich auch schon probiert, funktioniert aber leider nicht :-(

Popov 28. Mai 2015 13:18

AW: Werte in Combobox einfügen klappt so nicht
 
Was funktioniert nicht? Es tut sein Dienst. Was speziell entspricht nicht den Vorstellungen?

Es ist nun mal so, dass man entweder eine Liste hat die nicht verändert werden soll oder eine Liste die man durch Texteingabe ergänzen kann.

khh 28. Mai 2015 13:54

AW: Werte in Combobox einfügen klappt so nicht
 
die Liste geht nicht auf

Popov 28. Mai 2015 14:25

AW: Werte in Combobox einfügen klappt so nicht
 
Hast du sie auch richtig platziert in ComboBoxEnter? Sie müsste jedes Mal aufgehen wenn die ComboBox den Fokus neu bekommt.

khh 28. Mai 2015 14:32

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von Popov (Beitrag 1303411)
Hast du sie auch richtig platziert in ComboBoxEnter? Sie müsste jedes Mal aufgehen wenn die ComboBox den Fokus neu bekommt.

ja hab ich :-(

Popov 28. Mai 2015 14:44

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von khh (Beitrag 1303412)
Zitat:

Zitat von Popov (Beitrag 1303411)
Hast du sie auch richtig platziert in ComboBoxEnter? Sie müsste jedes Mal aufgehen wenn die ComboBox den Fokus neu bekommt.

ja hab ich :-(

Und jetzt?

khh 28. Mai 2015 15:20

AW: Werte in Combobox einfügen klappt so nicht
 
vielleicht liegt es am Lazarus :-(

himitsu 28. Mai 2015 15:46

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Delphi-Quellcode:
with TComboBox(Sender) do
begin
  Perform(CB_SHOWDROPDOWN, WParam(True), 0); // WParam(False) für zu
  SetFocus;
end;

Man kann auch bissl rumspielen.
Vielleicht geht es ja auf, aber irgendwas macht es wieder zu?
Delphi-Quellcode:
with TComboBox(Sender) do
begin
  SetFocus;
  Perform(CB_SHOWDROPDOWN, WParam(True), 0); // WParam(False) für zu
end;
oder
Delphi-Quellcode:
with TComboBox(Sender) do
begin
  SetFocus;
  Application.ProcessMessages;
  Perform(CB_SHOWDROPDOWN, WParam(True), 0); // WParam(False) für zu
end;
uvm.

PS:
Zitat:

Zitat von MSDN: CB_SHOWDROPDOWN message
Remarks
This message has no effect on a combo box created with the CBS_SIMPLE style.


Popov 28. Mai 2015 18:50

AW: Werte in Combobox einfügen klappt so nicht
 
Eigentlich reden wir vom Style csDropDown, müsste also klappen. In Delphi. Und wie gesagt, den Code oben habe ich getestet.

Aber wo wir schon beim Thema sind, wobei das Problem ich aber bei mir sehe, denn in den Eigenschften des TE steht ja, dass mit Lazarus programmiert wird, aber es wäre dennoch nicht falsch den Hinweis auch so mal fallen zu lassen. Für die Unaufmerksamen wie mich.

Luckie 29. Mai 2015 00:27

AW: Werte in Combobox einfügen klappt so nicht
 
Wenn Lazarus nichts eigenes gebastelt hat und es sich um das native Windows Steuerelement handelt, wüsste ich nicht, was Lazaurs damit zu tun haben sollte.

BadenPower 29. Mai 2015 09:07

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von khh (Beitrag 1303418)
vielleicht liegt es am Lazarus :-(

Ja es liegt an Lazarus.

Aber es liegt auch an Dir, dass Du keine Lösung gefunden hast.
Stichwort: mangelnde Grundlagen

Wenn .Perform() nicht funktioniert, dann nimmt man halt SendMessage und schon funktioniert das automatische Aufklappen der Box auch unter Lazarus:

Delphi-Quellcode:
procedure TForm1.ComboBox1Enter(Sender: TObject);
begin
  SendMessage(TComboBox(Sender).Handle, CB_SHOWDROPDOWN, 1, 0);
end;

khh 29. Mai 2015 09:42

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von BadenPower (Beitrag 1303488)

Aber es liegt auch an Dir, dass Du keine Lösung gefunden hast.
Stichwort: mangelnde Grundlagen

Wenn .Perform() nicht funktioniert, dann nimmt man halt SendMessage und schon funktioniert das automatische Aufklappen der Box auch unter Lazarus:

warum denn das, ich hab ja ne Lösung gefunden :-)
mit
Delphi-Quellcode:
Liste.ItemIndex := Liste.Add('Neues Item');
und style csdropdownLIST habe ich die gewünschten Funktionen und Eigenschaften.
Warum also sonstwie verkünsteln? ;-)

BadenPower 29. Mai 2015 10:21

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von khh (Beitrag 1303492)
warum denn das, ich hab ja ne Lösung gefunden :-)
mit
Delphi-Quellcode:
Liste.ItemIndex := Liste.Add('Neues Item');
und style csdropdownLIST habe ich die gewünschten Funktionen und Eigenschaften.
Warum also sonstwie verkünsteln? ;-)

Weil Du in Post #1 und #15 noch etwas anderes haben wolltest???

#15:
Zitat:

Zitat von khh (Beitrag 1303390)
Zitat:

Zitat von Popov (Beitrag 1303386)
Verstehe ich das jetzt richtig? Du willst in der ComboBox den Style csDropDownList, weil du dann einfach auf das Feld klicken kannst (statt nur auf den Button rechts neben dem Feld), auf der anderen Seite aber willst du die Funktion Text aus dem Style csDropDown, wo du einen Text eingeben kannst, ohne dass es in der Liste ist und auch nicht dort aufgenommen wird?

genau so ist das für mein Vorhaben ideal.

#1:
Zitat:

Zitat von khh (Beitrag 1303360)
Hallo zusammen,
ich habe eine Combobox mit diversen Items als Vorgabe.
Nun möchte ich per Zuweisung als Beispiel
Delphi-Quellcode:
Combobox3.Text:= '37';
einfügen.
37 ist aber nicht in der Itemliste.
Das funktioniert aber leider nur wenn der Style auf csDropDown gesetzt ist.

Ich brauche aber als Style csdropdownList, damit sich auf dem Touchscreen per "FingerKlick" ins Feld die Liste öffnet.
Gibts dazu ne Alternative?


Dass Du nun auf die Möglichkeit der Eingabe in die Property Text der ComboBox verzichten möchtest, dass hast Du uns leider nicht mitgeteilt.

Popov 29. Mai 2015 12:05

AW: Werte in Combobox einfügen klappt so nicht
 
Zitat:

Zitat von khh (Beitrag 1303492)
warum denn das, ich hab ja ne Lösung gefunden :-)
mit
Delphi-Quellcode:
Liste.ItemIndex := Liste.Add('Neues Item');
und style csdropdownLIST habe ich die gewünschten Funktionen und Eigenschaften.
Warum also sonstwie verkünsteln? ;-)

Die Frage hier und die Lösung aus anderem Thread, wo ist da die Gemeinsamkeit?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:00 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