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.