lazarus/examples/SynEdit/SynGutterMarks/unit1.pas

112 lines
2.7 KiB
ObjectPascal

unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Forms, Controls, ExtCtrls, StdCtrls, Spin,
SynEdit, SynEditTypes, SynEditMarks;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
chkMarkGutterAutoSize: TCheckBox;
chkDrawBookMarkFirst: TCheckBox;
chkBookMark: TCheckBox;
ImageList1: TImageList;
imgBookMarks: TImageList;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
spinMarkGutterWidth: TSpinEdit;
SpinLine: TSpinEdit;
spinImg: TSpinEdit;
SynEdit1: TSynEdit;
procedure Button1Click(Sender: TObject);
procedure chkDrawBookMarkFirstChange(Sender: TObject);
procedure chkBookMarkChange(Sender: TObject);
procedure chkMarkGutterAutoSizeChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure spinMarkGutterWidthChange(Sender: TObject);
procedure SynEdit1StatusChange(Sender: TObject; Changes: TSynStatusChanges);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.SynEdit1StatusChange(Sender: TObject; Changes: TSynStatusChanges);
begin
if scModified in Changes then SpinLine.MaxValue := SynEdit1.Lines.Count;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
m: TSynEditMark;
begin
if chkBookMark.Checked
then begin
SynEdit1.SetBookMark(spinImg.Value, 1, SpinLine.Value);
end
else begin
m := TSynEditMark.Create(SynEdit1);
m.Line := SpinLine.Value;
m.ImageList := ImageList1;
m.ImageIndex := spinImg.Value;
m.Visible := true;
SynEdit1.Marks.Add(m);
end;
end;
procedure TForm1.chkDrawBookMarkFirstChange(Sender: TObject);
begin
SynEdit1.BookMarkOptions.DrawBookmarksFirst := chkDrawBookMarkFirst.Checked;
end;
procedure TForm1.chkBookMarkChange(Sender: TObject);
begin
if chkBookMark.Checked
then spinImg.MaxValue := 9
else spinImg.MaxValue := 4;
end;
procedure TForm1.chkMarkGutterAutoSizeChange(Sender: TObject);
begin
SynEdit1.Gutter.MarksPart(0).AutoSize := chkMarkGutterAutoSize.Checked;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
(* SynEdit currently does not include own images for bookmarks.
If no images are given it will currently crash *)
SynEdit1.BookMarkOptions.BookmarkImages := imgBookMarks;
spinMarkGutterWidth.Value := SynEdit1.Gutter.MarksPart(0).Width;
chkMarkGutterAutoSize.Checked := SynEdit1.Gutter.MarksPart(0).AutoSize;
chkDrawBookMarkFirst.Checked := SynEdit1.BookMarkOptions.DrawBookmarksFirst;
end;
procedure TForm1.spinMarkGutterWidthChange(Sender: TObject);
begin
SynEdit1.Gutter.MarksPart(0).Width := spinMarkGutterWidth.Value;
end;
end.