Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Как реализовать метод SelLength в своем мемо?   Найти похожие ветки 

 
Alex_C ©   (2006-10-27 14:12) [0]

Пишу компонент - наследок от 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? Где-нибудь простенький бы пример посмотреть?


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

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


 
Alex_C ©   (2006-10-27 16:56) [2]


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


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


 
DVM ©   (2006-10-28 23:14) [3]


> Alex_C ©   (27.10.06 14:12)  

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


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

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

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



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

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.048 c
15-1163881631
Alexis
2006-11-18 23:27
2006.12.10
Windows.pas из установки Delphi7


2-1164046288
~Aid~
2006-11-20 21:11
2006.12.10
TStringGrid


4-1154212729
Spirit111
2006-07-30 02:38
2006.12.10
Как получить список всех контейнеров в данном криптопровайдере?


2-1164178769
alucard
2006-11-22 09:59
2006.12.10
Подскажите нормальное описание всех компонентов Delphi7


3-1159857916
Megabyte
2006-10-03 10:45
2006.12.10
Можно ли прописать алиас без перезапуска сервера?