![]() |
|
|
#1
|
||||
|
||||
|
Вот есть у меня TMEMO. Кто-нить знает, как поставить на фон красивую картинку? Поиск по гуглу сказал, что нельзя. Я придумал только немного "странный" метод - по событию OnPaint в DC формы отрисовывать картинку, а поверх нее текст. В принципе работает, поглючивает, но довести до идеала думаю можно. НО может возможно как-нить попроще?
Или может есть другой компонент, который являет собой по сути МЕМО, но с возможностью ставить картинку? Последний раз редактировалось Bargest, 30.11.2010 в 19:40. |
|
#2
|
||||
|
||||
|
Только так:
http://www.sql.ru/Forum/actualfile.aspx?id=3889623 Код:
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
procedure MemoWndProc(var Message: TMessage);
public
{ Public declarations }
end;
var
Form1 : TForm1;
Bmp : TBitmap;
FMemoInstance : Pointer;
FPrevMemoProc : Pointer;
implementation
{$R *.DFM}
procedure TForm1.MemoWndProc(var Message: TMessage);
var
PS : TPaintStruct;
DC : HDC;
I, Y : Integer;
begin
with Message do
case Msg of
WM_PAINT :
begin
DC := BeginPaint(Memo1.Handle, PS);
SetBkMode(DC, TRANSPARENT);
SelectObject(DC, Memo1.Font.Handle);
StretchBlt(DC, 0, 0, Memo1.Width, Memo1.Height, Bmp.Canvas.Handle, 0, 0, Bmp.Width, Bmp.Height, SRCCOPY);
Y := 1;
for I := 0 to Memo1.Lines.Count - 1 do
begin
TextOut(DC, 1, Y, PChar(Memo1.Lines[i]), Length(Memo1.Lines[i]));
inc(Y, abs(Memo1.Font.Height) + 2);
end;
DeleteObject(Memo1.Font.Handle);
EndPaint(Memo1.Handle, PS);
end;
else
Result := CallWindowProc(FPrevMemoProc, Form1.Memo1.Handle, Msg, wParam, lParam);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Bmp := TBitmap.Create;
Bmp.LoadFromResourceName(hInstance, 'ICE');
FMemoInstance := MakeObjectInstance(MemoWndProc);
FPrevMemoProc := Pointer(GetWindowLong(Memo1.Handle, GWL_WNDPROC));
SetWindowLong(Memo1.Handle, GWL_WNDPROC, Longint(FMemoInstance));
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Memo1.HandleAllocated then
SetWindowLong(Memo1.Handle, GWL_WNDPROC, Longint(FPrevMemoProc));
Bmp.Free;
end; |
|
#3
|
||||
|
||||
|
Мда. Значит, кроме как ручной отрисовкой текста никак
ладн, поразбираюсь с TRichView |
|
#4
|
||||
|
||||
|
А, так TRichView - сторонний? я нашел в стандартных ток TRichEdit, и в нем нет ничего похожего на Picture, Image, Bitmap, Background и т.п. Если сторонний - то все же лучше юзать MEMO...
|
|
#5
|
||||
|
||||
|
А может CoolMemo ? Там есть свойство TransparencyLevel и если под ним разместить картинку получится довольно красиво...
|
|
#6
|
||||
|
||||
|
Да TRichView сторонний, причем последние версии платные (но он очень удобен, им пользуются создатели аськи и скайпа, это так, для сравнения, чтоб понял что к чему). У него есть функции почти все, что есть в ворде (вставка картинок, ссылок в текст, и т.д.). И с ним меньше мороки (старые версии досих пор остались бесплатными, и они вполне тебя устроят).
А если использовать стандартный мемо, то сильно уж много мороки... |
|
#7
|
||||
|
||||
|
да уж. А не подскажете, старые версии - это до какой? и пойдут ли они на DelphiXE?
|
|
#8
|
||||
|
||||
|
Не знаю до какой версии, но могу выслать исходники последней бесплатной версии (скажите куда выложить).
|
|
#9
|
||||
|
||||
|
лучше всего на почту <адрес удален>
![]() Последний раз редактировалось Bargest, 01.12.2010 в 01:23. |