![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как запретить двигать форму? [D6, Win2k]
Бегун © (2004-04-28 18:14:00)subj
inic (2004-06-01 10:46:00) [1]Лучше поздно, чем никогда!!!
WM_WINDOWPOSCHANGING: begin
PWindowPos(ALParam)^.flags:=
PWindowPos(ALParam)^.flags or SWP_NOMOVE or SWP_NOSIZE;
Result:= 0;
end;
grom (2004-06-01 08:55:00) [2][27] align := alCustom -прощее не придумаеш
MetalFan (2004-05-31 17:30:00) [3]хех) а как вам:
align := alCustom ?
grom (2004-05-31 15:49:00) [4]а можно попровывать вот так
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;
Глеб (2004-05-31 11:00:00) [5]запустить бесконечный цикл
Ivolg (2004-05-30 15:44:00) [6]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-29 13:50:00) [7]
for i := 1 to 10000000 do
begin
ShowMessage('Чтобы переместить форму, тебе придётся все эти сообщения закрыть :-)');
end;
:-)
tesseract (2004-05-22 11:56:00) [8]А зачем тебе неперетасиваемое окно с заголовком? ну накатай свой, похожий. Юзер увидев окно с заголовком сразу начнёт его перетаскивать - так-что лучше не парься.
LMD (2004-05-21 23:23:00) [9]
> Ты процедуру Abort знаешь?
> Используй её в WM_WINDOWPOSCHANGING процедуре!!!
Если ты пробовал, то приведи рабочий код. Если не пробовал, то не сбивай людей с толку, Abort в обработчике сообщения не приводит к нужному эффекту.
WebErr (2004-05-21 18:28:00) [10]Просто напиши между begin и end слово Abort; !
WebErr (2004-05-21 18:23:00) [11]
> Использую WM_WINDOWPOSCHANGING, WM_MOVING
> все равно форма мигает, если пытаюсь её тащить.. :(
Ты процедуру Abortзнаешь?
Используй её в WM_WINDOWPOSCHANGING процедуре!!!
Неужели не доходит! :))))
GEN (2004-05-21 13:07:00) [12]>Бегун
Загодовок убирать не надо. Просто координаты мыши надо переустанавливать "внутрь формы", пусть Win думает, что пытаемся тащить не за заголовок
tesseract (2004-05-21 09:17:00) [13]А зачем тебе заголовок - кинь на форму панель и замаскируё под неё - и на фи не надо все сообщения обрабатывать - винда и без лишнего вмешательства логадается чем процессор занять.
ChainikDenis (2004-05-20 20:31:00) [14]А еще не сработает если вызвать меню в правом углу формы 'переместить'. Проверил!
DVM (2004-04-29 10:37:00) [15]
> Бегун (29.04.04 03:06) [14]
А если подвинуть программно, то не сработает.
Бегун (2004-04-29 03:06:00) [16]Спасибо, работает.
default (2004-04-29 02:17:00) [17]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 01:47:00) [18]Народ, или я тупой или лыжи не едут...
Использую WM_WINDOWPOSCHANGING, WM_MOVING
все равно форма мигает, если пытаюсь её тащить.. :(
Давайте еще раз четко изложу задачу.
Я ХОЧУ РАЗРЕШАТЬ/ЗАПРЕЩАТЬ ДВИГАТЬ ФОРМУ.
На форме frmAdd положим cbMove: TCheckBox.
Если True - двигать можно, если False - нельзя.
Как это сделать?
DVM (2004-04-29 00:24:00) [19]WM_MOVING тогда уж, а не WM_MOVE
Sanek_metaller (2004-04-29 00:04:00) [20]BorderStyle:=bsnone;