![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TMemo и DoubleBuffered проблема [D7, XP]
Alex_C © (2006-10-12 15:51:00)Мне надо создать потомок от TMemo c измененным WMPaint. При использовании DoubleBuffered:= False - все без проблем как в факах, но при этом мемо естественно мерцает при перерисовке. При выставлении св-ва DoubleBuffered := true - мемо перестает закрашивать свободную от надписей клиенткую область. Как этого избежать?
Вот пример моего WMPaint (взят из примера):
procedure TMyMemo.WMPaint(var Message: TWMPaint);
var
i, dy : Integer;
PS:TPaintStruct;
DC:HDC;
aCanvas: TCanvas;
begin
DC:= Message.DC;
if DC= 0 then
DC:= BeginPaint(Handle, PS);
aCanvas:=TCanvas.Create;
try
aCanvas.Handle:= DC;
aCanvas.Font:= Font;
// Если вот сюда поставить aCanvas.FillRec, то все закрашивается,
// но естественно начинает сильно мерцать.
with aCanvas do
begin
dy := 1;
for i:= 0 to Lines.Count-1 do
begin
if (i mod 2) = 0 then
Font.Color:= clBlue
else
Font.Color:= clBlack;
TextOut(1, dy, Lines[i]);
dy:= dy+ TextHeight('X');
end;
end;
finally
if Message.DC = 0 then EndPaint(Handle, PS);
aCanvas.Free;
end;
end;
Ketmar (2006-10-12 17:05:00) [1]интересно, а почему не взять richedit? в твоём коде как минимум одна ошибка -- попробуй выделить текст. что будет с выделением? и вообще -- если уж ВСЁ рисуешь руками -- так и рисуй себе на битмап, а потом битмап выводи.