Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.11.2010, 19:31
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию Фон MEMO

Вот есть у меня TMEMO. Кто-нить знает, как поставить на фон красивую картинку? Поиск по гуглу сказал, что нельзя. Я придумал только немного "странный" метод - по событию OnPaint в DC формы отрисовывать картинку, а поверх нее текст. В принципе работает, поглючивает, но довести до идеала думаю можно. НО может возможно как-нить попроще?
Или может есть другой компонент, который являет собой по сути МЕМО, но с возможностью ставить картинку?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 30.11.2010 в 19:40.
Ответить с цитированием
  #2  
Старый 30.11.2010, 19:48
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Только так:
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;
Или используй другой компонент, хоть тот же TRichView.
__________________
Помогаю за Спасибо
Ответить с цитированием
  #3  
Старый 30.11.2010, 19:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Мда. Значит, кроме как ручной отрисовкой текста никак ладн, поразбираюсь с TRichView
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #4  
Старый 30.11.2010, 20:34
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А, так TRichView - сторонний? я нашел в стандартных ток TRichEdit, и в нем нет ничего похожего на Picture, Image, Bitmap, Background и т.п. Если сторонний - то все же лучше юзать MEMO...
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #5  
Старый 30.11.2010, 22:27
Аватар для deltas
deltas deltas вне форума
Новичок
 
Регистрация: 22.11.2010
Сообщения: 99
Репутация: 47
По умолчанию

А может CoolMemo ? Там есть свойство TransparencyLevel и если под ним разместить картинку получится довольно красиво...
Ответить с цитированием
  #6  
Старый 30.11.2010, 22:33
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Да TRichView сторонний, причем последние версии платные (но он очень удобен, им пользуются создатели аськи и скайпа, это так, для сравнения, чтоб понял что к чему). У него есть функции почти все, что есть в ворде (вставка картинок, ссылок в текст, и т.д.). И с ним меньше мороки (старые версии досих пор остались бесплатными, и они вполне тебя устроят).
А если использовать стандартный мемо, то сильно уж много мороки...
__________________
Помогаю за Спасибо
Ответить с цитированием
  #7  
Старый 30.11.2010, 23:08
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

да уж. А не подскажете, старые версии - это до какой? и пойдут ли они на DelphiXE?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 30.11.2010, 23:15
Аватар для v1s2222
v1s2222 v1s2222 вне форума
Продвинутый
 
Регистрация: 07.09.2010
Сообщения: 726
Репутация: 26711
По умолчанию

Не знаю до какой версии, но могу выслать исходники последней бесплатной версии (скажите куда выложить).
__________________
Помогаю за Спасибо
Ответить с цитированием
  #9  
Старый 30.11.2010, 23:45
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

лучше всего на почту <адрес удален>
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 01.12.2010 в 01:23.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025