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 Comboboxliste: Eintrag markieren? (https://www.delphipraxis.net/129235-comboboxliste-eintrag-markieren.html)

Mattze 15. Feb 2009 08:12


Comboboxliste: Eintrag markieren?
 
Hallo,

also ich kriege es nicht raus...

Wenn ich die Liste einer Combobox öffne, ist standardmäßig (Nur bei mir?) der erste Eintrag in der Liste markiert. Auch, wenn der Text einem Listeneintrag entspricht und der itemindex entsprechend gesetzt ist.
Ich hätte aber gerne, dass dann, wenn er in der Liste schon vorhanden ist, der ausgewählte (Text-)Eintrag in der List auch der markierte Eintrag ist.
(So, wie man in einer Listbox den "aktuellen" Eintrag durch Setzen von itemindex markieren kann!)

Was kann man da machen? Habt Ihr einen Vorschlag?

Gruß
Mattze

Jakob Ullmann 15. Feb 2009 08:22

Re: Comboboxliste: Eintrag markieren?
 
Kann ich nicht bestätigen. Habe eine ComboBox mit Items:

Zitat:

aaa
bbb
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
ItemIndex = 15 - wenn ich sie öffne, ist das markierte Item "p" und der Scrollbalken ist auch entsprechend weit unten.

edit: Vielleicht hilft dir bei deinem Problem ComboBox.Items.IndexOf()

Mattze 15. Feb 2009 09:04

Re: Comboboxliste: Eintrag markieren?
 
Hi,

ehrlich gesagt, war mir das auch so in Erinnerung. Das klappte eigentlich immer automatisch. Deswegen bin ich ja so erstaunt, dass es nun nicht mehr funktioniert.
Ich habe da alles mögliche ausprobiert. Alle Methoden und Ereignisse usw. "Indexof" natürlich auch.
Das gibt mir sogar den korrekten Index des Items zurück, aber selbst, wenn ich den itemindex der Box setze, passiert nix.

Ich gebe da einen Text ein. Dieser Text kann durchaus schon in der Liste enthalten sein. Wenn er da ist (Indexof), wird der itemindex entsprechend gesetzt. (Im Prinzip eine HistoryCombobox. Die Komponente habe ich mal gesehen, aber nicht mehr gefunden.)

Inzwischen habe ich den Eindruck, dass er die Markierung nach dem itemindex sogar ganz kurz setzt, dann aber sofort wieder auf 0 zurückgeht.

Da Du mir aber bestätigt hast, dass es geht, muss der Fehler bei mir liegen. Also spiele ich weiter...

Mattze 15. Feb 2009 11:41

Re: Comboboxliste: Eintrag markieren?
 
Hi,

Heureka, ich weiß jetzt, was er nicht will.
Sobald man items.insert oder items.insertobject benutzt, kann er das nicht mehr automatisch markieren.
Offenbar kommen da die Indizes völlig durcheinander.
Die werden zwar richtig gesetzt, aber er kann es aus der Itemsliste nicht mehr richtig auswählen (Warum?) und nimmt deshalb den ersten Eintrag. Komisch, aber wahr!

Nun weiß ich nur nicht, wie ich das umgehen könnte. Mit items.add funktioniert es ja. Vielleicht kann man dann die Liste umdrehen und es geht weiterhin? (Hat jemand was zum Listeumdrehen?)
Mal probieren...

Gruß
Mattze

mkinzler 15. Feb 2009 11:43

Re: Comboboxliste: Eintrag markieren?
 
Insert fügt auch an der markierten Stelle ein und nicht am Ende der Liste. Deshalb verschieben sich die Indizes der folgen Einträge.

Mattze 15. Feb 2009 12:01

Re: Comboboxliste: Eintrag markieren?
 
Hi,

ich weiß schon, was insert wo und wie macht!
Selbstverständlich habe ich den aktuellen Index erst nach dem Insert (oder der Erstellung) der Liste geholt und da müsste eigentlich automatisch schon alles korrigiert sein. Scheint es aber nicht zu sein.

Umkopieren der Liste macht es übrigens auch nicht. Das gleiche!
Evtl. müssten die Indizes danach "nur" neu aufgebaut werden.
Gibt es da sowas wie "reindex" oder so?

Gruß
Mattze

Mattze 15. Feb 2009 13:25

Re: Comboboxliste: Eintrag markieren?
 
Hi,

also nun muss ich mich bei den Borländern entschuldigen.
Insert (und auch InsertObject) arbeiten schon völlig korrekt.
Das ist noch etwas anderes.
Ich nehme an, dass es mit Widestrings zusammenhängt.

Selbst bei
insert(0,string(ws)) funktioniert es nicht.
Schreibe ich nur
insert(0,string(ws)+' ') funktioniert es!!!
(Die Konvertierung mit String(ws) ist hier nicht mal nötig.)

(ws soll der widestring sein.)

Momentan weiß ich noch nicht, was da zu tun ist. Ich spiele weiter...

Gruß
Mattze

Mattze 15. Feb 2009 15:19

Re: Comboboxliste: Eintrag markieren?
 
Hi,

das Problem scheint bei Windows zu liegen.
Die markieren den String mit CB_SELECTSTRING.
Laut Hilfe sucht das aber den ersten String in der Itemliste raus, der mit dem gesuchten Text beginnt!!!

Kann man mit items.add und fester Liste überprüfen:
Delphi-Quellcode:
abcdef
abcde
abcd
abc
ab
a
und man wähle per Maus "a".
Markiert wird "abcde".

Was tun?

Gruß
Mattze

Mattze 15. Feb 2009 19:27

Re: Comboboxliste: Eintrag markieren?
 
Hi,

also, wenn ich das richtig sehe, liegt der "Fehler" in der StdCtrls bei TCustomComboBox.selectitem.
Da steht CB_FINDSTRING, müsste aber CB_FINDSTRINGEXACT stehen. Insofern wahrscheinlich sogar ein Bug.

Wenn man das bearbeiten will, wäre es ein Riesenaufwand. Man müsste sowieso alles kopieren. Besser wäre es, die StdCtrls direkt zu ändern und neu zu übersetzen.

Darf man die StdCtrls verändern und neu übersetzen?

Geht das überhaupt und wie macht man das: Eine Standardunit neu übersetzen (hier eben StdCtrls)?

(Ich habe Delphi7 pro, also sowieso die Quellen.)

Gruß
Mattze


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.

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