AGB  ·  Datenschutz  ·  Impressum  







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

Eine Combo-Box "durch den Filter jagen"

Ein Thema von Corelgott · begonnen am 21. Nov 2005 · letzter Beitrag vom 22. Nov 2005
Antwort Antwort
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#1

Eine Combo-Box "durch den Filter jagen"

  Alt 21. Nov 2005, 08:42
Hi @ all,

ich habe ein problem; (mal wieder)

und zwar habe ich eine ganz normale combo;
Ich möchte aber die einträge filtern; d.h. ich möchte einen text tippen und zeichen nach zeichen nur noch die Listeneinträge übrig lassen, die noch in frage kommen;

Vergleichbar mit der Adressen-Filter-Funktion wie man sie aus dem IE oder FireFox kennt, wenn man in die adressleiste eine url tippt.

Das problem ist bloß:

ich versuche es zur zeit so:
Ich sammel mit im speicher eine StringList, die komplett gefiltert ist.
Danach weise ich der Combo diese Stringlist zu -> Combo.Items := StringList;

An sich klappt das auch aber:

wenn ich in der Combo autocomplete an habe und die neue Liste zuweise, wir der erste eintrag "ausgewählt".
Das führt dazu, dass die Combo ihren text ändert. (inkl. KeyUp, Down & Pressed)

Darauf reagiere ich dann wieder (text hat sich ja verändert) und die Combo filtert wieder;
Ich löse also ungewollt das Event aus, auf das ich reagieren will.

Das ende vom Lied ist einfach: Den ersten eingebenen Bustaben filtert er richtig. Danach "läuft er so lange" bis der Combo Eintrag der ausgewählt ist genau dem ersten Eintrag ist

Bsp:
[liste]
abc
baa
bca
bcc
cba[/liste]

nun tippe ich ein b ein:
[liste]
baa
bca
bcc[/liste]
Der text der Combo ändert sich auf baa.

löst also das event KeyPressed "a" aus.
[liste]
baa[/liste]

... usw ..

Hat da wer ne idee, wie man das umgeht?!
Bin echt dankbar für jede anregung!


thx & cya
Corelgott
  Mit Zitat antworten Zitat
Benutzerbild von Daniel B
Daniel B

Registriert seit: 27. Okt 2005
Ort: Dachau
453 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 21. Nov 2005, 09:16
Bei der Eingabe einer Taste, machst ne Schleife mit den Items der CB, prüfst den ersten Buchstaben ob der gleiche Deiner eingabe entsprich und wenn nicht, dann alle anderen Items aus der CB löchen, aber nur aus der CB, nicht aus der SL, die brauchst ja wieder bei der nächsten Suche.
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#3

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 21. Nov 2005, 09:46
hmm

erst mal danke für die schnelle antwort!
An sich ist die idee nicht schlecht. Habe ich auch schon versucht.

aber:
Dabei entsteht bloß das Problem, dass tasten wie backspace, preiltasten etc. Nicht funzen.
Wenn ich das in einen simpelen string baue. D.h. ich müsste die komplette "String bearbeitung" wie sie ein textfeld bietet per hand schreiben...

Oo

ehh **och nö!**


Gibt's da nicht villeicht was eleganteres?
Außerdem, wie soll ich unterscheiden, was nun ich eingegeben habe, und was "das system"?
Es wird bei der ganzen geschichte ja auch KeyPressed aufgerufen!
Somit... könnte das schwer werden... Höchsten über From.keypreview...

Hätte da wer sonst noch nen vorschlag?

thx für's nachdenken
cya
Corelgott
  Mit Zitat antworten Zitat
Benutzerbild von Daniel B
Daniel B

Registriert seit: 27. Okt 2005
Ort: Dachau
453 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 21. Nov 2005, 10:13
Mal doof frag, hat bei Delphi 7, die CB nicht die Eigenschaft Sorted? Dann müsstest Du ja nur rauslöschen was Du nicht brauchst, also beim 2005er geht das jedenfalls.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 21. Nov 2005, 12:39
Moin Corelgott,

hast Du Dir schon einmal die ComboBoxEx (Palettenseite Win32) angeschaut?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#6

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 22. Nov 2005, 10:24
hi,

so @ ComboEx jupp die habe ich schon mal geschaut... aber die macht das nicht 100%ig so wie ich das will

**bin da ein bissel wählerrisch**

ich habe mich jetzt dazu durchgerungen, ne einge compo von TCustomCombo ab zu leiten.
Alle anderen haben das filter-verhalten einfach nicht so gemacht, wie ich das will...

und außerdem will mein chef nun dazu noch, das die einträge "gekennzeichnet werden"
soll heißen. Die einträge die in Frage kommen, sollen ganz nach oben. der rest soll grau darunter stehen.
Das Event-Überlagerungs prob löst sich somit.

ich löse nur dass dann auch wann ich es will ^^

aber:

wenn ich die Methode drawItem überlade...
Muss ich immer jedes item per hand zeichnen..

Beim TreeView hat man die möglichkeit per var in den paramertern ein zu stellen, ob man da was selbst machen will oder machen lässt
gibt es so einen "schalter-möglichkeit" auch bei der Combo? weil als parameter kommt das nicht!

Außerdem will ich nicht alles per hand machen... z.b. den Cursor in die eingabe zeile der Combo packen... **och nööö**
Das müsste ich dann machen, wenn ich auf Self.Style = csOwnerDrawVariable stelle...

Somit müsste ich fast den Titel des Thread ändern / einen neuen aufmachen

Combo im Eigenbau...

hmm

Aber villeich hat ja trotzdem wer hier noch ne andere idee... oder tips zum combo-bau

thx aber für die Anregungen soweit!

cya
Corelgott
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#7

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 22. Nov 2005, 10:51
hmm man könnte mein aktuelles problem auch auf eine kleinigkeit zurecht stuzen:

aud der delphi hilfe

[help]
csDropDown

Erzeugt eine Dropdown-Liste mit einem Eingabefeld zur manuellen Eingabe von Text. Alle Einträge sind Strings mit derselben Höhe.
csSimple Erzeugt ein Eingabefeld und darunter eine feste Liste (Listenfeld). Die Länge der Liste wird durch die Eigenschaft Height des Kombinationsfeldes festgelegt.

csDropDownList

Erzeugt eine Dropdown-Liste ohne Eingabefeld. Der Benutzer kann keine manuellen Eingaben vornehmen. Alle Einträge sind Strings mit derselben Höhe.

csOwnerDrawFixed
Erzeugt eine vom Eigentümer gezeichnete Dropdown-Liste ohne Eingabefeld. Die Höhe der Einträge in der Liste wird durch den jeweiligen Wert der Eigenschaft ItemHeight festgelegt.

csOwnerDrawVariable
Erzeugt eine vom Eigentümer gezeichnete Dropdown-Liste ohne Eingabefeld. Die Höhe der Einträge in der Liste kann variieren.

Wenn Style den Wert csOwnerDrawFixed oder csOwnerDrawVariable hat, tritt das Ereignis OnDrawItem ein. Wenn Style den Wert csOwnerDrawVariable hat, tritt zusätzlich das Ereignis OnMeasureItem ein.

[/help]

Ich bäuchte eigentlich ne mischung aus cdDropDown & csOwnerDrawFixed. also selbst zeichnen aber bitte mit nem text-feld...

Hat das wer nen tip?
Oder stehe ich damit weiter im regen?

thx & cya
Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#8

Re: Eine Combo-Box "durch den Filter jagen"

  Alt 22. Nov 2005, 11:44
hmm hat den so gar keiner ne idee dazu?
Hmm zur not bau ich das aus nem Edit-Feld und nem Fenster selbst! Problem wäre da bloß, dass bei nem echten neuen fenster der focus wechselt, sobald man es anzeigt...

cya
Corelgott
wer Rächtschraibfehler findet daaf sie behalten...
  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 19:39 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