![]() |
Editbox mit Onlinesuche
Ich hab wieder mal ein Problem.
Ich versuche eine sogenannte "Onlinesuche" aus einer EditBox heraus hinzubekommen. Man gibt etwas in die Editbox ein und daraufhin soll z.B. in einer Listbox eine Liste aus einer Datenbank angezeigt werden, die mit diesen Werten beginnt. (Onlinesuche=pro eingegebenem Zeichen suchen nicht erst nach Enter) Das ist im Prinzip noch nicht so schwer. Über das keypress Ereignis die Taste abfragen und auswerten. Mein erstes Problem ist: Wenn ich mit der Rücktaste ein Zeichen lösche, dann geht das bis zum zweiten Zeichen gut, schreibe ich ein drittes Zeichen und drücke die Backspace-Taste, dann löscht er mir 2 Zeichen weg. Irgendwo hab ich da einen Denkfehler, aber wo ? Hier mal der Sourcecode der keypress-Routine
Delphi-Quellcode:
Mein zweites Problem ist:
procedure TForm1.EdKontoKeyPress(Sender: TObject; var Key: Char);
begin DataKonto:=DataKonto+key; If key = chr(vk_delete) Then DataKonto:=''; // Wenn Del-Taste dann alles löschen If key = chr(vk_back) Then begin Delete(DataKonto,Length(DataKonto)-1,2); // Wenn Rück-Taste dann nach links löschen EdKonto.Text:=DataKonto; end; Form1.listbox1.Items.clear; Form1.QCD1.Close; Form1.QCD1.SQL.Clear; Form1.QCD1.SQL.Add('Select * From Konten Where KontoNr Like '+QuotedStr(DataKonto+'%')); Form1.QCD1.Open; While not Form1.QCD1.Eof do Begin Form1.ListBox1.Items.Add(form1.QCD1KontoNr.AsString + ' ' + form1.QCD1Beschriftung.AsString); Form1.QCD1.Next End; end; Ich habe irgendwo mal gelesen, wie man sowas auch mit einem Timer macht, dass man die Suche und auflistung über ein Timerereignis laufen lässt, damit die Eingabe zügiger abläuft. Das war ein tolles Beispiel, ich kann mich aber nicht mehr erinnern wo ich es gesehen habe. Ich habe fast alle Bücher von Doberenz/Kowalski, möglich dass es in einem dieser Bücher drin war, ich kann es aber nicht mehr finden. Vieleicht hat das jemand gesehen und kann mir sagen wo das war. Fall jemand eine bessere Idee hat das Problem anzugehen, freue ich mich auch über andere Verfahrensweisen. |
Re: Editbox mit Onlinesuche
Ich habe zwar zu deinem Problem erst mal keine Lösung, aber einen Rat hätte ich: Nimm den Teil, der mit der Suche in der DB zu tun hat, aus der Ereignisfunktion raus
Delphi-Quellcode:
und schreib dafür eine separate Funktion, der man den eingetippten Such-String übergeben kann.
Form1.listbox1.Items.clear;
Form1.QCD1.Close; Form1.QCD1.SQL.Clear; Form1.QCD1.SQL.Add('Select * From Konten Where KontoNr Like '+QuotedStr(DataKonto+'%')); Form1.QCD1.Open; While not Form1.QCD1.Eof do Begin Form1.ListBox1.Items.Add(form1.QCD1KontoNr.AsString + ' ' + form1.QCD1Beschriftung.AsString); Form1.QCD1.Next End; Edit: Jetzt habe ich auch eine Lösung bzw. Frage. Warum nimmst du nicht das "OnChange"-Ereignis? Du brauchst doch auf die Tasten nicht reagieren, das macht doch das Eingabefeld von sich. Im "OnChange" liest du bloß den aktuellen Inhalt aus und übergibst den an die oben vorgeschlagene Suchfunktion. |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Neuen Beitrag zur Code-Library hinzufügen" nach "Sonstige Fragen zu Delphi" verschoben.
|
Re: Editbox mit Onlinesuche
Es ist ja nicht zu fassen, da quält man sich Tagelang mit einem Problem herum und dann sagt einem jemand mit einem Fingerschnippen wie das doch ganz einfach geht.
Mit dem OnChange Ereignis geht das ja ganz einfach, aber da habe ich doch als erstes angesetzt. Ich frage mich warum bin ich blos auf die Idee mit dem keypress-Ereignis gekommen ? Danke für den Tip. Dass der Suchen-Block in eine eigene Routine kommt ist klar, war ja nur zum testen hier mit drin, ich brauch das ja für die anderen Eingabefelder auch noch. |
Re: Editbox mit Onlinesuche
Noch ein kleines Problem hierbei, wie komme ich aus der EditBox mit Return raus ins nächste Feld anstatt nur mit Tab ?
|
Re: Editbox mit Onlinesuche
Suche mal nach
![]() |
Re: Editbox mit Onlinesuche
Delphi-Quellcode:
und
Edit1.SetFocus;
![]() (obwohl normalerweise: Neue Frage, neuer Thread ;) ) |
Re: Editbox mit Onlinesuche
Editx.setfocus ist schon ganz prima, aber was wenn ich die Tabulatorreihenfolge benutzen möchte die ich im Formular eingestellt habe.
Sonst springt er mir bei Tab ja woanders hin als bei Return oder ich muss die Tabreihenfolge im Objectinspector und im Quelltext verändern, wenn sich was ändert. Ich dachte mehr an eine Lösung dass ich vk_return abfrage und in vk_tab umsetze, aber der neue key Inhalt wird in der keypressroutine ja nicht ausgeführt. |
Re: Editbox mit Onlinesuche
Wie so oft, muss man die Suche nur mit den richtigen Begriffen füttern, Und in diesem Fall sind sie geradezu trivial:
![]() |
Re: Editbox mit Onlinesuche
Super Luckie du hast es wieder mal genau getroffen.
Perform(WM_NextDlgCtl, 0, 0); Deine Tips sind immer wieder Gold wert. Übrigens ich bin ein großer Fan von Dir. Deine Tips sind immer genial und ich habe noch nicht gelesen, dass Du mal unwirsch oder agressiv geworden bist. Deine Webseite find ich auch prima mit all den Beispielen. Mit dem finden der Suchwörter hab ich immer etwas Probleme, ich hatte nach return und edit gesucht. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:10 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