![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как реализовать метод 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?
>Где-нибудь простенький бы пример посмотреть?
вот ты не поверишь: таки выяснять, есть ли выделение, и тоже руками рисовать. ага?