powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / "Таскание" компонентов
22 сообщений из 22, страница 1 из 1
"Таскание" компонентов
    #32318728
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочется сделать таскание Image мышью. Делаю Im.DragMode := dmAutomatic;
При Im.DragKind = dkDrag таскать не разрешает, а при ImDragKind = dkDock становится в отдельном окошке и не понятно как его вернуть обратно на панель. Как правильно сделать? Наверное нужно что-то еще настроить.
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318735
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если под "тасканием" ты понимаешь docking - то посмотри примеры которые с Delphi идут - там есть достаточно подробный
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318817
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня рисунок в TImage, который лежит на панели.
Я хочу чтобы его можно было мышью таскать в пределах этой панели(ну как в дельфях можно все компоненты таскать по форме при проектировании).

to funikovyuri
Спасибо, буду смотреть docking (хотя по-моему это не то что мне нужно...)
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318823
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да - скорее всего - ты о Drag&Drop - там большей частью ручками
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318835
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где бы простенький примерчик посмотреть (никогда не занимался Drag&Drop)?
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318877
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал все руками (на C++Builder-e):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
int XDown,YDown;
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
   TImage* im = dynamic_cast<TImage*>(Sender);
   if (Shift.Contains(ssLeft))
   {
     im->Left += X-XDown;
     im->Top += Y-YDown;
   }
}
// ---------------------------------------------------------------------------
 

void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
   XDown = X;
   YDown = Y;
}

Не понятно почему ЭТО еще и имеет отдельное "понтовое" название Drag&Drop.
Или я чего-то не понял?
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318942
Ray Adams
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор писал:Не понятно почему ЭТО еще и имеет отдельное "понтовое" название Drag&Drop.
Или я чего-то не понял?
Ты чего то как раз и не понял :), Drag&Drop - это не компонент таскать и вообще не от Delphi/BCB он пришел, а от Windows. Ты же целый день это делаеш в индах, таская иконки и так далее. (хотя конечно есть различия между Дельфиским Drag&Drop и Виндовом). Тебе просто надо компоненты в ран тайме двигать?
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318963
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор писал:Тебе просто надо компоненты в ран тайме двигать?
Да мне нужно просто мышью гонять по панели компонент Image.
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318967
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже много раз делал так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
var
  _x,_y:integer;

procedure TfoAbout.FormCreate(Sender: TObject);
begin
    image1.OnMouseMove:=nil;
end;

procedure TfoAbout.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  image1.OnMouseMove:=Image1MouseMove;
  _x:=x;
  _y:=y;
end;

procedure TfoAbout.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
    image1.left:=x-_x+image1.left;
    image1.top:=y-_y+image1.top;
end;

procedure TfoAbout.Image1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  image1.OnMouseMove:=nil;
end;

никаких проблем.

Viman
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318979
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to viman

Да я именно так и сделал (см. мой пример на Builder-e).
Только я не понял зачем нужно image1.OnMouseMove:=nil;?
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32318987
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя строка if (Shift.Contains(ssLeft)) проверяет нажата кнопка или нет. У меня не проверяется. Когда нажимаешь кнопку, процедура mousemove будет вызываться, отпускаешь, mousemove=nil и уже не вызывается...

Viman
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319015
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странный способ проверки нажата ли клавиша...
Ведь именно для этого и существует TShiftState.

to Ray Adams

Хотелось бы узнать про то как применить Drag&Drop к моей задаче. И нужно ли это делать?
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319038
Фотография viman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чего странного? Зачем обрабатывать какие то события если это уже не требуется...

Viman
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319076
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to viman

В mousemove=nil вообще-то есть смысл.

to Ray Adams

Ах, да :
автор писал:Drag&Drop - это не компонент таскать
А для чего он нужен?
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319091
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно кстати и с Automatic сделать.
Дело в том что это так Док устроен, если ты на форме/панели поместишь еще два Image и подвигаешь их ручками (ManualFloat, ManualDock), и сделаешь их невидимыми, то видимый 3-й имаг и все остальные созданные после него, не будут выстраиваться в окошко и обратно при повторном клике, а будт нормально таскаться. Правда будут другие проблемы, например при выносе объекта вообще за пределы формы, надо будет отслеживать это. Но зато при автоматик Dock не надо рисовать квадратик самому (граница переносимого объекта)
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319094
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это кстати в Архангельском описана методика, бывают и в дурацких книжках полезные весчи :)
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319189
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Sclif

В моем случае лучше так не делать. Таскать квадратик менее удобно (для пользователя), чем сразу рисунок. Да и за чем мне "гемморой" с невидимыми имеджами?
А проверку чтобы не вылезал за панель мне и так приходится делать.
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32319873
Sclif
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну гемороя то нет никакого, 6 строчек кода. Надо только учитывать что у тебя на форме два лишних DockedComponents вот и все... Квадратик конечно не здорово, но зато глюки практически исключены.

Ну на вкус и цвет конечно :) Как хотите.
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32321425
Nemec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а попробуй на MouseDown:

const SC_DragMove = $F012
begin
ReleaseCapture;
TWinControl(Sender).SetFocus;
TWinControl(Sender).Perform(WM_SysCommand, SC_DragMove, 0);
TWinControl(Sender).Repaint;
end;
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32321571
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Nemec

То что ты написал по-моему глупость.
У TImage нельзя сделать SetFocus.
Что-то не понял суть твоей идеи.
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32321787
Nemec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
:) нет не глупость, а просто кусок, взятый из программы и не адаптированный к вашим нуждам. нужно зреть в корень!

пробуйте так:

procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
ReleaseCapture;
TWinControl(Sender).Perform(WM_SysCommand, SC_DragMove, 0);
end;

и плюс передать нажатие:
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Panel1MouseDown(Panel1, Button, Shift, X, Y);
end;

у меня все перемещается, дальше уж вы как-нибудь сами, ок? :)
...
Рейтинг: 0 / 0
"Таскание" компонентов
    #32321793
Nemec
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
рисунок, я поместил в панель и двигаю по сути панель
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / "Таскание" компонентов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]