Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.04.13;
Скачать: CL | DM;

Вниз

Подсветка в richedite   Найти похожие ветки 

 
DJ_UZer ©   (2008-03-14 22:21) [0]

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


 
Johnmen ©   (2008-03-15 01:31) [1]

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


 
DJ_UZer ©   (2008-03-15 01:36) [2]

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


 
Johnmen ©   (2008-03-15 01:38) [3]

см. SelStart, SelLength, SelAttributes


 
DJ_UZer ©   (2008-03-15 01:54) [4]

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


 
No_Dead ©   (2008-03-15 02:05) [5]

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


function TForm1.CheckList(InString: string): boolean;
const TheList: array[1&#13313] 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 &#151; 1);
     if (SWord <> " ") and (SWord <>"") then
       if CheckList(SWord) then
       begin
         SelStart  := WStart &#151; 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 &#151; 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 &#151; (WEnd &#151; WStart);
     RichEdit1.SelLength := WEnd &#151; 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 © чей не знаю:(), а остальное самому думать и не лениться!!!
%>


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2008.04.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.007 c
4-1186753790
Alkid
2007-08-10 17:49
2008.04.13
OpenNtsmSession + 64-bit Windows XP


15-1204384413
senius
2008-03-01 18:13
2008.04.13
Фотографии


2-1205626460
alert2006
2008-03-16 03:14
2008.04.13
Заменить в файле


2-1205829385
Sonia
2008-03-18 11:36
2008.04.13
Файловая переменная, как параметр процедуры


6-1183643255
aDLER
2007-07-05 17:47
2008.04.13
Перехват траффика приложения





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский