|
Вопрос # 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! Вы мне очень помогли.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|