Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2011, 18:48   #1
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
Восклицание Вставка фона в memo. Есть проблемы

Здравствуйте, я вставляю фоновую картинку в мемо

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
 SplashImage: TImage;

begin
       SplashImage := TImage.Create(Memo1);
       SplashImage.Stretch := true;
       SplashImage.Align := alClient;

       SplashImage.Parent := Memo1;

       SplashImage.Picture.LoadFromFile('C:\0.bmp');
       SplashImage.Width:= Memo1.Width;
       SplashImage.Height:= Memo1.Height;
       SplashImage.Stretch:= True;

       Memo1.Brush.Bitmap:= SplashImage.Canvas.Brush.Bitmap;
end;
Проблема в том что когда начинаешь писать в таком мемо появляется белая строка в той части где вводятся символы! Как с этим бороться? Спасибо.
dolphin705 вне форума Ответить с цитированием
Старый 20.07.2011, 20:04   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

есть такая вещь как beginUpdate,EndUpdate, используй её в событии когда человек вводит текст. Иначе с каждой буквой картинка перересовывается.
Человек_Борща вне форума Ответить с цитированием
Старый 20.07.2011, 20:30   #3
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Эта тема уже обсуждалась здесь, воспользуйтесь поисковиком.
Что бы не ломать голову скачайте компонент TRichView, он поддерживает графические параметры можно использовать за место TMemo http://www.trichview.com/rvfiles/richview.zip
А так для TМемо что бы отображал и текст и фоновую картинку нужно много чего написать, постоянным обновлением фона здесь не обойтись, будет все моргать и не корректно отображаться.

Вот пример четко выводит из TМемо можно и из любого другого контрола, текст поверх фоновой картинки правда на канву формы, может пригодиться.

Код:
   
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Image1: TImage;
    procedure Memo1Change(Sender: TObject);
    procedure FormPaint(Sender: TObject);
  private
    { Private declarations }
  public
    procedure MemoDraw;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Процедура для перерисовывания
procedure TForm1.MemoDraw;
var
MemoCanvas: TCanvas;
BMP: TBitMap;
tBmp: TBitmap;
ARect: TRect;
begin
//Создаем канву для Memo
MemoCanvas:= TCanvas.Create;
//Создаем Bitmap для фоновой картинки
BMP:= TBitMap.Create;
//Создаем Bitmap для содержимого Memo
tBmp:= TBitmap.Create;
//Загружаем фоновую картинку
BMP.LoadFromFile('C:\0.bmp');
//Захватываем графический дескриптор Memo для канвы
MemoCanvas.Handle:=GetDC(Memo1.Handle);
//Устанавливаем размеры для содержимого Memo
tbmp.Width:= Memo1.Width;
tbmp.Height:= Memo1.Height;
ARect := Rect(0, 0, Memo1.Width, Memo1.Height);
//Копируем с Memo в Bitmap
tbmp.Canvas.CopyRect(ARect, MemoCanvas, ARect);
//Устанавливаем прозрачность для картинки содержимого Memo
//Нужно для того чтобы текст с мемо был виден вместе с фоном
tBMP.TransparentMode:= tmFixed;
tBMP.TransparentColor:= tBMP.Canvas.Pixels[0, 0];
tBMP.Transparent:= true;
//Выводим фон на канву формы
Canvas.StretchDraw(Rect(0, 0, Memo1.Width, Memo1.Height), BMP);
//Выводим поверх фона содержимое Memo на канву формы
Canvas.Draw(0,0, TBMP);
//Уничтожаем ресурсы чтобы не занимать память
BMP.Free;
 MemoCanvas.Free;
 tBMP.Free;
end;

procedure TForm1.Memo1Change(Sender: TObject);
begin
//При вводе текста в Memo будет рисовать
MemoDraw;
end;

procedure TForm1.FormPaint(Sender: TObject);
begin
MemoDraw;
end;

Последний раз редактировалось Aliens_wolfs; 21.07.2011 в 00:07.
Aliens_wolfs вне форума Ответить с цитированием
Старый 20.07.2011, 22:29   #4
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Aliens_wolfs, твой пример у меня в d7 не работает(

beginUpdate,EndUpdate не помогло, помойму пример изначально неправельный тк. после этих дествий текст как бы пропадает за изображением.

Пробую искать альтернативные варианты
dolphin705 вне форума Ответить с цитированием
Старый 20.07.2011, 23:12   #5
Aliens_wolfs
Форумчанин
 
Регистрация: 16.12.2009
Сообщений: 902
По умолчанию

Это будет работать в любой версии Delphi. Еще раз взгляни на мое сообщение выше и код я кое что дописал.

Последний раз редактировалось Aliens_wolfs; 21.07.2011 в 00:04.
Aliens_wolfs вне форума Ответить с цитированием
Старый 21.07.2011, 00:11   #6
dolphin705
Форумчанин
 
Аватар для dolphin705
 
Регистрация: 02.08.2008
Сообщений: 213
По умолчанию

Конешно прежде чем написать покопал интернет, но нужного так и не нашёл. Спасибо, очень интересное решение для данного вопроса! Есть над чем теперь поработать.

Последний раз редактировалось dolphin705; 21.07.2011 в 00:13.
dolphin705 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть окно, в котором есть аналог Memo. Как из него вытащить текст? TwiX Общие вопросы Delphi 6 16.06.2011 13:58
CSS вёрстка, вставка Google map поверх изображения, фона! sting HTML и CSS 0 09.02.2010 22:27
Вставка в поле MEMO Joe_Tribbiani БД в Delphi 7 20.04.2009 20:02
Вставка слова в Memo artemavd Общие вопросы Delphi 1 27.03.2009 16:32
Вставка текста в memo Revan Общие вопросы Delphi 2 23.05.2008 17:45