| 
| 
 | Вопрос # 2 928/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты! Подскажите пожалуйста. Как, при наведении курсора мыши на компонент TImage, ПЛАВНО увеличить его и изображение в нём (либо только изображение) в 0,8 раз за ~1 сек. исключая мерцание. После "ухода" курсора мышки изображение и\или компонент необходимо так же ПЛАВНО возратить в "прежний облик". Заранее спасибо. 
|  |   Вопрос задал: Free (статус: Посетитель)Вопрос отправлен: 19 июня 2009, 20:08
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 4; последнее сообщение — 22 июня 2009, 20:59; участников в обсуждении: 3. 
|   | min@y™ (статус: Доктор наук), 20 июня 2009, 13:37 [#1]:Плавно не получится, мерцать будет однозначно, причём это всё сильно зависит от видеокарты. Тут надо юзать OpenGL или DirectX. Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Free (статус: Посетитель), 20 июня 2009, 19:42 [#2]:Хорошо, если нельзя без мерцания, не ислользуя OpenGL или DirectX, то скажите пожалуйста, как это просто сделать. Да, кстати, маленькое уточнение, увеличить и уменьшить нужно ОТНОСИТЕЛЬНО ЦЕНТРА. |  
|   | IlluminatI (статус: 2-ой класс), 22 июня 2009, 15:36 [#3]:Попробуй так, это листинг программы, тут поток еще есть, можно без него: 
 (Листинг):
 
 unit Unit1;
 
 interface
 
 uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, jpeg, ExtCtrls;
 
 type
 TForm1 = class(TForm)
 Image1: TImage;
 procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 procedure Image1Click(Sender: TObject);
 procedure FormCreate(Sender: TObject);
 private
 { Private declarations }
 public
 { Public declarations }
 end;
 
 type TZoomThread = class(TThread)
 private
 public
 protected
 procedure Zoom;
 procedure ZoomOut;
 procedure Execute; override;
 end;
 
 var
 Form1: TForm1;
 Potok: TZoomThread;
 n: boolean;
 
 implementation
 
 {$R *.dfm}
 
 procedure TZoomThread.Zoom;
 begin
 Form1.Image1.Left:=Form1.Image1.Left - 1;
 Form1.Image1.Top:=Form1.Image1.Top - 1;
 Form1.Image1.Width:=Form1.Image1.Width + 2;
 Form1.Image1.Height:=Form1.Image1.Height + 2;
 end;
 
 procedure TZoomThread.ZoomOut;
 begin
 Form1.Image1.Left:=Form1.Image1.Left + 1;
 Form1.Image1.Top:=Form1.Image1.Top + 1;
 Form1.Image1.Width:=Form1.Image1.Width - 2;
 Form1.Image1.Height:=Form1.Image1.Height - 2;
 end;
 
 
 procedure TZoomThread.Execute;
 var i: integer;
 begin
 if not(n) then for i:=1 to 120 do Synchronize(Zoom)
 else for i:=1 to 120 do Synchronize(ZoomOut);
 end;
 
 procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 var i,j: integer;
 begin
 end;
 
 procedure TForm1.Image1Click(Sender: TObject);
 begin
 if n then n:=false else n:=true;
 Potok:=TZoomThread.Create(False);
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 n:=true;
 end;
 
 end.
 |  
|   | Free (статус: Посетитель), 22 июня 2009, 20:59 [#4]:Спасибо большое, IlluminatI! Вы мне очень помогли. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |