Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.11;
Скачать: CL | DM;

Вниз

Как запретить двигать форму?   Найти похожие ветки 

 
Бегун   (2004-04-28 18:14) [0]

subj


 
Gero ©   (2004-04-28 18:18) [1]

ShowMessage("Форму двигать запрещено! За нарушение - штраф 1000$!");


 
Gero ©   (2004-04-28 18:19) [2]

Да, забыл сказать, это надо в WM_MOVE писать...


 
Бегун   (2004-04-28 18:21) [3]

Это понятно.

type
 TfrmAdd = class(TForm)
 public
   procedure WMMove(var m: TMessage); message WM_MOVE;
 end;

procedure TfrmAdd.WMMove(var m: TMessage);
begin
А ЧТО ЗДЕСЬ ПИСАТЬ?
end;


 
Бегун   (2004-04-28 18:23) [4]

procedure TfrmAdd.WMMove(var m: TMessage);
begin
frmAdd.Left:=100;
frmAdd.Top:=100;
end;

Так мигает :(


 
Gero ©   (2004-04-28 18:25) [5]

M.Result := 0;


 
Бегун   (2004-04-28 18:29) [6]

>Gero ©   (28.04.04 18:25) [5]

Все равно мигает, когда пытаюсь передвинуть.
Хочу что-бы не мигало, когда пытаюсь передвинуть.


 
Gero ©   (2004-04-28 18:36) [7]

Уберите у формы заголовок.
И тогда юзер ее двигать не сможет.


 
Бегун   (2004-04-28 18:41) [8]

>Gero ©   (28.04.04 18:36) [7]

Такое решение имеет место быть :)

А что-бы не убирать заголовок?


 
Игорь Шевченко ©   (2004-04-28 18:52) [9]

Gero ©   (28.04.04 18:19)

WM_MOVE - это нотификационное сообщение (уведомление об изменении позиции)

Бегун   (28.04.04 18:41)

WM_WINDOWPOSCHANGING

" An application can prevent changes to the window by setting or clearing the appropriate bits in the flags member of WINDOWPOS. "


 
Sanek_metaller ©   (2004-04-29 00:04) [10]

BorderStyle:=bsnone;


 
DVM ©   (2004-04-29 00:24) [11]

WM_MOVING тогда уж, а не WM_MOVE


 
Бегун   (2004-04-29 01:47) [12]

Народ, или я тупой или лыжи не едут...
Использую WM_WINDOWPOSCHANGING, WM_MOVING
все равно форма мигает, если пытаюсь её тащить.. :(

Давайте еще раз четко изложу задачу.

Я ХОЧУ РАЗРЕШАТЬ/ЗАПРЕЩАТЬ ДВИГАТЬ ФОРМУ.

На форме frmAdd положим cbMove: TCheckBox.
Если True - двигать можно, если False - нельзя.

Как это сделать?


 
default ©   (2004-04-29 02:17) [13]

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
   Button1: TButton;
   procedure Button1Click(Sender: TObject);
 protected
   procedure WMNCHITTEST(var Msg: TWMNCHITTEST); message WM_NCHITTEST;
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;
 CanMove: Boolean = True;

implementation

{$R *.dfm}

procedure TForm1.WMNCHITTEST(var Msg: TWMNCHITTEST);
begin
inherited;
if not CanMove then if Msg.Result = HTCAPTION then Msg.Result := HTCLIENT
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
CanMove := not CanMove
end;

end.


 
Бегун   (2004-04-29 03:06) [14]

Спасибо, работает.


 
DVM ©   (2004-04-29 10:37) [15]


> Бегун   (29.04.04 03:06) [14]

А если подвинуть программно, то не сработает.


 
ChainikDenis ©   (2004-05-20 20:31) [16]

А еще не сработает если вызвать меню в правом углу формы "переместить". Проверил!


 
tesseract ©   (2004-05-21 09:17) [17]

А зачем тебе заголовок - кинь на форму панель и замаскируё под неё - и на фи не надо все сообщения обрабатывать - винда и без лишнего вмешательства логадается чем процессор занять.


 
GEN   (2004-05-21 13:07) [18]

>Бегун
Загодовок убирать не надо. Просто координаты мыши надо переустанавливать "внутрь формы", пусть Win думает, что пытаемся тащить не за заголовок


 
WebErr ©   (2004-05-21 18:23) [19]


> Использую WM_WINDOWPOSCHANGING, WM_MOVING
> все равно форма мигает, если пытаюсь её тащить.. :(

Ты процедуру Abort знаешь?
Используй её в WM_WINDOWPOSCHANGING процедуре!!!
Неужели не доходит! :))))


 
WebErr ©   (2004-05-21 18:28) [20]

Просто напиши между begin и end слово Abort; !


 
LMD ©   (2004-05-21 23:23) [21]


> Ты процедуру Abort знаешь?
> Используй её в WM_WINDOWPOSCHANGING процедуре!!!


Если ты пробовал, то приведи рабочий код. Если не пробовал, то не сбивай людей с толку, Abort в обработчике сообщения не приводит к нужному эффекту.


 
tesseract ©   (2004-05-22 11:56) [22]

А зачем тебе неперетасиваемое окно с заголовком? ну накатай свой, похожий. Юзер увидев окно с заголовком сразу начнёт его перетаскивать - так-что лучше не парься.


 
Глеб ©   (2004-05-29 13:50) [23]

for i := 1 to 10000000 do
begin
 
ShowMessage("Чтобы переместить форму, тебе придётся все эти сообщения закрыть :-)");

end;


:-)


 
Ivolg   (2004-05-30 15:44) [24]

unit Unit1;

interface

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

type
 TFrmAdd = class(TForm)
   CheckBox1: TCheckBox;
   procedure FormMouseMove(Sender: TObject; Shift: TShiftState;      X,Y: Integer);
  procedure CheckBox1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 FrmAdd: TFrmAdd;
 b:boolean;
implementation

{$R *.dfm}
procedure TFrmAdd.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
begin
   if b then
   ReleaseCapture;
   Perform(wm_SysCommand,$F012,0);
end;

procedure TFrmAdd.CheckBox1Click(Sender: TObject);
begin
   b:=not b
end;

end.
и на FormCreate или в ручную:
BorderStyle:=bsnone;


 
Глеб ©   (2004-05-31 11:00) [25]

запустить бесконечный цикл


 
grom   (2004-05-31 15:49) [26]

а можно попровывать вот так
   public { Public declarations }
   Procedure WMGetSysCommand(var Message:TMessage);message WM_SYSCOMMAND;
========================
 procedure TForm1.WMGetSysCommand(var Message:TMessage); //**
 begin
 if (CheckBox1.Checked)or(Message.wParam=SC_MINIMIZE)or(Message.wParam=SC_CLOSE)
 or(Message.wParam=SC_MAXIMIZE)//и так далее...
  then inherited;
 end;


 
MetalFan ©   (2004-05-31 17:30) [27]

хех) а как вам:
align := alCustom ?


 
grom   (2004-06-01 08:55) [28]

[27] align := alCustom -прощее не придумаеш


 
inic ©   (2004-06-01 10:46) [29]

Лучше поздно, чем никогда!!!

WM_WINDOWPOSCHANGING: begin
  PWindowPos(ALParam)^.flags:=
     PWindowPos(ALParam)^.flags or SWP_NOMOVE or SWP_NOSIZE;
  Result:= 0;
end;



Страницы: 1 вся ветка

Текущий архив: 2004.07.11;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.034 c
14-1087305175
Gero
2004-06-15 17:12
2004.07.11
Фотки форумчан


1-1088246582
X9
2004-06-26 14:43
2004.07.11
CM_MOUSEENTER, CM_MOUSELEAVE и TSpeedButton


3-1087278583
Andrey
2004-06-15 09:49
2004.07.11
Программно добавить ODBC DSN


14-1087977890
infom
2004-06-23 12:04
2004.07.11
Где можно скачать видео голы с Евро2004 только не RealOne?


14-1087819676
Undert
2004-06-21 16:07
2004.07.11
Тупенький вопрос по JS