Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.04.13;
Скачать: [xml.tar.bz2];

Вниз

Подсветка в 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
2-1205506618
Sesh
2008-03-14 17:56
2008.04.13
Компонент


15-1204321591
Leonid Troyanovsky
2008-03-01 00:46
2008.04.13
Сегодня 29 февраля 2008 г.


15-1203967236
@!!ex
2008-02-25 22:20
2008.04.13
Программирование на Delphi на приставки


2-1205525076
Malik
2008-03-14 23:04
2008.04.13
Lnk-ярлык определение его параметров


2-1205522854
fics
2008-03-14 22:27
2008.04.13
TreeView





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский