Главная страница
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.043 c
3-1138197050
galexis
2006-01-25 16:50
2006.03.19
SQL запрос с многими значениями параметра.


4-1135173992
volser
2005-12-21 17:06
2006.03.19
ListView как на десктопе


2-1141570304
Fl@sh
2006-03-05 17:51
2006.03.19
dbgrid


2-1141052609
anonymous-
2006-02-27 18:03
2006.03.19
Минимальный размер splitter


2-1141320061
Alex7
2006-03-02 20:21
2006.03.19
Неисправность