Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Замена фона картинкой


Автор: Rick 6.11.2005, 08:02
Товарищи, подскажите наинающему, можно ли как-то заменить фон формы на картинку без использования компонента Image или др. компонента. К сожалению в Delphi нет аналога свойства формы Picture.

Автор: DragonFire 6.11.2005, 08:31
Ну, в общем - то все очень просто. Создай обработчик события перерисовки формы(OnPaint).
В нем напиши вот такой код (путь к рисунку укажешь в Bitmap.LoadFromFile('ПУТЬ')):
Код

procedure TForm1.FormPaint(Sender: TObject);
var Bitmap:TBitmap;
begin
  Bitmap:=TBitmap.Create;
  Bitmap.LoadFromFile('D:\1.bmp');
  Form1.Canvas.CopyRect(Rect(0,0,Form1.Width,Form1.Height),Bitmap.Canvas,Rect(0,0,Form1.Width,Form1.Height));
  Bitmap.Destroy;
end;

З.Ы. Проверил - работает!!! smile

Автор: Rick 6.11.2005, 08:55
работаетsmile

Автор: DragonFire 6.11.2005, 11:03
Еще бы smile

Автор: Poseidon 6.11.2005, 14:17
Код
procedure TForm1.FormPaint(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap:= TBitmap.Create;
Bitmap.LoadFromFile('D:\1.bmp');
Form1.Canvas.Draw(0,0,Bitmap);
Bitmap.Free;
end;

Автор: Rick 6.11.2005, 14:24
а если JPG? конвертировать?

Автор: Poseidon 6.11.2005, 15:44
Код
uses jpeg;
procedure TForm1.FormPaint(Sender: TObject);
var
Picture: TPicture;
begin
Picture:= TPicture.Create;
Picture.LoadFromFile('D:\1.jpg');
Canvas.Draw(0,0,Picture.Graphic);
Picture.Free;
end;

Автор: vovan430 6.11.2005, 17:01
А чем тебе Image не устраивает. С ним же удобнее.

А как сделать чтоб после следующего открытия была та картинка которую я устанавливал последней. Картинку фона беру из OpenPictureDialog. Программу закрываю потом открываю и стоит последняя картинка которую я устанавливал.

Автор: Poseidon 6.11.2005, 18:28
Цитата(vovan430 @ 6.11.2005, 17:01)
Программу закрываю потом открываю и стоит последняя картинка которую я устанавливал.
А стоит она там потому, что при загрузке в Image на этапе проектирование эта картинка сохраняется в ресурс программы.

Лучшим решение твоей задачи будет сохранять куда-нить новую картинку, а при загрузке читать ее оттуда.

Автор: Rick 6.11.2005, 19:44
Image меня не устраивает тем, что на форме уже расположены др. компоненты, а он их перекрывает. Как то я этот момент сразу упустил, теперь уже поздноsmile

Автор: Poseidon 6.11.2005, 19:57
Еще не поздно. Кидай image на форму, устанавливай в нем Align:= alClient, потом жми по нему правой кнопкой, потом "Управление" - "Перенести Ниже". Все smile

Автор: Rick 6.11.2005, 20:07
мдя...с этого мне наверно и надо было начинатьsmile


Автор: Instal 2.6.2008, 11:49
Цитата(Poseidon @ 6.11.2005,  19:57)
Еще не поздно. Кидай image на форму, устанавливай в нем Align:= alClient, потом жми по нему правой кнопкой, потом "Управление" - "Перенести Ниже". Все smile

Хочу тоже сделать фон формы с картинки и чтоб он не перекрывал другие компоненты.
Делаю также, нажимаю "перенести ниже", а все остается как было...
Подскажите плиз в чем может быть проблема?

Автор: ivan219 4.6.2008, 13:40
Цитата(Poseidon @ 6.11.2005,  14:17)
Код
procedure TForm1.FormPaint(Sender: TObject);
var
Bitmap: TBitmap;
begin
Bitmap:= TBitmap.Create;
Bitmap.LoadFromFile('D:\1.bmp');
Form1.Canvas.Draw(0,0,Bitmap);
Bitmap.Free;
end;

Както расточительно
Код

var
  Form1: TForm1;
  BitMap: TBitMap;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
 BitMap := TBitMap.Create;
 Bitmap.LoadFromFile('1.bmp');
end;

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

procedure TForm1.FormPaint(Sender: TObject);
begin
 Form1.Canvas.Draw(0,0,Bitmap);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 Bitmap.LoadFromFile('2.bmp');
 Invalidate;
end;

Автор: Poseidon 7.6.2008, 16:31
Цитата(ivan219 @  4.6.2008,  13:40 Найти цитируемый пост)
Както расточительно
Расточительно? А держать в памяти созданный, да еще и заполненный TBitMap все время, пока загружена программа, это не расточительно? Да и вообще, топик с 2005 года, никрофилы  smile

Цитата(Instal @  2.6.2008,  11:49 Найти цитируемый пост)
Делаю также, нажимаю "перенести ниже", а все остается как было...
Ты точно "перенести ниже" указываешь в меню у Image?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)