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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.01.2010, 17:06   #1
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию Смещение компонента

помогите двигаю компоненты через таймер и при щелчке по компоненту он смещается

Код:
var
  Form1: TForm1;
  Save_Object:TObject;
  posX , posY:integer;
implementation

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
if Save_Object.ClassName='TButton' then
begin
(Save_Object as TButton).Left:=mouse.CursorPos.X-(Save_Object as TButton).Parent.Left-posX;
(Save_Object as TButton).Top:=mouse.CursorPos.Y-(Save_Object as TButton).Parent.Top-posY;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Save_Object:=TObject.Create;
end;

procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
Save_Object:=Sender;

posX:=X;
posY:=Y;
timer1.Enabled:=true;
end;

для того что бы он не смещался я писал так
Код:
(Save_Object as TButton).Left:=mouse.CursorPos.X-(Save_Object as TButton).Parent.Left-posX-4;
(Save_Object as TButton).Top:=mouse.CursorPos.Y-(Save_Object as TButton).Parent.Top-posY-30;
но при переносе на другой компьютер опять появлялось смещение при щелчке. как можно это решить?
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 18.01.2010, 17:13   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А почему в таймере?
Не проще ли для этого использовать Drag&Drop или
Код:
const
  Sc_dragmove = $F012;
begin
  ReleaseCapture;
  Perform(WM_SYSCOMMAND, Sc_dragmove, 0);
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.01.2010, 17:35   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Возможно, ТС хочет реализовать шутку такую - тронешь мышкой компонент, а он "убегает"...
mihali4 вне форума Ответить с цитированием
Старый 18.01.2010, 21:55   #4
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

нет мне нужно просто перетаскивать компонент внутри формы. а при использовании Drag&Drop компонент может выходить за пределы формы или я ошибаюсь
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 18.01.2010, 22:14   #5
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Вот посмотри эти ссылки 1 и 2.
А также вот пример, по примеру как описано в ссылках выше:

з.ы. надеюсь понял я вас правильно, что вам надо.
Вложения
Тип файла: rar prim.rar (5.1 Кб, 11 просмотров)
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 18.01.2010, 22:19   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так Стилет уже дал готовый код... Повторю для слабовидящих:
Код:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  Button1.perform(WM_SysCommand,SC_DragMove,0);
end;
Цитата:
Сообщение от spamer Посмотреть сообщение
mihali4, ТС чего то не понравилось в коде
Он просто не увидел слова "или" и решил, что это - драг/дроп...

Последний раз редактировалось mihali4; 18.01.2010 в 22:37.
mihali4 вне форума Ответить с цитированием
Старый 18.01.2010, 22:31   #7
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

mihali4, ТС чего то не понравилось в коде, на сколько я понял, вот я ему и дал другой вариант. И никаких "слабовидящих", я прекрасно видел код Stilet - и всего лишь предложил другой вариант. Вот и все - не более.
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 18.01.2010, 23:47   #8
Volt
Форумчанин
 
Аватар для Volt
 
Регистрация: 07.12.2008
Сообщений: 244
По умолчанию

данный вариант
Код:
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  perform(WM_SysCommand,SC_DragMove,0);
end;
почему то не работает с TImage
|̲̅̅●̲̅̅|̲̅̅=̲̅̅|̲̅̅●̲̅̅]
Volt вне форума Ответить с цитированием
Старый 19.01.2010, 10:38   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
почему то не работает с TImage
Вполне может быть. TImage не обрабатывает такое сообщение - это же просто канва.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.01.2010, 00:36   #10
DomiNick
Студент, не
Старожил
 
Аватар для DomiNick
 
Регистрация: 29.01.2009
Сообщений: 2,067
По умолчанию

Цитата:
данный вариант
...
почему то не работает с TImage
TImage - не является "окном"... Придётся обрабатывать MouseMove у нужного TImage...
I am the First of Cyber Evolution...
I am the First to Program your Future...
DomiNick вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Смещение ячеек Zulius Microsoft Office Excel 3 26.11.2009 12:30
Смещение изображений при изминении разрешения Utyfe HTML и CSS 13 23.03.2009 12:41
Смещение в WinHex bmw Софт 4 22.03.2009 02:16
Смещение формулы в CrystalReports. HELP!! billidean Общие вопросы .NET 0 05.09.2008 17:27