Форум: "Основная";
Текущий архив: 2006.03.19;
Скачать: [xml.tar.bz2];
ВнизОбновление фона формы Найти похожие ветки
← →
!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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c