Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
2-1141049426
dera
2006-02-27 17:10
2006.03.19
как сделать?


1-1140058218
Simon
2006-02-16 05:50
2006.03.19
переменные окружения


15-1140767820
vidiv
2006-02-24 10:57
2006.03.19
gigabyte GA-8ipe1000


15-1140809079
DillerXX
2006-02-24 22:24
2006.03.19
Генетические алгоритмы, нейронные сети...


9-1126692848
О ужас!
2005-09-14 14:14
2006.03.19
vainu in gamedev





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский