Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мастера, помогите!!! [D4, Win95/98, WinME]


[BAD]Angel ©   (2002-08-09 13:07:00) 

Как сделать, чтобы картинка (image) плавно увеличивалась или уменьшалась (без миганий)...


mukha   (2002-08-10 15:04:00) [1]

В книге для начинающих как демонстрация работы таймера видел примерно такой пример:
На форме Panel,на ней Image с загруженным рисунком, button и Timer. Image размещён на панели чтобы устранить мигания.
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons, jpeg;

type
TForm1 = class(TForm)
Panel1: TPanel;
Timer1: TTimer;
Image1: TImage;
Button1: TButton;
procedure Timer1Timer(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
small:boolean;
implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if small=true then
begin
Image1.Height:=Image1.Height-2;
Image1.Width:=Image1.Width-2;
if Image1.Height<=100 then //минимальный размер Image
small:=false;
end;
if small=false then
begin
Image1.Height:=Image1.Height+2;
Image1.Width:=Image1.Width+2;
if Image1.Height>=300 then // максимальный размер Image
small:=true;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.DoubleBuffered:=true;
Timer1.Interval:=1;
Timer1.Enabled:=false;
Image1.Stretch:=true;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
small:=true;
end;

end.


[BAD]Angel   (2002-08-10 12:53:00) [2]

Спасибо!


Viktor Kushnir   (2002-08-09 18:44:00) [3]

Просто так плавно не получится. Нужно подготовить в памяти несколько изображений разного размера, а затем их подряд прорисовать.
Можно создать что-нибудь вроде

Var
i :integer;
ImgArray :Array [0..9] of TBitmap;
...
Begin
For i := 0 to 9 do
Begin
ImgArray[i] := TBitmap.create;
{Здесь рисуешь в ImgArray[i] нужную картинку, с нужным размером}
End;


Затем заполнить его 10 картинками с возрастающеми (или убывающеми, как хочешь) размерами, а затем их поочереди прорисовать.

For i := 0 to 9 do
Begin
Form1.Canvas.Draw(0,0,ImgArray[i])
Sleep(100);
End;


Только не забудь потом память освободить.


[BAD]Angel   (2002-08-09 16:30:00) [4]

Ну неужели никто не знает? :-(


[BAD]Angel   (2002-08-09 13:27:00) [5]

Да я еще никак ни делаю... Я не знаю, как это реализовать! Если бы знал, то, наверное, не спрашивал бы!


Skier   (2002-08-09 13:23:00) [6]

>[BAD]Angel
Покажи код : как тыэто делаешь...


[BAD]Angel   (2002-08-09 13:19:00) [7]

Ну я же написал... Есть картинка (Image) размера 100х100 допустим, нажимаеш на нее и она плавно увеличивается до 300х300, допустим!!!


Skier   (2002-08-09 13:14:00) [8]

>[BAD]Angel
Цель какая ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо