Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.19;
Скачать: CL | DM;

Вниз

Обновление фона формы   Найти похожие ветки 

 
!Trinix ©   (2006-02-11 16:59) [0]

Ниже следует код, который делает картинку фоном формы. Но допустим в процессе прорраммы мне необходимо поменять картинку на другую, тогда я меняю "fon.bmp" на "fon2.bmp" (разумеется в самом коде вместо "fom.bmp" у меня стоит текстовая переменная). Но вот перекрасить форму не получается ни Form.Repaint, ни Form.Refresh, ни Form.Update. Как сделать правильно?

procedure TForm.FormPaint(Sender: TObject);
var
 x, y: integer; // левый верхний угол картинки
 Back : TBitmap; // фоновая картинка
begin
 Back := TBitmap.Create;
 Back.LoadFromFile("fon.bmp");
 x := 0; y := 0;
 while y < FormMain.Height do
   begin
     while x < FormMain.Width do
       begin
         FormMain.Canvas.Draw(x, y, Back);
         x := x + Back.Width;
       end;
     x := 0;
     y := y + Back.Height;
   end;
 Back.Free;
end;


 
Dima1   (2006-02-11 17:13) [1]

Так тебе же надо не Form.Repaint а FormMain.Repaint


 
!Trinix ©   (2006-02-11 18:39) [2]

Ну FormMain, просто когда код сюда вставлял не весь код переименовал.


 
Eraser ©   (2006-02-11 18:52) [3]


> !Trinix ©   (11.02.06 16:59)

InvalidateRect... если не поможет, то ошибка в твоём алгоритме OnPaint.


 
Gorger ©   (2006-02-11 18:55) [4]

в глобальном поле var: MyBmp:TBitmap;
в FormMain.OnPaint  вставить
begin
MyBmp:=TBitmap.Create;
MyBmp.LoadFromFile("Форма.bmp");
BitBlt (FormMain.Canvas.handle,0,0,Width,Height,MyBmp.Canvas.Handle,0,0,SRCCOPY)
end;
в FormMain.OnDeactivate;
begin
MyBmp.Free;
end;

Если мне не изменяет память, то так.
И еще: если картинка меньше  формы, тогда нужно использовать функцию StretchBlt, вместо почти аналогичной BitBlt. StretchBlt неплохо ресэмплирует изображения
при меньшей величине изображения относительно целевого канваса, а вот сжимает она очень паршиво.


 
Eraser ©   (2006-02-11 19:00) [5]


> Gorger ©   (11.02.06 18:55) [4]


> а вот сжимает она очень паршиво

в win2k и выше можно использовать полутона, тогда отлично сжимает.


 
StriderMan ©   (2006-02-11 21:05) [6]

а к чмеу такие сложности?
можно положить TImage на форму, поставить Align := alClient и менять в ней картинку.
Сам так делал


 
!Trinix ©   (2006-02-12 08:54) [7]

Спасибо, попробую так.


 
API   (2006-02-12 19:42) [8]

Gorger ©   (11.02.06 18:55) [4]

в глобальном поле var: MyBmp:TBitmap;
в FormMain.OnPaint  вставить
begin
MyBmp:=TBitmap.Create;
MyBmp.LoadFromFile("Форма.bmp");
BitBlt (FormMain.Canvas.handle,0,0,Width,Height,MyBmp.Canvas.Handle,0,0,SRCCOPY)
end;
в FormMain.OnDeactivate;
begin
MyBmp.Free;
end;


Никогда больше такого никому не советуйте, договорились?...

type
 TMainForm = class()
   procedure OnPaint();
   procedure OnCreate();
   procedure OnDestroy();
 private
   MyBMP: TBitmap;
 public
   procedure SetBackground(FileName: string);
 end;

procedure TMainForm.OnCreate();
begin
 MyBMP := TBitmap.Create;
 SetBackground("Форма.bmp");
end;

procedure TMainForm.OnPaint();
begin
 BitBlt(Canvas.Handle, 0, 0, Width, Height, MyBMP.Canvas.Handle, 0, 0, SRCCOPY); // или как там нужно по задумке
end;

procedure TMainForm.OnDestroy();
begin
 MyBMP.Free;
end;

procedure TMainForm.SetBackground(FileName: string);
begin
 MyBMP.LoadFromFile("Форма.bmp");
 Invalidate;
end;


 
API   (2006-02-12 19:44) [9]

API   (12.02.06 19:42) [8]

MyBMP.LoadFromFile("Форма.bmp");

заменить на

MyBMP.LoadFromFile(FileName);


 
ссс   (2006-02-13 15:22) [10]

procedure TfMain.Button1Click(Sender: TObject);
begin
Invalidate;//Обновление (перерисовкa)  фона формы
end;



Страницы: 1 вся ветка

Текущий архив: 2006.03.19;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
3-1138362893
neat
2006-01-27 14:54
2006.03.19
Фильтр для Table


2-1141049426
dera
2006-02-27 17:10
2006.03.19
как сделать?


15-1140882588
grisme
2006-02-25 18:49
2006.03.19
Плохое детство


9-1124125200
Dgt
2005-08-15 21:00
2006.03.19
Glscene &amp; Gl_Ext_Separate_Specular_color


2-1141399184
Handle
2006-03-03 18:19
2006.03.19
Как завершить системныЙ процесс?