Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перемещение формы

15K
22 сентября 2006 года
Stalker-vir
9 / / 21.04.2006
Подскажите как можно передвигать форму если пользователь "захватил" не за заголовок окна, а за клиент пространство - точнее за компонент Panel т.к саму форму не видно.
Заранее Спасибо!
19K
22 сентября 2006 года
Релорт
17 / / 14.09.2006
Обрабатывай WMNCHitTest. А ля:
 
Код:
private
procedure WMNCHitTest (var M: TWMNCHitTest); message wm_NCHitTest;
//
// ля ля ля жу жу жу :)
//
procedure TYourFormName.WMNCHitTest (var Msg:TWMNCHitTest);
begin
  inherited;
  if (Msg.Result = htClient) then Msg.Result := htCaption;
end;


Это было раз :)

Можно еще обработать нажание мышкой на панели. Это два 8)
 
Код:
procedure TYourFormName.YourPaneName_lMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Perform(WM_SYSCOMMAND, $F012, 0);
end;


Есть еще способы :) Но и этого должно хватит за глаза :)
10
22 сентября 2006 года
Freeman
3.2K / / 06.03.2004
[QUOTE=Релорт]
 
Код:
procedure TYourFormName.YourPaneName_lMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ReleaseCapture;
  Perform(WM_SYSCOMMAND, $F012, 0);
end;
[/QUOTE]
Видимо, $F012 - это SC_MOVE?
4.9K
16 октября 2006 года
77713
43 / / 22.02.2006
Попробуй так:

Код:
unit Unit1;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ExtCtrls, jpeg;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  protected
    // Перехват сообщения WM_NCHITTEST для перемещения окна без заголовка.
    procedure WMNCHitTest(var Message: TWMNCHitTest);  message WM_NCHITTEST;
  public
    { Public declarations }
    procedure CreateParams(var Params: TCreateParams); override;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
  // Результат HTCAPTION означает, что курсор находится над заголовком:
  Message.Result := HTCAPTION;
end;

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  // Окно с рамкой (WS_THICKFRAME), но без заголовка (WS_POPUP):
  Params.Style := WS_THICKFRAME or WS_POPUP;
end;

end.
339
18 октября 2006 года
verybadbug
619 / / 12.09.2005
если интересует перетаскивание именно за панель - можно так....
Код:
TForm1 = class(TForm)
...
  private
    OldX, OldY: Integer;
...
  end;
...
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  OldX := X;
  OldY := Y;
end;
...
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if Shift = [ssLeft] then begin
    Left := Left + (X - OldX);
    Top := Top + (Y - OldY);
  end;
end;
...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог