Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
ВнизonClick и проблемы таскания компонентов Найти похожие ветки
← →
Ray © (2006-05-21 23:00) [0]Дано: форма, на форме панель, на панели пять Image
Надо: таскать мышкой эти Image по панели
Большая просьба уважаемым гуру привести пример, как это реализуется.
← →
Eraser © (2006-05-21 23:43) [1]
> Ray © (21.05.06 23:00)
См. события OnMouseDown/Up/Move.
Создай флаг, который сброшен если кнопка мыши не нажата и установле, когда нажата. В событии OnMouseMove проверяй этот флаг, если он установлен - перемещай компонент на смещение от прошлых X и Y, потом сохраняй эти X и Y на место старых.
← →
DevilDevil © (2006-05-22 01:05) [2]
// процедура делает окно перемещаемым
procedure SetMoveMode(Handle : THandle);
begin
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, $F012, 0);
end;
// -----------------------------------------------
// Image1.OnMouseDown
begin
if Button=mbLeft then // эту строку не обязательно писать
SetMoveMode(Image1.Handle);
end;
Вообще такой подход к DragDrop не является стандартным (который вообще мало где где описывается, я видел в книге "Delphi для Чайников"), зато действенный. Работает со всеми элементами управления, которые в терминологии Windows являются окном. В качестве параметра указывай Handle этого компонента, можешь Form1.Handle
← →
Eraser © (2006-05-22 01:07) [3]
> DevilDevil © (22.05.06 01:05) [2]
> Работает со всеми элементами управления, которые в терминологии
> Windows являются окном
вот только TImage как раз и не является окном :-)
← →
DevilDevil © (2006-05-22 01:39) [4]
вот только TImage как раз и не является окном :-)
нее, является. На самом деле Image это тот же самый Label, в терминологии Windows они являются Static окнами... Другое дело, что чё то не получается мне их Handle раздобыть... Странно! Надо новую тему заводить, как найти Handle Имэйджа
← →
Eraser © (2006-05-22 02:13) [5]
> DevilDevil © (22.05.06 01:39) [4]
>
> вот только TImage как раз и не является окном :-)
> нее, является. На самом деле Image это тот же самый Label,
> в терминологии Windows они являются Static окнами...
ошибаешься.
← →
Elen © (2006-05-22 08:17) [6]
> Ray ©
Это вариант с TShape попробуй его для других компонентов
XMouse YMouse - Глобальные координаты мышкиunit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Shape1: TShape;
procedure Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
function XMouse:integer; function YMouse:integer;
var
Form1: TForm1;
implementation
//********** FUNCTION **********
function XMouse;
var t:tpoint;
begin
windows.GetCursorPos(t);result:=t.X;
end;
//********** END FUNCTION ******
//********** FUNCTION **********
function YMouse;
var t:tpoint;
begin
windows.GetCursorPos(t);result:=t.y;
end;
//********** END FUNCTION ******
{$R *.dfm}
procedure TForm1.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if shape1.Tag=2 then begin
Shape1.Top:=YMouse-form1.Top-50 ;
Shape1.Left:=XMouse-Form1.Left-50;
end;
end;
procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
shape1.Tag:=2;
end;
procedure TForm1.Shape1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
shape1.Tag:=1;
end;
end.
> Ray ©
← →
Ray © (2006-05-22 20:37) [7]То, что надо! Спасибо!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.06.11;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.013 c