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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.08.2011, 18:53   #1
Problem
 
Регистрация: 14.08.2011
Сообщений: 8
По умолчанию Как размножить картинку на форме

Как размножить картинку на форме, для создания бэкграунда?
Problem вне форума Ответить с цитированием
Старый 14.08.2011, 21:16   #2
fate
Форумчанин
 
Аватар для fate
 
Регистрация: 17.03.2009
Сообщений: 318
По умолчанию

Цитата:
бэкграунд
это что такое?
fate вне форума Ответить с цитированием
Старый 14.08.2011, 22:07   #3
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Код:
type
  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    BM : TBitmap;
    procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  BM.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BM := TBitmap.Create;
  BM.LoadFromFile(<Файл картинки>);
end;

procedure TForm1.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
var
  r, c: Integer;
begin
  if BM = nil then inherited
  else begin
    for R := 0 to ClientHeight div BM.Height do
       for C := 0 to ClientWidth div BM.Width do
         BitBlt(Msg.Dc, C * BM.Width, R * BM.Height, BM.Width,
           BM.Height, BM.Canvas.Handle, 0, 0, SRCCOPY);
     Msg.Result := 1;
   end;
end;

end.
Скандербег вне форума Ответить с цитированием
Старый 15.08.2011, 01:22   #4
CoderHex
Новичок
Джуниор
 
Регистрация: 15.08.2011
Сообщений: 4
По умолчанию

Код:
var
  backBmp: TBitmap;
begin
  backBmp:= TBitmap.Create;
  backBmp.LoadFromFile('c:\back.bmp');

  Canvas.Brush.Bitmap:= backBmp;
  Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight));
end;
CoderHex вне форума Ответить с цитированием
Старый 15.08.2011, 02:12   #5
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Этот код из области "вредные советы".
- В процедуре какого события код должен быть?
- Где освобождается память от Bitmap?
- Чтение из файла каждый раз когда винде нужно рендерить форму?
Но рациональное зерно есть - оптимизация вывода рисунка на форму.
Окончательный релиз заполнения формы фоновым рисунком представляется таким (проверено):
Код:
type
  TForm1 = class(TForm)
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private
    BM : TBitmap;
    procedure WMEraseBkGnd(var Msg: TWMEraseBkGnd); message WM_ERASEBKGND;
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  BM.Free;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  BM := TBitmap.Create;
  BM.LoadFromFile(<Файл картинки>);
  Canvas.Brush.Bitmap:= backBmp;
end;

procedure TForm1.WMEraseBkGnd(var Msg: TWMEraseBkGnd);
begin
  if BM = nil then 
    inherited
  else begin
    Canvas.FillRect(Rect(0, 0, ClientWidth, ClientHeight));
    Msg.Result := 1;
  end;
end;

end.
Скандербег вне форума Ответить с цитированием
Старый 15.08.2011, 06:35   #6
Problem
 
Регистрация: 14.08.2011
Сообщений: 8
По умолчанию

Не помогло. Картинка не копируется по всей форме

Но за код спасибо.

Мне же принцип как в HTML нужен, берётся фрагмент картинки и он копируется по всей странице заливая её, образуя фон.

Просто я не хочу просто взять большую картинку и поместить её на форму.

Последний раз редактировалось Problem; 15.08.2011 в 07:02.
Problem вне форума Ответить с цитированием
Старый 15.08.2011, 07:26   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Картинка не копируется по всей форме
http://www.programmersforum.ru/showthread.php?t=163089
Сойдеть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.08.2011, 07:56   #8
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

У меня копируется, у автора темы не копируется. Значит не все сделано так как показано в приведенном коде.
Еще раз проверено, вот результат:
Изображения
Тип файла: gif 001.gif (59.9 Кб, 63 просмотров)
Скандербег вне форума Ответить с цитированием
Старый 15.08.2011, 09:31   #9
Problem
 
Регистрация: 14.08.2011
Сообщений: 8
По умолчанию

Canvas.Brush.Bitmap:= backBmp;
[Error]Unit1.pas(35): Undeclared identifier: 'backBmp'

Всё в точности скопировал
Problem вне форума Ответить с цитированием
Старый 15.08.2011, 10:09   #10
Скандербег
Форумчанин
 
Регистрация: 04.04.2009
Сообщений: 438
По умолчанию

Упражнение на внимательность (и умение работать с ошибками).
Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
  BM := TBitmap.Create;
  BM.LoadFromFile(<Файл картинки>);
  Canvas.Brush.Bitmap:= BM;   //<-----
end;
Скандербег вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
загрузить картинку с листа Excel в image на форме pooli Microsoft Office Excel 1 20.10.2010 00:51
Как получить картинку при наведении на другую картинку (ссылку) seeker1 JavaScript, Ajax 8 04.07.2010 19:42
Как плавно показать картинку на черной форме. Дима я Мультимедиа в Delphi 14 15.01.2010 18:28
Как отобразить картинку из интернета на форме reyn90 Помощь студентам 0 01.06.2009 20:05
как размножить картинку ReDuX HTML и CSS 1 23.04.2008 22:12