Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 928

/ вопрос открыт /

Приветствую, уважаемые эксперты! Подскажите пожалуйста. Как, при наведении курсора мыши на компонент TImage, ПЛАВНО увеличить его и изображение в нём (либо только изображение) в 0,8 раз за ~1 сек. исключая мерцание. После "ухода" курсора мышки изображение и\или компонент необходимо так же ПЛАВНО возратить в "прежний облик". Заранее спасибо.

Free Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Free (статус: Посетитель)
Вопрос отправлен: 19 июня 2009, 20:08
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 4; последнее сообщение — 22 июня 2009, 20:59; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 20 июня 2009, 13:37 [#1]:

Плавно не получится, мерцать будет однозначно, причём это всё сильно зависит от видеокарты. Тут надо юзать OpenGL или DirectX.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Free

Free (статус: Посетитель), 20 июня 2009, 19:42 [#2]:

Хорошо, если нельзя без мерцания, не ислользуя OpenGL или DirectX, то скажите пожалуйста, как это просто сделать. Да, кстати, маленькое уточнение, увеличить и уменьшить нужно ОТНОСИТЕЛЬНО ЦЕНТРА.
IlluminatI

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

Free (статус: Посетитель), 22 июня 2009, 20:59 [#4]:

Спасибо большое, IlluminatI! Вы мне очень помогли.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.