wenn man im zugrundeliegenden Dataset ein Nachschlagefeld definiert hat, zeigt das DBGrid ebenso erfreulicher- wie magischerweise ja zum Editieren eine Combobox an. Falls das Dataset sortiert ist, sind es auch die angezeigten Werte, wenn man es aufklappt. So weit, so gut.
Nun hätte ich gerne das von gängigen Dropdown-Controls "gewohnte" Verhalten eingeschaltet oder nachgerüstet
(Wer nicht sicher ist, was ich meine: Dasselbe Verhalten wie z.B. die Dropdown-Box links neben "Los" im "SUCHE"-Abschnitt links in der Mitte auf
http://www.lazarusforum.de/. Hier reicht es auch, "Y" zu tippen, um zum Eintrag "Yahoo" zu springen.)
(A) durch Eingabe der ersten paar Buchstaben den ersten in der längeren Liste passenden Eintrag automatisch "anspringen" zu können
# oder, noch eleganter wäre: -
(B) eine Substringsuche, in dem die Eingabe einiger Zeichen die angezeigte Liste einengt, so daß dann schnell mit den Pfeiltasten das Gemeinte erreicht und ausgewählt werden kann. Klar ist mir, daß dann der bereits eingegebene String als Filter für das der Liste zugrundende Datensetz herhalten kann.
Nun gehen die Fragezeichen los: auf DBGrid und den einzelnen TCoumns finde ich nichts, wo man das direkt einstellen könnte.
Da es auf dem Formular mehrere Grids und auf diesen wiederum etliche Nachschlagefelder gibt, die sich alle gleich verhalten sollten, wäre eine "zentrale" Lösung auch sinnvoller.
Nachdem ich keine Beispiele finden konnte, kam ich auf die Idee, es formularweit mit
Code: Alles auswählen
procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
WriteLn('Name:',ActiveControl.Name, ' Caption:',ActiveControl.Caption);
end;
Interessanterweise fördert das beim Blättern durch die Dropdownliste Ausgaben wie
Code: Alles auswählen
Name:PickListEditor Caption:Drucker
Vielleicht ist das auch ein ungeschickter Ansatz - hat jemand einen besseren Vorschlag, einen Zeiger auf ein existierendes Beispiel oder gar eine komfortable Eingabe für die Combobox selber schon mal umgesetzt?