Уважаемые авторы вопросов! Большая просьба сообщить о результатах решения проблемы на этой странице. Иначе, следящие за обсуждением, возможно имеющие аналогичные проблемы, не получают ясного представления об их решении. А авторы ответов не получают обратной связи. Что можно расценивать, как проявление неуважения к отвечающим от автора вопроса.
05-03-2007 02:44
Для TMemo нужно делать по-другому - обрабатывать WM_CTLCOLOREDIT:
procedure TForm1.FormCreate(Sender: TObject);
begin
bm:=TBitmap.Create;
bm.LoadFromFile('......................');
Memo1.Brush.Bitmap:=bm;
end;
procedure TForm1.WMCTLCOLOREDIT(var mes: TMessage);
var
dc:HDC;
begin
if mes.LParam=Memo1.Handle then
begin
dc:=HDC(mes.WParam);
SetBkMode(dc,TRANSPARENT);
mes.Result:=0;
end;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
bm.Free;
end;
var
ws:integer;
bm:TBitmap;
begin
bm.LoadFromFile('.............');
RichEdit1.Brush.Bitmap:=bm;
ws:=GetWindowLong(RichEdit1.Handle, GWL_EXSTYLE);
ws:=ws or WS_EX_TRANSPARENT;
SetWindowLong(RichEdit1.Handle,GWL_EXSTYLE,ws);
В разделе Var (который перед словом implementation) добавь строку memo1: TMyMemo;
Да, совсем забыл, в OnPaint для формы напиши
procedure TForm1.FormPaint(Sender: TObject);
Var MCanvas: TControlCanvas;
i: integer;
begin
MCanvas:=TControlCanvas.Create;
try
MCanvas.Control:=memo1;
memo1.Repaint;
MCanvas.Brush.Color:=$00F1EEEA;
For i:=0 to memo1.Lines.Count-1 do
MCanvas.TextOut(2, i*14 ,memo1.Lines[i]);
finally MCanvas.Free end;
end;
Вообще я привел не очень удачное решение, весь этот код я наколбасил когда еще только учился программировать, с тех пор ни разу им не пользовался, не исправлял, не улучшал, но в качестве отправной точки думаю пойдет.
Delog! Спасибо большое за ответ, но не могли бы вы сказать, почему в строчке "Memo1:=TMymemo.Create(Self);" Delphi видит ошибку: "Incompatible types: 'TMemo' and 'TMyMemo'"?
Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Функция может не работать в некоторых версиях броузеров.