Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > фиксированное положение окна формы


Автор: vitaly74 25.10.2005, 09:49
нобходимо беспечить фиксированное положение окна формы при работе программы

Автор: z-END 25.10.2005, 09:51
убири заголовок у окна и нарисуй свой, или перхватывай сообщения о пермещении формы

Автор: Vet 25.10.2005, 17:40
В смысле, чтоб его нельзя было перетащить? Тогда можно попоробовать так:
Код

private
  procedure WMWindowPosChanging(var Msg: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;

...

const
 WindowLeft = 100;
 WindowTop = 100;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WMWindowPosChanging(var Msg: TWMWindowPosChanging);
begin
 Msg.WindowPos.x := WindowLeft;
 Msg.WindowPos.y := WindowTop;
end;


Автор: MacTep 26.10.2005, 11:42
А этот код защищает от такого перемещения: нажать Alt, вылезет менюшка окна, выбрать переместить и попробовать стрелками передвинуть???

Автор: RideX 26.10.2005, 18:08
MacTep, можно сделать так, заголовок будет "мёртвый", никаких менюшек не будет вообще, окно закрывается по Alt+F4 или своей кнопкой на форме!
Код

  private
    { Private declarations }
    procedure FormNoMove(var Msg: TWMNCHitTest);message WM_NCHITTEST;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormNoMove(var Msg: TWMNCHitTest);
begin
 if Msg.Result = HTCAPTION then
  Msg.Result := HTCLIENT;
end;


end.

Автор: Vet 26.10.2005, 23:18
Цитата(MacTep @ 26.10.2005, 11:42)
А этот код защищает от такого перемещения: нажать Alt, вылезет менюшка окна, выбрать переместить и попробовать стрелками передвинуть???

Форма-то перемещается, но потом она возвращается на место

RideX, да, заголовок действительно мертвый smile Хотя у меня пару раз получилось вызвать системное меню и клавишами переместить форму

Автор: RideX 27.10.2005, 10:17
Цитата(Vet @ 26.10.2005, 23:18)
у меня пару раз получилось вызвать системное меню и клавишами переместить форму

Хм... А вот так тогда точно не получится, попробуй smile
Код

  private
    { Private declarations }
    procedure FormNoMove(var Msg: TWMNCHitTest);message WM_NCHITTEST;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormNoMove(var Msg: TWMNCHitTest);
begin
 inherited;
 if Msg.Result = HTCAPTION then
  Msg.Result := HTCLIENT;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  hSysMenu: HMENU;
begin
  hSysMenu := GetSystemMenu(Handle, False);
  DeleteMenu(hSysMenu, SC_MOVE, MF_BYCOMMAND);
  DeleteMenu(hSysMenu, SC_SIZE, MF_BYCOMMAND);
  DeleteMenu(hSysMenu, SC_MINIMIZE, MF_BYCOMMAND);
  DeleteMenu(hSysMenu, SC_MAXIMIZE, MF_BYCOMMAND);
  EnableMenuItem(hSysMenu, SC_CLOSE, MF_BYCOMMAND + MF_GRAYED);
  DrawMenuBar(Handle);
end;

end.

Автор: Vet 27.10.2005, 17:14
Цитата(RideX @ 27.10.2005, 10:17)
А вот так тогда точно не получится, попробуй
Да я даже пробовать не буду. Сдается мне, если удалить пункты из меню, то выбрать их не получится smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)