![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте! Требуется реализовать динамическое создание объекта с возможностью менять его положение (вроде как создать ярлык на раб столе и потом его таскать зажав мышку). Юзер нажал ПКМ, выбрал создать, появился объект квадратной формы (вот тут что лучше? баттон либо что еще?), наведя и зажав мышку юзер мог бы таскать этот объект по форме или скрол боксу. С динам. созданием ничего сложного, но какой объект лучше создавать и как реализовать его перетягивание?
|
|
#2
|
||||
|
||||
|
Цитата:
Цитата:
|
| Этот пользователь сказал Спасибо Bargest за это полезное сообщение: | ||
nano_bot (07.01.2014)
| ||
|
#3
|
||||
|
||||
|
Лучше имидж - проще. Предварительно надо завести глобальную триаду процедур жима мышки, примерно такую
Код:
var
Xi, Yi : integer;
flg: boolean;
...
procedure TForm1.ImgMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if button = mbLeft then
begin
flg:= true;
Xi:= X;
Yi:=Y;
end;
end;
procedure TForm1.ImgMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if flg then
begin
(Sender as TImage).SetBounds(
(Sender as TImage).Left+X-Xi,
(Sender as TImage).Top+Y-Yi,
(Sender as TImage).width,
(Sender as TImage).height);
end;
end;
procedure TForm1.ImgMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
flg:= false;
end;Код:
with TImage.Create(Form1) do begin ... OnMouseDown:= ImgMouseDown; OnMouseMove:= ImgMouseMove; OnMouseUp:= ImgMouseUp; end; Последний раз редактировалось Alegun, 07.01.2014 в 18:56. |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
nano_bot (07.01.2014)
| ||
|
#4
|
||||
|
||||
|
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TDragPanel = class(TPanel)
private
procedure WMLBUTTONDOWN(var Message: TMessage); message WM_LBUTTONDOWN;
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
const
SC_DRAGMOVE = 61458;
{ TDragPanel }
procedure TDragPanel.WMLBUTTONDOWN(var Message: TMessage);
begin
ReleaseCapture;
SendMessage(Handle, WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
with TDragPanel.Create(Self) do
begin
Parent:=Self;
Caption:='Drag me...';
end;
end;
end. |
|
#5
|
||||
|
||||
|
Кстати, а для баттона можно это делать вот так
Код:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if ssCtrl in Shift then begin ReleaseCapture; SendMessage((Sender as TButton).Handle, WM_SYSCOMMAND, 61458, 0); end; end; |