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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.04.2009, 12:30   #1
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию Как перемещать label с помощью мыши?

Как перемещать label с помощью мыши? Попробовал сделать как с Image (присваивать значение координат label координатам мыши) не получается.

Подскажите кто может, плиз.
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 11.04.2009, 12:36   #2
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
Радость

Заведите логическую переменку, и при нажатии на label присваивайте true, а при отпускании false. Далее надо завести еще 2 MouseX и MouseY и при перемещении мыши их обновлять, и заодно если первая переменка =true, то двигать label .
Levsha100 вне форума Ответить с цитированием
Старый 11.04.2009, 12:42   #3
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Так вроде и делаю. Но не работает. Может ошибка.

Цитата:
x0, x1: Integer;
move: Boolean;


procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x0:=x;
x1:=y;
end;


procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if Move then

begin

with label1 do
begin
left:=left+x-x0;
top:= top+y-x1;

x0:= x;
x1:= y;
end;

end;


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

move:= False;

end;
Цель, для которой требуются неправые средства, не есть неправая цель.
Лукманов Александр вне форума Ответить с цитированием
Старый 11.04.2009, 12:53   #4
Levsha100
Заблокирован
Старожил
 
Регистрация: 20.07.2008
Сообщений: 4,033
По умолчанию

Вы забыли прописать
Код:
move:= True;
в
Код:
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
x0:=x;
x1:=y;
end;
P.S.Мне кажется что сам label перемещать неудобно, можно его поместить в панельку, например.

Последний раз редактировалось Levsha100; 11.04.2009 в 12:58.
Levsha100 вне форума Ответить с цитированием
Старый 11.04.2009, 12:56   #5
Лукманов Александр
работа не волк....
Форумчанин
 
Аватар для Лукманов Александр
 
Регистрация: 09.06.2008
Сообщений: 337
По умолчанию

Спасибо. Щас всё работает. Правда очень не красиво перемещается. Label не успевает за мышью, сильно отстаёт.


Цитата:
P.S.Мне кажется что сам label перемещать неудобно, можно его поместить в панельку, например.
Такой вариант не подходит. Label должен быть прозрачным.
Цель, для которой требуются неправые средства, не есть неправая цель.

Последний раз редактировалось Лукманов Александр; 11.04.2009 в 13:01.
Лукманов Александр вне форума Ответить с цитированием
Старый 11.04.2009, 13:01   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

черт, опоздал я
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 11.04.2009, 23:18   #7
Niarb
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 38
По умолчанию

а не красиво перемещается и отстает от мыши все потому, что вы используете непосредственные координаты на Label1. Если сильне двинуть в сторону мышью, то Label вслед может и не сдвинуться. Лучше использовать следующее:
Код:
  mov: boolean=false;
  p: TPoint;

procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var dx, dy: integer;
      dp: TPoint;
begin
   if not mov then
      exit;
   dp:=label1.ScreenToClient(mouse.CursorPos);
   dx:=p.X-dp.X;
   dy:=p.Y-dp.Y;
   label1.Left:=Label1.Left-dx;
   label1.Top:=Label1.Top-dy;
   p:=label1.ScreenToClient(mouse.CursorPos);
end;

procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   mov:=true;
   p:=label1.ScreenToClient(mouse.CursorPos);
end;

procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
   mov:=false;
end;
Чем меньше вы знаете, тем больше я ценен как специалист...
Niarb вне форума Ответить с цитированием
Старый 12.04.2009, 01:10   #8
VVM
Форумчанин
 
Аватар для VVM
 
Регистрация: 06.06.2007
Сообщений: 282
По умолчанию

Если бы не это:
Цитата:
Такой вариант не подходит. Label должен быть прозрачным.
То можно было бы поступить малость экзотично, кинув Label на Panel (как уже было предложено), а потом сделать так:
Код:
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Panel1.Perform(WM_SysCommand, $F012, 0);
end;
Не важно, как часто вы падаете. Важно, как часто вы поднимаетесь. Винс Ломбарди.

Последний раз редактировалось VVM; 12.04.2009 в 01:14.
VVM вне форума Ответить с цитированием
Старый 12.04.2009, 01:40   #9
JTG
я получил эту роль
Старожил
 
Аватар для JTG
 
Регистрация: 25.05.2007
Сообщений: 3,694
По умолчанию

У TStaticText есть хэндл, но прозрачность не пашет (вернее при включённой прозрачности цвет просто меняется на цвет родительского контрола)

procedure TForm1.StaticText1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
(sender as TStaticText).Perform(WM_SysCommand, $F012, 0);
end;
пыщь
JTG вне форума Ответить с цитированием
Старый 26.11.2018, 20:23   #10
Yandex
Новичок
Джуниор
 
Регистрация: 04.03.2010
Сообщений: 1
По умолчанию Выкрутился так

Кинул на форму ещё tStaticText(=ST).visible=false
В onMouseDown() от Label прописал:
Код:
ST.(x,y,w,h,font,caption) := Label;
ST.visible := true;
ReleaseCapture;
ST.perform(WM_SysCommand, SC_DragMove, 0);
в onMouseMove() от ST прописал:
Код:
Label.(x,y) := ST;
ST.visible := false;
Вышло не дурно! ))
Yandex вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перемещать строки вверх-вниз, с помощью стрелок. Rio309 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 27.10.2008 21:47
Как с помощью Microsoft Excel написать программу, позволяющую перемещать предмет на плоскости? Vova4kA Microsoft Office Excel 10 28.05.2008 14:18
Помогите! Как реализовать перемещение панель GroupControl с помощью мыши. Slavon Общие вопросы .NET 0 14.05.2008 13:49
как с помощью TScrollBar перемещать содержимое TMemo вверх или вниз Sanprof Общие вопросы Delphi 3 04.03.2008 00:39
Как перемещать TShape с помощью мыши? SaCREDO Помощь студентам 1 29.03.2007 00:37