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


Автор: Олег_Игоревич 19.4.2005, 09:56
Доброго ВАМ времени суток !!!
Подскажите пожалуйста , как можно зафиксировать окно например в правом верхнем углу экрана, чтобы пользователь не смог его ни сдвинуть ни свернуть???
Заранее спасибо !!!

Автор: mvdr 19.4.2005, 10:05
Ставишь BorderStyle в bsNone, сдвигаешь форму в нужный угол. единственный недостаток - надо (если надо ) прописать кнопки свернуть, развернуть...

Автор: Pathfider 19.4.2005, 19:45
А еще ради прикола можно воткнуть Form1.FormStyle:=fsStayOnTop;

Автор: Dimannn 21.4.2005, 21:19
Или поставь таймер с интервалом 1 и в обработчике таймера:
Код

Form1.Left:=0;
Form1.Top:=0;

Автор: mvdr 23.4.2005, 21:55
Цитата(Dimannn @ 21.4.2005, 22:19)
Или поставь таймер с интервалом 1 и в обработчике таймера:
не прокатит, окно потом двигать можно.
Хотя в сочитании с formStyle, наверно пройдет.

Автор: Dimannn 25.4.2005, 20:36
Окно двигать можно, но далеко его не удвинешь - обратно вернётся, а гемор с кнопочками закрыть и сверныть проподает

Автор: Yanis 25.4.2005, 20:50
Можно ещё
Код

Align := alTop;

Только окно всегда будет "расплываться" по всему краю экрана.

Автор: drinkOut 25.4.2005, 22:11
Cтавишь свойство формы Align в значение alTop, а в обработчике события формы OnCreate пишешь:
Код
Screen.DisableAlign;

Автор: Rouse_ 26.4.2005, 09:19
Ну а вообще просто прижать форму без всяких стилей и т.п. можно вот так:

Код

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    procedure WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
    procedure WMWindowPosChanging(var Message: TWMWindowPosChanging); message WM_WINDOWPOSCHANGING;
    procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
  end;

var
  Form1: TForm1;

implementation

const
  FormWidth = 300;
  FormHeight = 150;

{$R *.dfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin
  Left := 0;
  Top := 0;
end;

procedure TForm1.WMGetMinMaxInfo(var Message: TWMGetMinMaxInfo);
begin
  with Message.MinMaxInfo^ do
  begin
    ptMinTrackSize.X := FormWidth;
    ptMinTrackSize.Y := FormHeight;
    ptMaxTrackSize.X := FormWidth;
    ptMaxTrackSize.Y := FormHeight;
  end;
  inherited;
end;

procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
  with Message.WindowPos^ do
  begin
    x := 0;
    y := 0;
    cx := FormWidth;
    cy := FormHeight;
  end;
  inherited;
end;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
  with Message do
    if (CmdType and $FFF0 <> SC_MINIMIZE) and
      (CmdType and $FFF0 <> SC_MAXIMIZE) then inherited;
end;

end.


Устанешь отдирать ;)

Автор: Олег_Игоревич 26.4.2005, 10:48
Спасибо огромное!!! Работает!
Добавлено @ 10:48
Спасибо огромное!!! Работает!

Автор: Payne 27.4.2005, 17:51
А вообще лучше всего поставить свойство Align в alCustom smile

Автор: drinkOut 27.4.2005, 17:59
Payne, тогда мы не достигнем желаемого результата. smile

Автор: Payne 28.4.2005, 12:29
drinkOut
В чем проблема? Окно-то будет всегда на одном месте. А если отключишь кнопки
сворачивания и максимизации в свойстве BorderIcons, то юзер вообще не сможет никак повлиять на окно smile - только закрыть. Так что я думаю, этот вариант как нельзя лучше подходит к заданному в этой теме вопросу.
Действует, кстати, точно так же как

Цитата(drinkOut @ 25.4.2005, 22:11)
Screen.DisableAlign;


С учетом того, что тебе не придется писать лишних строчек кода.

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