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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.08.2007, 00:52   #1
s-force
Пользователь
 
Аватар для s-force
 
Регистрация: 24.08.2007
Сообщений: 26
По умолчанию Перетаскивание формы

Бьюсь головой об стенку... Вроде все просто, но ниче не могу сделать... Как сделать перетаскивание формы мышкой (бордерстиль=ноне) ? Т.е. зажал мышку и потащил форму....
s-force вне форума
Старый 29.08.2007, 01:04   #2
Xam
Новичок
Джуниор
 
Регистрация: 29.08.2007
Сообщений: 2
По умолчанию

попробуй в MouseDown формы:

ReleaseCapture;
Self.perform(WM_SysCommand, $F012, 0);
Xam вне форума
Старый 29.08.2007, 10:56   #3
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Угу, а если на форме панелька допустим будет, то что делать будем?
Правильно. Будем делать по-другому...
still_alive вне форума
Старый 29.08.2007, 11:16   #4
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

s-force
А за что вы хотите перетаскивать ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 29.08.2007, 11:44   #5
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Ладно вам, хорош плавить ему моск.
s-force, если еще не убился апстену.... вот то, что тебе надо:
Код:
var
  Form1: TForm1;
 down:boolean=false; {нажатие}
 cx,cy:integer; {координаты старого положения формы}
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
if button = MBLeft then  {если нажатие левой кнопкой то}
 begin
   down:=true;
   cx:=x;{сохраняем старое положение курсора}
   cy:=y;
 end;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
down:=false;{отпустили кнопку}
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
if down then  {если есть нажатие на форме то}
 begin
   Form1.Left:=Form1.Left+x-cx; {двигаем относительно курсора}
   Form1.Top:=Form1.Top+y-cy;
 end;
end;
end.
Полагается, что нажатие будет производиться именно на форму, а не на панель или картинку.........
Для изменения - достаточно вставить соответствующие блоки кода в обработчики нужного компонента.
Alex21 вне форума
Старый 29.08.2007, 11:57   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Мсье знает толк в извращениях =)
Все проще )

procedure WMNCHITTEST(var Msg: TMessage); message WM_NCHITTEST;

procedure Tform1.WMNCHITTEST(var Msg: TMessage);
begin
inherited;
Msg.Result := HTCAPTION;
end;

procedure Tform1.FormCreate(Sender: TObject);
begin
SetWindowLong(Handle, GWL_STYLE,
GETWINDOWLONG(Handle, GWL_STYLE) and (not WS_CAPTION));
Height := ClientHeight;
end;
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума
Старый 29.08.2007, 12:14   #7
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Иногда проще - не есть лучше =)

сор, за офтоп.
Alex21 вне форума
Старый 29.08.2007, 13:45   #8
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

Цитата:
Сообщение от Alex21 Посмотреть сообщение
Ладно вам, хорош плавить ему моск.
s-force, если еще не убился апстену.... вот то, что тебе надо:
Код:
var
  Form1: TForm1;
 down:boolean=false; {нажатие}
 cx,cy:integer; {координаты старого положения формы}
implementation
{$R *.dfm}

...
Полагается, что нажатие будет производиться именно на форму, а не на панель или картинку.........
Для изменения - достаточно вставить соответствующие блоки кода в обработчики нужного компонента.
Если во время перетаскивания форма потеряет фокус (окно левое вылезло, alt-tab нажали etc..) то она "приклеется" к мыше, и будет таскаться за ней (до первого-второго клика), даже если левая кнопка не нажата. Несмертельно конечно, но неприятно
пыщь
JTG вне форума
Старый 31.08.2007, 07:35   #9
Alex21
With best regards
Участник клуба
 
Регистрация: 20.04.2007
Сообщений: 1,448
По умолчанию

Вот еще вариант:
Код:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DragMove = $F012;
begin
  ReleaseCapture;
  Form1.perform(WM_SysCommand, SC_DragMove, 0);
end;
Alex21 вне форума
Старый 06.09.2007, 13:51   #10
Master-Skull
Пользователь
 
Регистрация: 10.08.2007
Сообщений: 43
По умолчанию

размести
Код:
ReleaseCapture;
Perform(WM_SYSCOMMAND, $F012, 0);
на Form.MouseDown
а потом везде за что надо перетаскивать на моусдаун эту процедуру воткни
Комьютер не поддаётся законам физики:
Глюки появляются из неоткуда, файлы пропадают в никуда...
Объём диска называется весом и измеряется в метрах...

---------------------------------------------------
Дрова для модема находятся на диске, а дрова для дисковода - в интернете...
Master-Skull вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перетаскивание geniy Компоненты Delphi 9 12.01.2009 02:10
Перетаскивание окон werat Свободное общение 2 18.08.2008 11:58
Перетаскивание обьектов Witaliy Общие вопросы Delphi 6 27.04.2008 19:22
Перетаскивание формы за любой объект,находящийся на ней Романнн Общие вопросы Delphi 2 04.11.2007 16:00