:: MVP ::
|
|
:: RSS ::
|
|
|
Как удалить символ?
uses
SynEditKeyCmds;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Удаление символа слева от каретки (backspace key)
SynEdit1.CommandProcessor(ecDeleteLastChar, #0, nil);
// Удаление символа справа от каретки (delete key)
SynEdit1.CommandProcessor(ecDeleteChar, #0, nil);
SynEdit1.SetFocus;
end;
|
Как удалить слово?
uses
SynEditKeyCmds;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Удаление от позиции каретки до конца слова (включая пробелы)
SynEdit1.CommandProcessor(ecDeleteWord, #0, nil);
// Удаление от позиции каретки до начала слова (включая пробелы)
SynEdit1.CommandProcessor(ecDeleteLastWord, #0, nil);
SynEdit1.SetFocus;
end;
|
Как удалить строку (часть строки)?
uses
SynEditKeyCmds;
procedure TForm1.Button1Click(Sender: TObject);
begin
// Удаление от позиции каретки до начала строки
SynEdit1.CommandProcessor(ecDeleteBOL, #0, nil);
// Удаление от позиции каретки до конца строки
SynEdit1.CommandProcessor(ecDeleteEOL, #0, nil);
// Удаление всей строки
SynEdit1.CommandProcessor(ecDeleteLine, #0, nil);
SynEdit1.SetFocus;
end;
|
Как получить префикс слова (значение от начала слова до каретки)?
// Способ первый
type
TSynEditHelper = class helper for TSynEdit
public
function GetWordPrefix(XY: TBufferCoord): UnicodeString;
end;
function TSynEditHelper.GetWordPrefix(XY: TBufferCoord): UnicodeString;
var
Line: UnicodeString;
Start, Stop: Integer;
begin
Result := '';
if (XY.Line >= 1) and (XY.Line <= Lines.Count) then
begin
Line := Lines[XY.Line-1];
if (Length(Line) > 0) and ((XY.Char >= Low(Line)) and (XY.Char <= High(Line)+1)) and IsIdentChar(Line[XY.Char-1]) then
begin
Start := XY.Char;
while (Start > Low(Line)) and IsIdentChar(Line[Start-1]) do
Dec(Start);
Stop := XY.Char;
Result := Copy(Line, Start, Stop - Start);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(SynEdit1.GetWordPrefix(SynEdit1.CaretXY));
end;
// Способ второй
type
TSynEditHelper = class helper for TSynEdit
public
function GetWordPrefix(XY: TBufferCoord): UnicodeString;
end;
function TSynEditHelper.GetWordPrefix(XY: TBufferCoord): UnicodeString;
var
i: Integer;
s: UnicodeString;
begin
Result := '';
s := LineText;
i := CaretX-1;
if i <= Length(s) then
begin
while (i > 0) and (s[i] > #32) and not Self.IsWordBreakChar(s[i]) do
Dec(i);
Result := Copy(s, i+1, CaretX-i-1);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(SynEdit1.GetWordPrefix(SynEdit1.CaretXY));
end;
|
Как получить суффикс слова (значение от каретки до конца слова)?
// Способ первый
type
TSynEditHelper = class helper for TSynEdit
public
function GetWordSuffix(XY: TBufferCoord): UnicodeString;
end;
function TSynEditHelper.GetWordSuffix(XY: TBufferCoord): UnicodeString;
var
Line: UnicodeString;
Start, Stop: Integer;
begin
Result := '';
if (XY.Line >= 1) and (XY.Line <= Lines.Count) then
begin
Line := Lines[XY.Line-1];
if (Length(Line) > 0) and ((XY.Char >= Low(Line)) and (XY.Char <= High(Line))) and IsIdentChar(Line[XY.Char]) then
begin
Start := XY.Char;
Stop := XY.Char + 1;
while (Stop <= High(Line)) and IsIdentChar(Line[Stop]) do
Inc(Stop);
Result := Copy(Line, Start, Stop - Start);
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(SynEdit1.GetWordSuffix(SynEdit1.CaretXY));
end;
// Способ второй
type
TSynEditHelper = class helper for TSynEdit
public
function GetWordSuffix(XY: TBufferCoord): UnicodeString;
end;
function TSynEditHelper.GetWordSuffix(XY: TBufferCoord): UnicodeString;
var
s: UnicodeString;
i: Integer;
begin
Result := '';
s := LineText;
i := CaretX;
if i <= Length(s) then
begin
while (i <= Length(s)) and (s[i] > #32) and not Self.IsWordBreakChar(s[i]) do
Inc(i);
Result := Copy(s, CaretX, i+1);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(SynEdit1.GetWordSuffix(SynEdit1.CaretXY));
end;
|
Как назначить горячие клавиши некоторым функциям редактора?
procedure TForm1.FormCreate(Sender: TObject);
begin
SynEdit1.AddKey(ecUpperCase, Word('U'), [ssCtrl, ssAlt], 0, []);
SynEdit1.AddKey(ecLowerCase, Word('L'), [ssCtrl, ssAlt], 0, []);
SynEdit1.AddKey(ecTitleCase, Word('T'), [ssCtrl, ssAlt], 0, []);
end;
|
Как вручную открыть помошник кода?
type
TSynEditHelper = class helper for TSynEdit
public
function GetWordPrefix(XY: TBufferCoord): UnicodeString;
end;
TForm1 = class(TForm)
SynEdit1: TSynEdit;
SynCompletionProposal1: TSynCompletionProposal;
{...}
end;
procedure TForm1.Button1Click(Sender: TObject);
var
APos: TPoint;
begin
APos := SynEdit1.ClientToScreen(SynEdit1.RowColumnToPixels(SynEdit1.DisplayXY));
SynCompletionProposal1.Form.CurrentEditor := SynEdit1;
SynCompletionProposal1.Execute(SynEdit1.GetWordPrefix(SynEdit1.CaretXY), APos.X, APos.Y + SynEdit1.LineHeight);
end;
function TSynEditHelper.GetWordPrefix(XY: TBufferCoord): UnicodeString;
var
i: Integer;
s: UnicodeString;
begin
Result := '';
s := LineText;
i := CaretX-1;
if i <= Length(s) then
begin
while (i > 0) and (s[i] > #32) and not Self.IsWordBreakChar(s[i]) do
Dec(i);
Result := Copy(s, i+1, CaretX-i-1);
end;
end;
|
Как красиво стилизовать помошник кода?
procedure TForm1.FormCreate(Sender: TObject);
begin
SynCompletionProposal1.Columns.Add;
with SynCompletionProposal1.ItemList do
begin
Add('constructor \column{}\style{+B}Create\style{-B}(AOwner: TCustomSynEdit)');
Add('destructor \column{}\style{+B}\style{+I}Destroy\style{-I}\style{-B}');
Add('\color{$FF0000}function \column{}\style{+B}Add\style{-B}(Item: TSynEditMark): \color{clRed}Integer');
Add('procedure \column{}\style{+U}ClearLine\style{-U}(line: integer)');
Add('procedure \column{}\style{+S}Delete(Index: Integer)\style{-S}');
end;
SynCompletionProposal1.Options := SynCompletionProposal1.Options + [scoUsePrettyText];
end;
|
Как вручную вызвать функцию автозавершения кода по нажатию клавиши Tab?
type
TForm1 = class(TForm)
SynEdit1: TSynEdit;
SynAutoComplete1: TSynAutoComplete;
ApplicationEvents1: TApplicationEvents;
{...}
end;
{...}
implementation
{...}
procedure TForm1.FormCreate(Sender: TObject);
begin
SynAutoComplete1.LoadFromFile('AutoComplete.cfg');
// Содержимое AutoComplete.cfg примерно следующее:
// [for | оператор цикла for]
// for | := to do
// begin
// end;
end;
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
begin
case Msg.message of
WM_KEYDOWN:
if (ActiveControl = SynEdit1) and (Msg.wParam = VK_TAB) then
begin
SynAutoComplete1.Execute(SynEdit1);
Handled := True;
end;
end;
end;
|
Как узнать для какого языка включена подсветка в данный момент?
uses
{...,} SynHighlighterMulti;
procedure TForm1.Button1Click(Sender: TObject);
function GetLangName(AHighlighter: TSynCustomHighlighter): string;
begin
if AHighlighter <> nil then
begin
if AHighlighter is TSynMultiSyn then
Result := (AHighlighter as TSynMultiSyn).DefaultLanguageName // LanguageName, GetLanguageName
else
Result := AHighlighter.LanguageName; // GetLanguageName
end
else
Result := '';
end;
begin
ShowMessage(GetLangName(SynEdit1.Highlighter));
end;
|
При использовании материала - ссылка на сайт обязательна
|
|