![]() |
Eingabefeld mit automatik gesucht
Hallo Zusammen,
es gibt doch in manchen Programmen solche Eingabefelder, die sich anfangen selbst auszufüllen, wen man Text eingibt - ich hoffe, daß war jetzt nicht zu blöd erklärt. Gibt's sowas als Komponente, oder wie heißen die überhaupt, damit ich mal was vernünftiges finde? ;-) Vielleicht versuch ich's nochmal mit der Erklärung was ich suche. Wenn ich in ein Feld bereits Bern Berlin Besum eingegeben habe, möchte ich, daß bei eingabe von "Be" zunächst der Rest des Feldes mit, sagen wir, "Bern" ausgefüllt wird, und wenn ich dann bis zum "Berl" weiterschreibe, wird "Berlin" drauß. Wo ich die Werte hernehme, ist nicht mein Problem, aber ich scheitere daran, den, vorgeschlagenen, Rest zu markieren, und zwar so, daß trotzdem noch alle anderen Tasten wie "Backspace" und co. korrekt funktionieren. Für 'nen Tipp wäre ich sehr dankbar. Freundliche Grüße Marco |
AW: Eingabefeld mit automatik gesucht
"MRU Edit" bzw. "MRU Combobox" nennt sich sowas...
|
AW: Eingabefeld mit automatik gesucht
Etwas zum Fertigbasteln:
![]() |
AW: Eingabefeld mit automatik gesucht
Zitat:
|
AW: Eingabefeld mit automatik gesucht
Hallo zusammen,
Erstmal herzlichen Dank. Meine Güte, heute morgen galt für mich: warum einfach, wenn's auch umständlich geht. ;-) Es ist erstaunlich, auf welche Sachen man manchmal nicht kommt - na ja, dafür hab ich ja euch! Die Lösung häng ich unten an, sie tut für mich genau, was sie soll. Viele Grüße Marco
Delphi-Quellcode:
unit main;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; procedure FormCreate(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private-Deklarationen } eingabe: string; // was bisher wirklich eingegeben wurde... vorschlaege: TStringList; // ist natürlich nur für's Demo. Die Liste enthält die Vorschläge, die eingefügt werden können. function wortvorschlag (s: string): string; // sucht aus der Vorschlagsliste den wortvorschlag raus. procedure ErstelleVorschlag (var key: char; e: TEdit); // die Keypress-funktionalität ausgelagert, damit's für mehrere Felder verwendet werden kann. public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} function TForm1.wortvorschlag (s: string): string; var i: integer; begin result := ''; // initial s := UpperCase (s); // auf Groß-/Kleinschreibung wird nicht geprüft i := 0; while (i < vorschlaege.count) and (pos (s, UpperCase (vorschlaege[i])) <> 1) do i := i + 1; if i < vorschlaege.count then // Übereinstimmung gefunden result := vorschlaege [i]; end; procedure TForm1.FormCreate(Sender: TObject); begin eingabe := ''; vorschlaege := TStringList.Create; with vorschlaege do begin Add ('Besum'); Add ('Bern'); Add ('Berlin'); end; end; procedure TForm1.ErstelleVorschlag (var key: char; e: TEdit); var v: string; begin case key of #8: // Backspace begin if length (eingabe) > 0 then eingabe := copy (eingabe, 1, length(eingabe)-1); // letztes Zeichen weg! edit1.Text := eingabe; edit1.selStart := length (edit1.text); // Cursor ans Ende edit1.selLength := 0; end else // alle anderen Zeichen begin eingabe := eingabe + key; v := wortvorschlag (eingabe); if v <> '' then // Wortvorschlag gefunden, bei dem der Anfang von Eingabe und Vorschlag übereinstimmen begin edit1.text := v; edit1.SelStart := length (eingabe); // Markierung beginnt hinter der eigentlichen Eingabe edit1.selLength := length (edit1.text) - length (eingabe); // der vorgeschlagene Rest wird markiert end else begin edit1.text := eingabe; edit1.selStart := length (edit1.text); edit1.selLength := 0; end; end; end; key := #0; // die Taste soll ja nicht doppelt genommen werden end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin ErstelleVorschlag (key, (sender as TEdit)); end; end. |
AW: Eingabefeld mit automatik gesucht
Zitat:
Delphi-Quellcode:
Jetzt starten und in die Combobox ein B eingeben.
procedure TForm1.FormCreate(Sender: TObject);
begin ComboBox1.AutoComplete := True; //ist ja sowieso default ComboBox1.Items.Add('Bern'); ComboBox1.Items.Add('Berlin'); ComboBox1.Items.Add('Besum'); end; Oder brauchst du es für TEdit? |
AW: Eingabefeld mit automatik gesucht
Ich packe alle möglichen Ergebnisse in eine StringList. Beim Edit onKeyUp
Delphi-Quellcode:
Und im onKeyDown
{$IFDEF MsWindows}
TEdit(sender).Text := UpperCase(Copy(TEdit(sender).Text,1,1))+LowerCase(Copy(TEdit(sender).Text,2,Length(TEdit(sender).Text))); if bAutoComplete then for I := 0 to slNationalitaet.Count - 1 do begin with TEdit(sender) do begin if (Text = '') or (LowerCase(slNationalitaet[I]) = LowerCase(Text)) then Exit; if StrLComp(PChar(LowerCase(slNationalitaet[I])), PChar(LowerCase(Text)), Length(Text)) = 0 then begin StartPos := Length(Text); Text := Text + Copy(slNationalitaet[I], StartPos + 1, Length(slNationalitaet[I])); SelStart := StartPos; SelLength := Length(Text) - StartPos; Exit; end; end; end; {$ENDIF}
Delphi-Quellcode:
{$IFDEF MsWindows} if Key = vk_Back then bAutoComplete := false else bAutoComplete := true; {$ENDIF} |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 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