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

Вниз

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

 
Homakk   (2006-04-01 08:59) [0]

Я хочу написать html редактор, но не могу реализовать подсветку синтаксиса как это сделать, дайте мне какую нибудь ссылку.


 
Dmitrij_K   (2006-04-01 09:54) [1]

SynEdit


 
Homakk   (2006-04-01 10:27) [2]

А по подробнее можно???


 
Palladin ©   (2006-04-01 11:32) [3]

www.google.ru


 
Cash ©   (2006-04-01 11:41) [4]

Думаю, эта ссылка надежнее всех! ;)
http://delphimaster.net/view/1-1142103774/


 
Старик   (2006-04-01 13:41) [5]

Можно и через простой RichEdit:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics,
 Controls, Forms, Dialogs, StdCtrls, ComCtrls;

type
 TForm1 = class(TForm)
   RichEdit1: TRichEdit;
   Button1: TButton;
   OpenDialog1: TOpenDialog;
   Button2: TButton;
   procedure RichEdit1KeyUp(Sender: TObject; var Key: Word;
     Shift: TShiftState);
   procedure HighLight;
   function CheckList(InString: string): boolean;
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.CheckList(InString: string): boolean;
const TheList: array[1..13] 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;

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;

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.Button2Click(Sender: TObject);
begin
 RichEdit1.PasteFromClipboard;
 HighLight;
end;

end.


 
Cash ©   (2006-04-01 13:43) [6]

Старик   (01.04.06 13:41) [5]:
А я так тоже делал, пока на MwEdit не наткнулся.
"Аппаратными" методами оно как то сподручнее получается. :)


 
Старик   (2006-04-01 13:56) [7]

Cash:
А чегой-то за зверь такой - MwEdit? Где его ловить и чем кормить? :)


 
Cash ©   (2006-04-01 23:21) [8]

Старик   (01.04.06 13:56) [7]:
Гляди по ссылке "Cash ©   (01.04.06 11:41) [4]"



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

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

Наверх




Память: 0.49 MB
Время: 0.027 c
4-1138459145
maxim161
2006-01-28 17:39
2006.04.16
Отправка сообщений процессу


2-1144224832
Алексей1
2006-04-05 12:13
2006.04.16
Установка ориентации альбомной при печати.


4-1138572095
Vitaly Grobshtein
2006-01-30 01:01
2006.04.16
Управление фотоаппаратом


2-1144224140
vegarulez
2006-04-05 12:02
2006.04.16
Как сделать, чтобы в bitmap button`a добавлялся i-ый файл?


2-1143702143
oleon
2006-03-30 11:02
2006.04.16
Не ловится WM_SYSCOMMAND. Помогите.