AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Comboboxliste: Eintrag markieren?

Ein Thema von Mattze · begonnen am 15. Feb 2009 · letzter Beitrag vom 15. Feb 2009
Antwort Antwort
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#1

Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 09:12
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
  Mit Zitat antworten Zitat
Benutzerbild von Jakob Ullmann
Jakob Ullmann

Registriert seit: 17. Feb 2007
218 Beiträge
 
Lazarus
 
#2

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 09:22
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()
Jakob
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#3

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 10:04
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...
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#4

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 12:41
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 12:43
Insert fügt auch an der markierten Stelle ein und nicht am Ende der Liste. Deshalb verschieben sich die Indizes der folgen Einträge.
Markus Kinzler
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#6

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 13:01
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
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#7

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 14:25
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
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#8

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 16:19
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
  Mit Zitat antworten Zitat
Mattze

Registriert seit: 6. Jan 2005
664 Beiträge
 
#9

Re: Comboboxliste: Eintrag markieren?

  Alt 15. Feb 2009, 20:27
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:38 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