![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() уже разобрался
Спасибо осталось лишь теперь запретить показ меню при нажатии на иконку формы |