unit unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, FGL,
SynEdit, SynEditMarkupSelection, SynEditPointClasses, SynEditMarkup;
type
{ TSynEditSelectionList }
TSynEditSelectionList=specialize TFPGObjectList<TSynEditSelection>;
{ TSynEdit }
TSynEdit = class(SynEdit.TSynEdit)
private
aMarkupManager: TSynEditMarkupManager;
Blocks : TSynEditSelectionList;
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
procedure SetColors(const StartPoint, EndPoint : TPoint; const ForegroundColor, BackgroundColor, BorderColor : TColor);
end;
{ TForm1 }
TForm1 = class(TForm)
SynEdit: TSynEdit;
procedure FormCreate(Sender: TObject);
private
end;
var
Form1: TForm1;
implementation
{ TSynEdit }
constructor TSynEdit.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
aMarkupManager := TSynEditMarkupManager(MarkupMgr);
Blocks:=TSynEditSelectionList.Create;
end;
destructor TSynEdit.Destroy;
begin
Blocks.Free;
inherited Destroy;
end;
procedure TSynEdit.SetColors(const StartPoint, EndPoint: TPoint; const ForegroundColor, BackgroundColor, BorderColor: TColor);
var
TmpBlock : TSynEditSelection;
TmpMarkup : TSynEditMarkupSelection;
begin
TmpBlock:=TSynEditSelection.Create(ViewedTextBuffer,False);
with TmpBlock do
begin
InvalidateLinesMethod:=@InvalidateLines;
StartLineBytePos:=StartPoint;
EndLineBytePos:=EndPoint;
end;
TmpMarkup:=TSynEditMarkupSelection.Create(self,TmpBlock);
with TmpMarkup do
begin
MarkupInfo.FrameColor:=BorderColor;
MarkupInfo.Background:=BackgroundColor;
MarkupInfo.Foreground:=ForegroundColor;
Enabled:=True;
end;
aMarkupManager.AddMarkUp(TmpMarkup);
Blocks.Add(TmpBlock);
end;
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
SynEdit.Lines.Add('012345678901234567890123456789');
SynEdit.Lines.Add('012345678901234567890123456789');
SynEdit.Lines.Add('012345678901234567890123456789');
SynEdit.SetColors(Point(5,1),Point(8,1),clBlue,clGray,clRed);
end;
end.
end;