Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 07.07.2009, 20:49   #1
unicode
Форумчанин
 
Аватар для unicode
 
Регистрация: 16.04.2009
Сообщений: 162
По умолчанию Подсветка синтаксиса в TMemo

Подскажите как реализовать подсветку синтаксиса в TMemo?
unicode вне форума
Старый 07.07.2009, 21:11   #2
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

НЕТ, только через написания своего компонета-потмка от TMemo, с собственной отрисовкой. Используйте лучше TRichEdit, TRichView, TSynEdit.
Alter вне форума
Старый 08.07.2009, 00:33   #3
Djem1991
Форумчанин
 
Аватар для Djem1991
 
Регистрация: 05.01.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от Alter Посмотреть сообщение
НЕТ, только через написания своего компонета-потмка от TMemo, с собственной отрисовкой. Используйте лучше TRichEdit, TRichView, TSynEdit.
TRichEdit, TRichView, TSynEdit - согласен,именно эти компоненты нада использовать,я использовал ричэдит... а через мэмо - никак.
В жизни нет reset'а, а жаль...
Djem1991 вне форума
Старый 08.07.2009, 09:53   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Есть RichMemo - компонент для подсветки синтаксиса без лишних наворотов в основе лежит TMemo - прост в работе - заполняете строку служебными словами через служебный символ и выделяете нужную строку необходимым цветом. Во время выполнения служебное слово будет автоматически раскрашено по вашему вкусу. Скорость вполне приемлимая.

Можно посмотреть некоторые моменты здесь: http://programmersforum.ru/showthread.php?t=56874
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Stilet; 08.07.2009 в 10:14.
Utkin вне форума
Старый 08.07.2009, 21:55   #5
shkurkin
 
Регистрация: 08.07.2009
Сообщений: 3
По умолчанию Подсветка синтаксиса в 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.
shkurkin вне форума
Старый 08.07.2009, 22:27   #6
unicode
Форумчанин
 
Аватар для unicode
 
Регистрация: 16.04.2009
Сообщений: 162
По умолчанию

@shkurkin, это я и сам нашел ....
буду пробовать делать с RichEdit пробовать.
unicode вне форума
Старый 08.07.2009, 23:20   #7
Lime
Форумчанин
 
Аватар для Lime
 
Регистрация: 10.02.2009
Сообщений: 815
По умолчанию

Цитата:
Сообщение от unicode Посмотреть сообщение
Подскажите как реализовать подсветку синтаксиса в TMemo?
Тут рядом эта же тема обсуждается...

http://programmersforum.ru/showthread.php?t=56874
Lime вне форума
Старый 09.07.2009, 07:13   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Lime, пост #4 смотреть не пробовали ?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсветка синтаксиса => Патрон Общие вопросы Delphi 21 03.01.2016 11:48
Как сделать подсветку синтаксиса? Вадим Буренков Общие вопросы Delphi 56 09.07.2009 14:21
Нормальная подсветка синтаксиса. Simply-Art Общие вопросы Delphi 4 08.12.2008 17:23
Новая подсветка синтаксиса Alar О форуме и сайтах клуба 25 06.10.2008 11:15
Подсветка синтаксиса Simply-Art Общие вопросы Delphi 2 29.05.2007 16:22