Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как реализовать метод SelLength в своем мемо? [D7, WinXP]


Alex_C ©   (2006-10-27 14:12:00) 

Пишу компонент - наследок от TMemo, в котором переопределяю метод WMPaint, для выделения некоторых слов. Все отлично работает, кроме одного - перестал выделяться синим цветом выделенный текст
SelStart-SelLength
Т.е. он в памяти выделяется (SelText = выделенному фрагменту), а на мемо - нет. Привожу упрощенный вариант моего WMPain (здесь просто выводятся все строки):

procedure TMyMemo.WMPaint(var Message: TWMPaint);
var
i, j, dy: Integer;
PS: TPaintStruct;
DC: HDC;
aCanvas: TCanvas;
begin
inherited;
DC:= Message.DC;
if DC= 0 then
DC:= BeginPaint(Handle, PS);
aCanvas:=TCanvas.Create;
try
aCanvas.Handle:= DC;
aCanvas.Font:= Font;

FImage.Handle := CreateCompatibleBitmap(aCanvas.Handle,
WidthOf(ClientRect), HeightOf(ClientRect));

FImage.Canvas.FillRect(ClientRect);
FImage.Canvas.Font.Assign(Font);

with FImage.Canvas do
begin
dy := 1;
for i:= 0 to Lines.Count-1 do //Перебираем строки Memo
begin
// Выводим строку
TextOut(0, dy, Lines[i]);
// Перемещаемся на следующую строку
dy:= dy + TextHeight('X');
end;
end;
BitBlt( aCanvas.Handle, 0, 0, FImage.Width, FImage.Height, FImage.Canvas.Handle, 0, 0, SRCCOPY );
finally
if Message.DC = 0 then EndPaint(Handle, PS);
aCanvas.Free;
end;
end;

А вот как сюда добавить выделение по SelStart-SelLength? Где-нибудь простенький бы пример посмотреть?


Орион   (2006-10-28 23:24:00) [1]

> [0] Alex_C ©   (27.10.06 14:12)
>для выделения некоторых слов

возможно тебе TSynEdit подойдет?


DVM   (2006-10-28 23:14:00) [2]


> Alex_C ©   (27.10.06 14:12)  

Че то мне подсказывает, что приведенный код для рисования хреново очень будет работать при большом количестве строк. Может все таки рисовать только те строки которые действительно надо рисовать, а не перебирать все подряд. Если их будет, скажем так 500 000 то оно работать будет плохо.


Alex_C   (2006-10-27 16:56:00) [3]


> вот ты не поверишь: таки выяснять, есть ли выделение, и
> тоже руками рисовать. ага?


Вот такая засада! Прийдется рисовать!


Mirage   (2006-10-27 14:38:00) [4]

>[0] Alex_C(c) 27-Oct-2006, 14:12
>А вот как сюда добавить выделение по SelStart-SelLength?
>Где-нибудь простенький бы пример посмотреть?
вот ты не поверишь: таки выяснять, есть ли выделение, и тоже руками рисовать. ага?


Наверх

Титульная страница Поиск, карта сайта Написать письмо