![]() |
|
#1
|
||||
|
||||
![]() Вот есть у меня TMEMO. Кто-нить знает, как поставить на фон красивую картинку? Поиск по гуглу сказал, что нельзя. Я придумал только немного "странный" метод - по событию OnPaint в DC формы отрисовывать картинку, а поверх нее текст. В принципе работает, поглючивает, но довести до идеала думаю можно. НО может возможно как-нить попроще?
Или может есть другой компонент, который являет собой по сути МЕМО, но с возможностью ставить картинку? jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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
|
||||
|
||||
![]() Мда. Значит, кроме как ручной отрисовкой текста никак
![]() jmp $ ; Happy End! The Cake Is A Lie. |
#4
|
||||
|
||||
![]() А, так TRichView - сторонний? я нашел в стандартных ток TRichEdit, и в нем нет ничего похожего на Picture, Image, Bitmap, Background и т.п. Если сторонний - то все же лучше юзать MEMO...
jmp $ ; Happy End! The Cake Is A Lie. |
#5
|
||||
|
||||
![]() А может CoolMemo ? Там есть свойство TransparencyLevel и если под ним разместить картинку получится довольно красиво...
|
#6
|
||||
|
||||
![]() Да TRichView сторонний, причем последние версии платные (но он очень удобен, им пользуются создатели аськи и скайпа, это так, для сравнения, чтоб понял что к чему). У него есть функции почти все, что есть в ворде (вставка картинок, ссылок в текст, и т.д.). И с ним меньше мороки (старые версии досих пор остались бесплатными, и они вполне тебя устроят).
А если использовать стандартный мемо, то сильно уж много мороки... Помогаю за Спасибо ![]() |
#7
|
||||
|
||||
![]() да уж. А не подскажете, старые версии - это до какой? и пойдут ли они на DelphiXE?
jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
||||
|
||||
![]() Не знаю до какой версии, но могу выслать исходники последней бесплатной версии (скажите куда выложить).
Помогаю за Спасибо ![]() |
#9
|
||||
|
||||
![]() лучше всего на почту <адрес удален>
![]() jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось Bargest, 01.12.2010 в 01:23. |