Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
Бегун   (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 вся ветка

Форум: "WinAPI";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.032 c
3-1086685053
serg128
2004-06-08 12:57
2004.07.11
Как динамически добавить поле типа Lookup в TClientDataSet?


1-1088449248
Godness
2004-06-28 23:00
2004.07.11
Объеденить ячейки в Excel e


1-1088591359
BiSido
2004-06-30 14:29
2004.07.11
Как поменять из верхнего регистра в нижний (русские буквы)? (+)


1-1088084759
ПсихЪ_клон
2004-06-24 17:45
2004.07.11
Как убить окно?


14-1087502053
lak
2004-06-17 23:54
2004.07.11
клава с японским





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский