Текущий архив: 2004.06.27;
Скачать: CL | DM;
ВнизПодсветка синтаксиса Найти похожие ветки
← →
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;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.034 c