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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2008, 23:39   #1
chandrasecar
Форумчанин
 
Аватар для chandrasecar
 
Регистрация: 03.10.2008
Сообщений: 180
По умолчанию Перемещаем панель по форме мышью

Здравствуйте.
На форме есть панель, которую можно перемещать мышью по форме. Код такой:
Код:
procedure TForm1.Panel1MouseDoun(Sender: TObject; Button: TMouseDoun; Shift: TShiftState; X, Y: Integer);
const SC_DragMove = $F012;
begin
   ReleaseCapture;
   Panel1.Perform(WM_SysCommand,SC_DragMove,0);
end;
Вопрос в следующем: как реализовать прилипание панели к определенной точке на форме, когда панель находится в ее окрестностях?
Пробовал через таймер, но панель оч. неприятно дергается...
Заранее благодарен.
лучший подарок женщине-программисту
chandrasecar вне форума Ответить с цитированием
Старый 10.10.2008, 00:04   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

А зачем таймер ? Чтобы к точке используйте расчеты - движения в ручную. OnMouseDown, OnMouseMove, OnMouseUp в таком духе. А как расчитать в сети примеров куча
BOBAH13 вне форума Ответить с цитированием
Старый 10.10.2008, 00:07   #3
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Так пойдёт?
Код:
unit Units;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormPaint(Sender: TObject);
    procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Const Xx :Integer=25;
      Yy :Integer=40;
      Rr :Integer=15; //радиус от точки

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.FormPaint(Sender: TObject);
begin //визуализация области
 Canvas.Brush.Color := clBlue;
 Canvas.Pen.Color := clRed;
 Canvas.Ellipse(Xx-Rr, Yy-Rr, Xx+Rr, Yy+Rr);
 Canvas.Pixels[Xx, Yy] := clRed;
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 With TControl(Sender) DO
 If (Left in [Xx-Rr..Xx+Rr]) And (Top in [Yy-Rr..Yy+Rr]) then
 begin
  Left := Xx;
  Top := Yy;
 end;
end;

end.
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот за мышью??? Kostia Gamedev - cоздание игр: Unity, OpenGL, DirectX 34 29.06.2009 15:02
Работа с мышью Amery Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 28.05.2008 21:19
Как создать программу-панель (как панель Msoffice), чтобы была поверх всех окон Romanbl4 Общие вопросы Delphi 6 27.06.2007 17:23