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

Вниз

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

 
Hyboid   (2004-06-06 09:58) [0]

Например, как реализовать в RichEdit динамически подсвечиваемые ключевые слова. Есть ли какая-нибудь документация по этому вопросу?


 
KSergey ©   (2004-06-06 12:07) [1]

На торри взять любой подходящий компонент (synEdit, например).
Если именно RichEdit хочется - используем св-ства SelLength, SelStart, SelAttributes.


 
Gero ©   (2004-06-06 12:12) [2]

RichEdit для подсветки синтаксиса совсем не подходит.
Лучше взять компонент, специально для этого разработанный:
http://synedit.sourceforge.net


 
parovoZZ ©   (2004-06-06 20:23) [3]

Хнык, этот компонент не идёт в делфи 7. Ругается на отсутствие файла DsgnIntf.dcu. Можно как-то исправить это недоразумение?


 
Gero ©   (2004-06-06 21:13) [4]


> parovoZZ ©   (06.06.04 20:23)

Хм.. вроде нормально все было.
Вы точно для своей версии dpk выбрали?
Тогда исправьте DsgnIntf на DesignIntf.


 
AlexG ©   (2004-06-06 21:34) [5]


> Hyboid   (06.06.04 09:58)

Ты сам хочешь её сделать или тебе компонентов достаточно?


 
parovoZZ ©   (2004-06-06 23:47) [6]


> Хм.. вроде нормально все было.
> Вы точно для своей версии dpk выбрали?
> Тогда исправьте DsgnIntf на DesignIntf.

В том то и дело, что только для 6-ой версии, а для 7-ой нема


 
Gero ©   (2004-06-06 23:53) [7]

Для шестой должно подойти, по крайней мере проблемы с DsgnIntf возникнуть не должно.


 
parovoZZ ©   (2004-06-07 04:19) [8]

Вот, ура! Скачал что-то новое, там есть поддержка D7. Но что-то никак не въехать, как с этим работать? Демки при запуске очень сильно ругаются, не пойму, что им надо?


 
TUser ©   (2004-06-07 06:35) [9]

Так чего же "ура"? Скачал что-то крутое, правда, оно не работает. Лучше уж DesignIntf написать.


 
panov ©   (2004-06-07 09:30) [10]

Чем это TRichEdit не подходит?


 
Gero ©   (2004-06-07 16:44) [11]


> panov ©   (07.06.04 09:30)
> Чем это TRichEdit не подходит?

А чем он подходит?
Покажите мне пример RichEdit"а с нормальной подсветкой синтаксиса - и я признаю, что был не прав.
Иначе - это пустословие.


 
panov ©   (2004-06-09 12:24) [12]

>Gero ©   (07.06.04 16:44) [11]

Покажите мне пример RichEdit"а с нормальной подсветкой синтаксиса - и я признаю, что был не прав.
Иначе - это пустословие.


Вот это вот - демагогия, потому что требование написать код не совсем корретно в данном случае. Достаточно того, что нет никаких принципиальных возражений, почему нельзя использовать для этого TRichEdit.

Но раз уж так необходим код, привожу пример, который написал минут за 40. Естественно, не оптимизированый, возможно с глюками.
Но ведь дальше дело техники, верно?

unit Unit1;

interface

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

type
 TDelim= Set of char;

 TForm1 = class(TForm)
   re: TRichEdit;
   od: TOpenDialog;
   ToolBar1: TToolBar;
   SpeedButton1: TSpeedButton;
   procedure SpeedButton1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 Delims: TDelim=[" ","[","]","(",")",":",";",".",#13,#10,#09,"="];
implementation

{$R *.dfm}

procedure SetBold(re: TRichEdit;const aPos,aLen: Integer);
begin
 re.SelStart := aPos;
 re.SelLength := aLen;
 re.SelAttributes.Color := clNavy;
 re.SelAttributes.Style := [fsBold];
 re.SelLength := 0;
end;

function isTags(const aSrc: String;aPos: Integer): Integer;
const aTagsWord: array[0..25] of String=(
    "TYPE","CONST","FUNCTION","STRING","WHILE",
    "VAR","INTEGER","PROCEDURE","BEGIN","END",
    "CLASS","INITIALIZATION","FINALIZATION","UNIT","IMPLEMENTATION",
    "STRING","TRY","FINALLY","EXCEPT","FOR",
    "IF","THEN","ELSE","PROGRAM","USES",
    "CASE"
    );
var
 i: Integer;
 s: String;
 LenTag: Integer;
 LenASrc: Integer;
begin
 Result := 0;
 LenASrc := Length(aSrc);
 for i := 0 to High(aTagsWord) do
 begin
   LenTag := Length(aTagsWord[i]);
   s :=UpperCase(Copy(aSrc,aPos,LenTag));
   if s=aTagsWord[i] then
   begin
     if LenASrc>=aPos+LenTag then
     begin
       if aSrc[aPos+LenTag] in Delims then
       begin
         if aPos>1 then
         begin
           if aSrc[aPos-1] in Delims then
           begin
             Result := LenTag;
             Exit;
           end
           else continue;
         end
         else
         begin
           Result := LenTag;
           Exit;
         end;
       end;
     end;
   end;
 end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
 i: Integer;
 Len,LenStr: Integer;
 s: String;
begin
 if od.Execute then re.Lines.LoadFromFile(od.FileName);
 i := 1;
 s := re.Lines.Text;
 LenStr := Length(s);
 while i<=LenStr do
 begin
   if (s[i] = #13) or (s[i] = #10) then
   begin
     Inc(i);
     continue;
   end;
   Len := isTags(s,i);
   if Len<>0 then
   begin
     SetBold(re,i-1,Len);
     Inc(i,Len);
   end
   else Inc(i);
 end;
end;

end.


 
Gero ©   (2004-06-09 12:40) [13]


> panov ©   (09.06.04 12:24)

Это конечно понятно.
Под словами "нормальная подсветка синтаксиса" я имел ввиду подсветку в процессе набора текста.
Я говорю это, потому что однажды пытался сделать что-то подобное на RichEdit"e.
Потратил кучу времени и нервов и забросил это дело к чертовой бабушке.
Я не спорю, может и возможно с использованием RichEdit сделать подсветку ничуть ни хуже дельфийской.
Но стоит ли так мучаться, вот в чем вопрос?


 
panov ©   (2004-06-09 12:45) [14]

>Gero ©   (09.06.04 12:40) [13]

подсветку в процессе набора текста.

т.е. в тот момент, когда, введено ключевое слово, оно должно пометиться, например, жирным шрифтом?


 
Gero ©   (2004-06-09 13:11) [15]


> panov ©   (09.06.04 12:45)

Ну да.
И в тот момент, когда у слова begin, например, убрали какую-либо букву, оно должно стать "нормальным".


 
nikkie ©   (2004-06-09 15:15) [16]

>Достаточно того, что нет никаких принципиальных возражений, почему нельзя использовать для этого TRichEdit.
есть такие возражения. для подсветки синтаксиса кода нужен текстовое поле, которое может отображать отдельные слова используя другие аттрибуты шрифта. RichEdit-же дает пользователю вводить текст c другими аттрибутами. поэтому и проблематично реализовать
>подсветку в процессе набора текста
представь, что пользователь копирует кусок текста с форматированием из wordpad/word в редактор кода на основе RichEdit. а если в этом куске еще есть и списки? теоретически, наверное, возможно подпереть все подобные места, но зачем устраивать лишние сложности?


 
panov ©   (2004-06-09 15:22) [17]

RichEdit-же дает пользователю вводить текст c другими аттрибутами.
пользователь копирует кусок текста с форматированием из wordpad/word


Ну это же несерьезно-)



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

Форум: "Основная";
Текущий архив: 2004.06.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.025 c
14-1086868231
Поручик
2004-06-10 15:50
2004.06.27
Откуда берутся хорошие девелоперы


1-1086845576
sergt
2004-06-10 09:32
2004.06.27
DateTimePicker


14-1086870125
*Pavel
2004-06-10 16:22
2004.06.27
Принтеры штрихкодов


14-1086891628
DeadMeat
2004-06-10 22:20
2004.06.27
Modem


1-1087140161
lena19
2004-06-13 19:22
2004.06.27
проблема с указателями или access violation по адресу xxxxxxxxxxx





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