Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.03.2012, 20:41   #1
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию Delphi XE2 firemonkey

нужно сделать так что бы 3D объект двигался за курсором мыши
при компиляции ошибка [DCC Error] Unit1.pas(54): E2010 Incompatible types: 'TPoint3D' and 'TPointF'

сам код соответственно

Код:
procedure TForm1.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
var

np, p: TPointF;

nx, ny: Single;

begin

p := Platform.GetMousePos; //Определяем позицию курсора на экране

p := ScreenToClient(p);//Теперь относительно формы

//новая позиция курсора будет в центре нашего обьекта

nx := p.X - cube1.Width / 2;

ny := p.Y - cube1.Height / 2;

np.X := nx;

np.Y := ny;

Form1.Caption := IntToStr(round(nx)) + ' : ' + IntToStr(round(ny)); //выведем на екран в кэпшн формы

cube1.Position.Point := np;//вот и все=)

end;
ST@LKER вне форума Ответить с цитированием
Старый 07.03.2012, 21:05   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну используйте тип TPoint3D, а не TPointF.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.03.2012, 21:12   #3
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

можно вот так попробовать
Код:
procedure TForm1.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
var

np, p: TPointF;

nx, ny: Single;

begin

p := Platform.GetMousePos; //Определяем позицию курсора на экране

p := ScreenToClient(p);//Теперь относительно формы

//новая позиция курсора будет в центре нашего обьекта

nx := p.X - cube1.Width / 2;

ny := p.Y - cube1.Height / 2;

np.X := nx;

np.Y := ny;

Form1.Caption := IntToStr(round(nx)) + ' : ' + IntToStr(round(ny)); //выведем на екран в кэпшн формы

cube1.Position.X := np.X;
cube1.Position.Y := np.Y;

end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 07.03.2012, 21:16   #4
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
ну используйте тип TPoint3D, а не TPointF.
не все так просто Ватсон так будет целых две ошибки
ST@LKER вне форума Ответить с цитированием
Старый 07.03.2012, 21:19   #5
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
можно вот так попробовать
Код:
procedure TForm1.Viewport3D1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Single);
var

np, p: TPointF;

nx, ny: Single;

begin

p := Platform.GetMousePos; //Определяем позицию курсора на экране

p := ScreenToClient(p);//Теперь относительно формы

//новая позиция курсора будет в центре нашего обьекта

nx := p.X - cube1.Width / 2;

ny := p.Y - cube1.Height / 2;

np.X := nx;

np.Y := ny;

Form1.Caption := IntToStr(round(nx)) + ' : ' + IntToStr(round(ny)); //выведем на екран в кэпшн формы

cube1.Position.X := np.X;
cube1.Position.Y := np.Y;

end;
dmitriegorovih, ну почти в цель только после компиляции когда я начинаю двигать курсором КУБ пропадает остается только курсор
ST@LKER вне форума Ответить с цитированием
Старый 07.03.2012, 22:27   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
не все так просто Ватсон так будет целых две ошибки
у меня нет ХЕ2 чтоб на них посмотреть, в студию.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.03.2012, 22:29   #7
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у меня нет ХЕ2 чтоб на них посмотреть, в студию.
[DCC Error] Unit1.pas(39): E2010 Incompatible types: 'TPoint3D' and 'TPointF'
[DCC Error] Unit1.pas(41): E2010 Incompatible types: 'TPointF' and 'TPoint3D'

на эти две строки

p := Platform.GetMousePos; //Определяем позицию курсора на экране

p := ScreenToClient(p);//Теперь относительно формы
ST@LKER вне форума Ответить с цитированием
Старый 07.03.2012, 23:29   #8
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var

np, p: TPointf;

nx, ny: Single;

pp:TPoint;

begin
cube1.Projection:=TProjection(1);
getcursorpos(pp);
p.X:=pp.X;
p.Y:=pp.Y;

//p := GetMousePos; //Определяем позицию курсора на экране

p := form1.ScreenToClient(p);//Теперь относительно формы

//новая позиция курсора будет в центре нашего обьекта

nx := p.X - (cube1.Width / 2);

ny := p.Y - (cube1.Height / 2);

np.X := nx;

np.Y := ny;

Form1.Caption := IntToStr(round(nx)) + ' : ' + IntToStr(round(ny)); //выведем на екран в кэпшн формы

cube1.Position.X := np.X;//вот и все=)
cube1.Position.Y := np.Y;
end;
киньте таймер поставьте 1 милисикунду
P.S. Чесно не давно поставил xe2 пол часа бился с этими типами и очень не восторге от него, лучше Delphi 7 ))))))
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 07.03.2012, 23:47   #9
ST@LKER
Пользователь
 
Регистрация: 25.10.2007
Сообщений: 38
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
Код:
procedure TForm1.Timer1Timer(Sender: TObject);
var

np, p: TPointf;

nx, ny: Single;

pp:TPoint;

begin
cube1.Projection:=TProjection(1);
getcursorpos(pp);
p.X:=pp.X;
p.Y:=pp.Y;

//p := GetMousePos; //Определяем позицию курсора на экране

p := form1.ScreenToClient(p);//Теперь относительно формы

//новая позиция курсора будет в центре нашего обьекта

nx := p.X - (cube1.Width / 2);

ny := p.Y - (cube1.Height / 2);

np.X := nx;

np.Y := ny;

Form1.Caption := IntToStr(round(nx)) + ' : ' + IntToStr(round(ny)); //выведем на екран в кэпшн формы

cube1.Position.X := np.X;//вот и все=)
cube1.Position.Y := np.Y;
end;
киньте таймер поставьте 1 милисикунду
P.S. Чесно не давно поставил xe2 пол часа бился с этими типами и очень не восторге от него, лучше Delphi 7 ))))))
спасибо работает)))
ST@LKER вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление сцен или объектов из 3D MAX в Delphi XE2(FireMonkey) ST@LKER Общие вопросы Delphi 0 06.03.2012 14:44
Delphi XE2 надписи FireMonkey ZBEP Общие вопросы Delphi 1 23.02.2012 20:07
FireMonkey delphi - определение клавиши мыши Fox_su Общие вопросы Delphi 4 15.12.2011 14:36
Cube в firemonkey hd application /xe2/ AlexDn Общие вопросы Delphi 0 01.11.2011 20:43
Embarcadero Delphi XE2 Partner DVD (Зборник компонентов для XE2) volod3000 Софт 2 01.11.2011 02:26