Servus zusammen,
ich baue immer wieder in meine Programme eine TCombobox ein, Manchmal Editierbar, manchmal nur als csDropDownList, aber fast immer Alphabetisch sortiert.
Nun habe ich das Problem, dass ich sehr häufig extrem viele Einträge in diesen Listen habe. Unter Windows kann man "wenigstens" durch aufklappen der Liste und dann drücken eines Buchstabens an den ersten Eintrag der mit diesem Buchstaben beginnt hin springen. Unter Linunx (Linux Mint Mate) geht es gar nicht.
Die Frage ist nun, kennt ihr einen Weg eine Vergleichbare Komponente bei der man eine Art "Schnellsuche" hat zu basteln oder gibt es dass schon für Lazarus?
Für Delphi gibts da wohl die TSmartCombobox, die ziehe ich mir nun mal rein, aber so wie das aussieht wird die nicht Windows und Linux Tauglich sein ...
TCombobox "schnellsuche"
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: TCombobox "schnellsuche"
Hi!
Ich hab früher mal ne schlichte Lösung mit KeyPress gebaut.
* Die Items müssen sortiert sein
* Bei Tastendruck springt er zum Item mit dem passenden Anfangsbuchstaben
* Falls kein passender Anfangsbuchstabe vorhanden springt er zum ersten Eintrag nach dem Abfangsbuchstaben
* Falls garnix passt springt er zum letzten Eintrag.
Quick hack der bestimmt verbessert werden kann.
Winni
Ich hab früher mal ne schlichte Lösung mit KeyPress gebaut.
* Die Items müssen sortiert sein
* Bei Tastendruck springt er zum Item mit dem passenden Anfangsbuchstaben
* Falls kein passender Anfangsbuchstabe vorhanden springt er zum ersten Eintrag nach dem Abfangsbuchstaben
* Falls garnix passt springt er zum letzten Eintrag.
Code: Alles auswählen
procedure TForm1.ComboBox1KeyPress(Sender: TObject; var Key: char);
var i: integer;
search, item : string;
begin
search := key;
key := #0;
for i := 0 to ComboBox1.Items.count - 1 do
begin
item := copy (ComboBox1.Items[i],1,1);
if UTF8UpperString(search) <= UTF8UpperString(item) then
begin
ComboBox1.ItemIndex:= i;
exit;
end;
end; //i
//kein Treffer
ComboBox1.ItemIndex:= comboBox1.Items.count-1;
end;
Quick hack der bestimmt verbessert werden kann.
Winni
Re: TCombobox "schnellsuche"
Sonst gibt's hier auch noch Vorschläge:
https://forum.lazarus.freepascal.org/in ... ic=44801.0
https://forum.lazarus.freepascal.org/in ... ic=44801.0
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: TCombobox "schnellsuche"
oh oh ich sehe schon das scheint gar nicht so einfach zu sein.
Das von Winni funktioniert zumindest mal auf Linux, die "Lösung" aus dem internationalen Forum hat erst mal nicht funktioniert, der Step davor läuft immerhin, aber da klappt das autodropdown nicht, da muss ich also auch noch mal nachsehen woran das liegt. Zumindest ein Startpunkt. Danke, ...
Das von Winni funktioniert zumindest mal auf Linux, die "Lösung" aus dem internationalen Forum hat erst mal nicht funktioniert, der Step davor läuft immerhin, aber da klappt das autodropdown nicht, da muss ich also auch noch mal nachsehen woran das liegt. Zumindest ein Startpunkt. Danke, ...
--
Just try it
Just try it
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1647
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: TCombobox "schnellsuche"
Ich habe mir eine eigene Combobox gebastelt.
In der müssen die Einträge auch nicht sortiert sein.
Die Komponente habe ich in ein eigenes kleines Package gepackt.
In der müssen die Einträge auch nicht sortiert sein.
Die Komponente habe ich in ein eigenes kleines Package gepackt.
- Dateianhänge
-
mycombobox.zip
- Komponente TMyCombobox
- (1.49 KiB) 53-mal heruntergeladen
- corpsman
- Lazarusforum e. V.
- Beiträge: 1629
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: TCombobox "schnellsuche"
@fliegermichl
Echt cool wie du das mit der Komponente gemacht hast, wollte sowas auch schon immer mal Probieren
Habe auf deiner Basis mal meine "eigene" Komponente draus gebastelt.
Änderungen zu dir:
- Ein Icon für die Komponentenpalette (warum mus man da 3 mal das Icon angeben, hab nur die 24x24 Variante rein gemacht, reicht anscheinend auch)
- Anderer "Match" Algorithmus der irgendwie besser meinen Bedürfnissen entspricht.
- AutoDropdown=true
Unter Windows, ist das damit das was meinen Wünschen am Ehesten entspricht
Unter Linux muss ich es noch testen
Echt cool wie du das mit der Komponente gemacht hast, wollte sowas auch schon immer mal Probieren

Habe auf deiner Basis mal meine "eigene" Komponente draus gebastelt.
Änderungen zu dir:
- Ein Icon für die Komponentenpalette (warum mus man da 3 mal das Icon angeben, hab nur die 24x24 Variante rein gemacht, reicht anscheinend auch)
- Anderer "Match" Algorithmus der irgendwie besser meinen Bedürfnissen entspricht.
- AutoDropdown=true
Unter Windows, ist das damit das was meinen Wünschen am Ehesten entspricht
Unter Linux muss ich es noch testen

- Dateianhänge
-
searchcombobox.zip
- (2.29 KiB) 55-mal heruntergeladen
--
Just try it
Just try it