Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подсветка в richedite [Delphi, Windows]


DJ_UZer ©   (2008-03-14 22:21:00) 

Извенте, не подскажите, как сделать в ричедите, можно сделать синтаксическую подсветку?


Германн   (2008-03-15 02:24:00) [1]


> DJ_UZer ©   (14.03.08 22:21)
>
> Извенте, не подскажите, как сделать в ричедите, можно сделать
> синтаксическую подсветку?
>

"если собираешься делать какой-нить редактор с расцветкой в зависимости от синтаксиса, советую не мучаться с ричедитом, а использовать SynEdit-компонент"
(с) Яндекс
http://www.torry.net/quicksearchd.php?String=SynEdit&Title=Yes


No_Dead   (2008-03-15 02:05:00) [2]

> [4] DJ_UZer ©   (15.03.08 01:54)
> Я смотрел, а как связать, и при этом чтобы при вводе?


function TForm1.CheckList(InString: string): boolean;
const TheList: array[1㐁] of string = ('begin', 'or', 'end','end.',
'end;', 'then', 'var', 'for', 'do', 'if', 'to', 'string', 'while');
var X: integer;
begin
 Result := false;
 X := 1;
 InString := StringReplace(InString, ' ', '',[rfReplaceAll]);
 InString := StringReplace(InString, #$A, '',[rfReplaceAll]);
 InString := StringReplace(InString, #$D, '',[rfReplaceAll]);
 while X < High(TheList) + 1 do
 if TheList[X] = lowercase(InString) then
 begin
   Result := true;
   X := High(TheList) + 1;
 end
 else inc(X);
end;

function SearchFor(WorkSpace, Search: string; Start: integer): integer;
var Temp: string;
begin
 Temp := copy(WorkSpace, Start, length(WorkSpace));
 Result := pos(Search, Temp);
end;

procedure TForm1.HighLight;
var WStart, WEnd, WEnd2: integer;
 WorkSpace, SWord: string;
begin
 WStart  :=  1;
 WEnd  :=  1;
 with  RichEdit1 do
 begin
   WorkSpace  :=  Text + ' ' + #$D#$A;
   while WEnd > 0 do
   begin
     WEnd := SearchFor(WorkSpace, ' ', WStart);
     WEnd2 := SearchFor(WorkSpace, #$A, WStart);
     if WEnd2 < WEnd then WEnd := WEnd2;
     SWord := copy(WorkSpace, WStart, WEnd — 1);
     if (SWord ' ') and (SWord '') then
       if CheckList(SWord) then
       begin
         SelStart  := WStart — 1;
         SelLength := length(SWord);
         SelAttributes.Style := [fsBOLD];
         SelStart := WStart + length(SWord) + 1;
         SelAttributes.Style := [];
       end;
     WStart := WStart + WEnd;
   end;
   SelStart := length(Text);
   SetFocus;
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);

begin
if OpenDialog1.Execute then
 begin
   RichEdit1.Lines.LoadFromFile(OpenDialog1.FileName);
   HighLight;
 end;

end;

procedure TForm1.RichEdit1KeyUp(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var WEnd, WStart, BCount: integer;
 Mark: string;
begin
 if (ssCtrl in Shift) and (Key = ord('V')) then Button2Click(Self);
 if (Key = VK_Return) or (Key = VK_Back) or (Key = VK_Space) then
 begin
   if RichEdit1.SelStart > 1 then
   begin
     WStart := 0;
     WEnd := RichEdit1.SelStart;
     BCount := WEnd — 1;
     while BCount 0 do
     begin
       Mark := copy(RichEdit1.Text, BCount, 1);
       if (Mark = ' ') or (Mark = #$A) then
       begin
         WStart := BCount;
         BCount := 1;
       end;
       dec(BCount);
     end;
     RichEdit1.SelStart := WEnd — (WEnd — WStart);
     RichEdit1.SelLength := WEnd — WStart;
     if CheckList(RichEdit1.SelText) then
       RichEdit1.SelAttributes.Style := [fsBold]
     else RichEdit1.SelAttributes.Style := [];
     RichEdit1.SelStart := WEnd;
     RichEdit1.SelAttributes.Style := [];
   end;
 end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 RichEdit1.PasteFromClipboard;
 HighLight;
end;
end.



вот что-то в этом роде. Все о чем говорил Johnmen, здесь реализованна некоторая часть (из какого-то faq © чей не знаю:(), а остальное самому думать и не лениться!!!
%>


DJ_UZer   (2008-03-15 01:54:00) [3]

Я смотрел, а как связать, и при этом чтобы при вводе?


Johnmen   (2008-03-15 01:38:00) [4]

см. SelStart, SelLength, SelAttributes


DJ_UZer   (2008-03-15 01:36:00) [5]

ну что бы какой то определенный текст каким то образом выделялся, например текст который находиться в []. Вот мне то и надо реализовать что бы как то выделялся текст находящийся в квадратных скобках.. (жирным или определенным цветом) ..


Johnmen   (2008-03-15 01:31:00) [6]

Что такое "синтаксическая" подсветка?
И чем она отличается от обычной?


Наверх

Титульная страница Поиск, карта сайта Написать письмо