![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
мне необходимо заблокировать перемещение формы за ее заголовок и заблокировать нажатия на системные кнопки меню пишу на delphi 2009 сколько на форумах повычитывал у меня не работает или я что то не так делаю???
Помогите пожалуйста!!! Заранее огромное спасибо!!! |
|
#2
|
||||
|
||||
|
"перемещение формы за ее заголовок"- что это значит?
Установи в св-ах Form1 -> BorderIcons нужные пункты в False и запрети закрытие формы: Код:
procedure Form1.FormClose(Sender: TObject; var Action: TCloseAction); begin action :=caNone; end; |
|
#3
|
|||
|
|||
|
в том то и дело что кнопки должны иметь видимость равной True
а мне надо отключить события при нажатии на них Мне надо запретить перемещение формы за ее заголовок |
|
#4
|
|||
|
|||
|
Код:
...
type
TForm1 = class(TForm)
private
{ Private declarations }
procedure WMSYSCOMMAND(var Msg: TMessage); message WM_SYSCOMMAND;
procedure WMWINDOWPOSCHANGING(var Msg: TMessage); message WM_WINDOWPOSCHANGING;
public
{ Public declarations }
end;
....
procedure TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
if (Msg.WParam <> SC_MAXIMIZE) and
(Msg.WParam <> SC_MINIMIZE) and
(Msg.WParam <> SC_CLOSE) then inherited;
end;
procedure TForm1.WMWINDOWPOSCHANGING(var Msg: TMessage);
var
wp: PWindowPos;
begin
wp := PWindowPos(Pointer(Msg.LParam));
wp^.flags := wp^.flags or SWP_NOMOVE;
Msg.LParam := Integer(wp);
inherited;
end; |
|
#5
|
|||
|
|||
|
Огромное спасибо
|
|
#6
|
|||
|
|||
|
А как запретить вызов системного меню при нажатии на иконку в заголовке
|
|
#7
|
|||
|
|||
|
В принципе, можно вообще заставить ваше окно игнорировать сообщение WM_SYSCOMMAND
Код:
procedure TForm1.WMSYSCOMMAND(var Msg: TMessage);
begin
{ I do nothing }
end; |
|
#8
|
|||
|
|||
|
а как назначить перехват перемещения тока для формы которая создается внутри к примеру Panel:
Код:
procedure TForm1.Button1Click(Sender: TObject); var F:TForm; begin F:=TForm.Create(self); F.Parent:=panel1; F.Name:='MyForm1'; F.Caption:='Моя форма'; F.Top:=1; //координата 1 F.Left:=1; //координата 2; F.Show;// - показ формы end; |
|
#9
|
|||
|
|||
|
Код:
unit FormInPanel;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
OldWndProc: Integer;
Form1: TForm1;
F:TForm;
function NewWndProc(hndl: HWND; msg: UINT;
wPrm: WPARAM; lPrm: LPARAM): LRESULT; stdcall;
implementation
{$R *.dfm}
function NewWndProc(hndl: HWND; msg: UINT;
wPrm: WPARAM; lPrm: LPARAM): LRESULT; stdcall;
var
wp: PWindowPos;
begin
if msg = WM_WINDOWPOSCHANGING then
begin
wp := PWindowPos(Pointer(lPrm));
wp^.flags := wp^.flags or SWP_NOMOVE;
lPrm := Integer(wp);
end;
Result := CallWindowProc(Pointer(OldWndProc), F.Handle,
msg, wPrm, lPrm);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
F:=TForm.Create(self);
F.Parent:=panel1;
F.Name:='MyForm1';
F.Caption:='Моя форма';
F.Top:=1; //координата 1
F.Left:=1; //координата 2;
F.Show;// - показ формы
OldWndProc := SetWindowLong(F.Handle, GWL_WNDPROC, Integer(@NewWndProc));
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if F <> nil then
begin
SetWindowLong(F.Handle, GWL_WNDPROC, OldWndProc);
F.Free;
end;
Application.Terminate;
end;
end.Разберетесь?? =) |
|
#10
|
|||
|
|||
|
уже разобрался
Спасибо осталось лишь теперь запретить показ меню при нажатии на иконку формы |