mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-17 07:22:58 +02:00
147 lines
3.3 KiB
ObjectPascal
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.
|
|
|