// Wenn in ein
TEdit Text eingegeben wird, wird dieser Text anhand einer Liste
// automatisch komplettiert. Im Beispiel verwende ich dazu die Strings
einer
// Stringliste. Man kann natürlich auch die Items einer Listbox o.ä. nehmen.
// Die Breite des TEdit
(ClientWidth) muss
bei diesem Beispiel ausreichend
// für die Textbreite sein, und die Quelle muss alphabetisch geordnet
sein.
// Zusätzlich kann man mittels
mitSelection
bestimmen, ob ein gefundenes Wort
// uneingeschränkt gilt, oder selektiert zum Überschreiben angeboten
wird.
//
Beispiel (mit der unten angegebenen Liste):
// mitSelection = True
//
Eingabe "H" --> Haus
--> Eingabe "e" --> Herd
--> Eingabe "n" --> Hen
// mitSelection = False
//
Eingabe "H" --> Haus
--> Eingabe "e" --> Hause
--> Eingabe "n" --> Hausen
// Hier noch
ein weiteres Beispiel, das die Wirkungsweise
// verdeutlichen soll (mitSelection = True):
Eingabe: |
Ergebnis: |
T |
Test |
i |
Tisch |
s |
Tisch |
c |
Tisch |
h |
Tisch |
b |
Tischbein |
// Getestet mit D4 unter Win98
const
mitSelection: boolean = true;
ergaenzen: boolean = true;
var
sl: TStringlist;
procedure TForm1.FormCreate(Sender: TObject);
begin
sl := TStringlist.create;
sl.sorted := true;
sl.Duplicates := dupIgnore;
sl.add('Test');
sl.add('Hausmeister');
sl.add('Tisch');
sl.Add('Tischbein');
sl.add('Haus');
sl.add('Erde');
sl.add('Mensch Meyer');
sl.add('Computer');
sl.add('Erde');
sl.add('Herd');
// oder Loadfromfile o.ä.
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
sl.free;
end;
procedure TForm1.Edit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
var x, st: integer;
begin
if (key < 48) or not ergaenzen then exit;
st := length(TEdit(sender).text);
for x := 0 to sl.count - 1 do
if pos(TEdit(sender).text, sl.strings[x]) = 1 then begin
TEdit(sender).text := sl.strings[x];
if mitSelection then begin
TEdit(sender).selstart := st;
TEdit(sender).sellength := length(TEdit(sender).text) - st;
end else
TEdit(sender).selstart := length(TEdit(sender).text);
break;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
mitSelection := not mitSelection;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ergaenzen := not ergaenzen;
end;
|