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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2008, 14:22   #1
shadowofjustice
Новичок
Джуниор
 
Регистрация: 15.06.2008
Сообщений: 2
Вопрос Drag and Dock

Здравствуйте!
В общем возник вопрос, на который пока я никак не могу найти ответа. Инет

облазил насколько мог. В общем проблема вот в чем.
В программе возникла необходимость перемещать Image с помощью мыши

(естественно чтобы он не вылазил за пределы формы и т.д. - но это потом).

Тщетные попытки использования Docking почти ни к чему не привели: через

одно перемещение он превращается в отдельный тулбар, а наследующее опять

липнет к форме.
Я нашел исходники как сделать его без панельки заголовка, но все равно он

только через раз липнет к форме и событие OnEndDock соответсвенно тоже

через раз срабатывает.
Помогите плиз.
З.Ы. может можно сделать это как-то проще через Drag?
shadowofjustice вне форума Ответить с цитированием
Старый 15.06.2008, 16:20   #2
Witaliy
Форумчанин Подтвердите свой е-майл
 
Регистрация: 27.04.2008
Сообщений: 179
По умолчанию

А не пойдет через OnMouseUp, OnMouseMove, OnMouseDown?

Вот код. Попробуй.

procedure TForm1.imageMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
dow:=true;
ox:=x;
oy:=y;
end;

procedure TForm1.imageMouseMove(Sender: TObject; Shift: TShiftState; X
Y: Integer);
begin
if dow=true then
begin
image.Top:=image.Top-(oy-y);
image.Left:=image.Left-(ox-x);
end;
end;

procedure TForm1.imageMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
dow:=true;
end;
www.programmer.uaforums.net - Український форум програмістів.

www.satellite.ipsys.net - Український форум супутникового телебачення.
Witaliy вне форума Ответить с цитированием
Старый 16.06.2008, 12:59   #3
shadowofjustice
Новичок
Джуниор
 
Регистрация: 15.06.2008
Сообщений: 2
По умолчанию

работает...но есть недочет - картинка мелькает, когда ее перетаскиваешь...а это не есть хорошо, хотелось бы избавиться от этого
shadowofjustice вне форума Ответить с цитированием
Старый 16.06.2008, 18:35   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
Сообщение

мерцание менее заметно визуально когда используют ДвойнойБуфер:
Код:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 dow:=true;
 ox:=x;
 oy:=y;
 DoubleBuffered := true;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if dow=true then
 begin
  image1.Top:=image1.Top-(oy-y);
  image1.Left:=image1.Left-(ox-x);
 end;
end;

procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 dow:=false;
 DoubleBuffered := false;
end;
Alter вне форума Ответить с цитированием
Старый 16.06.2008, 19:05   #5
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

"мерцание менее заметно визуально когда используют ДвойнойБуфер:" когда сделано с головой оно вообще не заметно, и как вы искали если данный вопрос уже многократно обсуждался, чего только уже не двигали на этом форуме
BOBAH13 вне форума Ответить с цитированием
Старый 17.11.2008, 18:04   #6
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Может и этот вопрос уже обсуждался, но в этой тебе как раз и процедуры прописаны - очень удобно.. А вопрос такой: у меня этих имеджей 17 штук и каждую надо двигать... Это надо для каждого по 3 процедуры эти прописывать или можно один раз для всех как-то?
yulia вне форума Ответить с цитированием
Старый 17.11.2008, 18:39   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

1. Не обязательно три процедуры, достаточно одной MouseMove с обработкой параметра Shift (только не спрашивайте что это за параметр и как узнать его значения =)), ладно, немного подскажу: if ssLeft in Shift then ... это для левой кнопки.

2. Имиджи в массив, и общий обработчик. В инспекторе выберите каждому имиджу его или в коде ImageX.OnMouseMove:=ВашОбработчик;
* узнать какой же имидж его вызвал можно из параметра Sender
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 17.11.2008, 20:48   #8
yulia
Форумчанин
 
Аватар для yulia
 
Регистрация: 24.03.2007
Сообщений: 314
По умолчанию

Спасибо )))
yulia вне форума Ответить с цитированием
Старый 18.11.2008, 06:35   #9
Altera
Старожил
 
Аватар для Altera
 
Регистрация: 29.01.2008
Сообщений: 2,406
По умолчанию

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
"мерцание менее заметно визуально когда используют ДвойнойБуфер:" когда сделано с головой оно вообще не заметно, и как вы искали если данный вопрос уже многократно обсуждался, чего только уже не двигали на этом форуме
А что так голословно?
Может примерчик кинул бы?
Altera вне форума Ответить с цитированием
Старый 18.11.2008, 13:10   #10
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Реализация интерфейса плавающих окон (Drag&Dock), не написав ни одной строчки кода:

Установите свойство docksite формы в true. А у имеджей установите свойство dragmode в dmautomatic, а свойство dragkind в dock. Вот и все.

Запустите ваше приложение. При щелчке по какому-нибудь из имеджей у него появятся атрибуты плавающего окна и его спокойно можно будет перемещать по экрану.
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Mac OS X - Dock for WinNT BOBAH13 Софт 55 29.10.2008 15:29
Drag&Drop в ListBox'ах MAKEDON Общие вопросы Delphi 3 21.08.2008 13:12
Drag&Drop shtuceron Общие вопросы Delphi 3 09.04.2008 19:04
Drag and Drop Xardas Общие вопросы Delphi 8 20.01.2008 23:09