lazarus/examples/SynEdit/Completion/unit1.pas

147 lines
3.3 KiB
ObjectPascal

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
SysUtils,
Forms, StdCtrls, ExtCtrls,
LazStringUtils,
SynEdit, SynCompletion;
type
{ TForm1 }
TForm1 = class(TForm)
chkSizeDrag: TCheckBox;
chkSearch: TCheckBox;
chkExec: TCheckBox;
Label1: TLabel;
Label2: TLabel;
Memo1: TMemo;
Memo2: TMemo;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Splitter1: TSplitter;
Splitter2: TSplitter;
SynAutoComplete1: TSynAutoComplete;
SynCompletion1: TSynCompletion;
SynEdit1: TSynEdit;
procedure chkExecChange(Sender: TObject);
procedure chkSearchChange(Sender: TObject);
procedure chkSizeDragChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Memo1Change(Sender: TObject);
procedure DoExecute(Sender: TObject);
procedure DoSearchPosition(var APosition: integer);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Memo1Change(Sender: TObject);
begin
SynAutoComplete1.AutoCompleteList := Memo1.Lines;
end;
procedure TForm1.DoExecute(Sender: TObject);
(* Filter the initial list, to match the pre-fix.
Depending on chkExec.Checked entries may be:
- filtered to match the pre-fix
- displayed always
This is called once, when the completion dropdown is initially shown
*)
procedure Add(s: String);
begin
if LazStartsText(SynCompletion1.CurrentString, s) then
SynCompletion1.ItemList.Add(s);
end;
begin
SynCompletion1.ItemList.Clear;
if chkExec.Checked then begin
Add('Personal Computer');
Add('Personal');
Add('Computer');
Add('Police Constable');
Add('Police');
Add('Constable');
end else begin
SynCompletion1.ItemList.Add('Personal Computer');
SynCompletion1.ItemList.Add('Personal');
SynCompletion1.ItemList.Add('Computer');
SynCompletion1.ItemList.Add('Police Constable');
SynCompletion1.ItemList.Add('Police');
SynCompletion1.ItemList.Add('Constable');
end;
end;
procedure TForm1.DoSearchPosition(var APosition: integer);
(* Filter the list, to match the pre-fix.
See TForm1.chkSearchChange, this event is removed, if filtering is not needed.
Only display entries that match the prefix.
APosition is the index, of the entry that will be selected.
This is called everytime the user changes the pre-fix, while the completion is already open
*)
procedure Add(s: String);
begin
if LazStartsText(SynCompletion1.CurrentString, s) then
SynCompletion1.ItemList.Add(s);
end;
begin
SynCompletion1.ItemList.Clear;
Add('Personal Computer');
Add('Personal');
Add('Computer');
Add('Police Constable');
Add('Police');
Add('Constable');
if SynCompletion1.ItemList.Count > 0 then
APosition := 0
else
APosition := -1;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1Change(nil);
end;
procedure TForm1.chkExecChange(Sender: TObject);
begin
SynEdit1.SetFocus;
end;
procedure TForm1.chkSearchChange(Sender: TObject);
begin
if chkSearch.Checked then
SynCompletion1.OnSearchPosition := @DoSearchPosition
else
SynCompletion1.OnSearchPosition := nil;
SynEdit1.SetFocus;
end;
procedure TForm1.chkSizeDragChange(Sender: TObject);
begin
SynCompletion1.ShowSizeDrag := chkSizeDrag.Checked;
end;
end.