есть задание , сделать компонент NewEdit с автозаполнением. проблема заключается в следующем. немогу написать алгоритм выбора слов из списка. на данный момент есть следуюшие проблемы 1) нет возмодности вписывать короткие слова 2-3 буквы которых нет в списке ( на даннсы момент если я хочу написать "слово" "ал" , а в списке есть "алексей" у меня это не получится) 2) при записи 2х по слов "Алексей" и "Александр" последовательно при дальнейшем "автозаполнении" выводиться будет всегда "алексей" вобшем, алгоритм выбора из списка должен "выбирать" до потери фокуса и при этом давать возможность вписать чтото , не мешая . вот что у меня есть на данный момент
| Код | unit NewEdit;
interface
uses SysUtils, Classes, Controls, StdCtrls;
type TNewEdit = class(TEdit) private a:array of string; i:integer; protected { Protected declarations } public constructor Create(AOwner:TComponent); override; destructor Destroy; override; procedure Change; override; procedure Add(S:string); published { Published declarations } end;
procedure Register;
implementation
procedure Register; begin RegisterComponents('Standard', [TNewEdit]); end;
{ TNewEdit }
procedure TNewEdit.Add(S: string); //var f:textfile; begin a[i]:=s; inc(i); //assignfile(f,'1.txt'); //Append(f); //writeln(f,a[i]); //close(f); end;
procedure TNewEdit.Change; var j,i:integer; begin inherited Change;
for i:=0 to 99 do for j:=1 to length(a[i]) do begin if text=a[i][1] then begin text:=a[i]; selstart:=1; SelLength:=length(a[i])-1; SetFocus; end; if text=a[i][1]+a[i][2] then begin text:=a[i]; selstart:=2; SelLength:=length(a[i])-2; SetFocus; end; if text=a[i][1]+a[i][2]+a[i][3] then begin text:=a[i];selstart:=3; SelLength:=length(a[i])-3; SetFocus; end; if text=a[i][1]+a[i][2]+a[i][3]+a[i][4] then begin text:=a[i];selstart:=4; SelLength:=length(a[i])-4; SetFocus; end; if text=a[i][1]+a[i][2]+a[i][3]+a[i][4]+a[i][5] then begin text:=a[i];selstart:=5; SelLength:=length(a[i])-5; SetFocus; end; end;
end;
constructor TNewEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); AutoSize:=false; Height:=30; Width:=200; i:=0; setlength(a,100); AutoSelect:=false; end;
destructor TNewEdit.Destroy; begin inherited; end;
end.
|
|