Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Запрет перемещения формы..


Страницы:   1 2

AlexDan ©   (2008-09-26 22:35:00) 

private
 procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  {...}

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;

  with Message do
  begin
    if Result = HTCAPTION then
      Result := HTNOWHERE;
  end;
end;
Судя по форумам у всех работает, а у меня пишет:
Result := HTNOWHERE; - [Error] Unit1.pas(39): Incompatible types: 'Integer' and 'THitTest'
С чего это..?((


AlexDan   (2008-09-27 22:07:00) [1]

Удалено модератором


DVM   (2008-09-27 17:00:00) [2]


> berrometr   (26.09.08 23:55) [21]

WM_WINDOWPOSCHANGING позволяет контролировать все изменения размеров и положения окон. Причем даже по оси Z, а не только по X и Y.


AlexDan   (2008-09-27 00:25:00) [3]

Не, в [18] и размеры изменить нельзя..


berrometr   (2008-09-26 23:55:00) [4]

а все - таки переместить окно можно и изменяя его размеры.
так что перехватывай и это.. ))


{RASkov}   (2008-09-26 23:40:00) [5]

> [19] AlexDan ©   (26.09.08 23:34)

В общем-то одна :) ...дельная, остальные так это, для прихвата)


AlexDan   (2008-09-26 23:34:00) [6]

Удалено модератором


AlexDan   (2008-09-26 23:31:00) [7]

> {RASkov} ©   (26.09.08 23:16) [16]
> Ты чего там воротишь? Там кода - две дельных строчки ...
> я думаю)
Да нет, не две..

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
FDisableChange : boolean;
protected
procedure WMWINDOWPOSCHANGING(var Message: TWMWINDOWPOSCHANGING); message WM_WINDOWPOSCHANGING;
public
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMWINDOWPOSCHANGING(var Message: TWMWINDOWPOSCHANGING);
begin
if FDisableChange then begin
message.WindowPos.flags := message.WindowPos.flags or SWP_NOMOVE or SWP_NOSIZE;
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
FDisableChange := false;
{width := 100;}
FDisableChange := true;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
FDisableChange := true;
end;
 Вот и две..). И стоит всё мёртво, как вкопанное..).


berrometr   (2008-09-26 23:26:00) [8]

WM_GETMINMAXINFO - посылается при изменении размеров или положения окна. Обработчик события может использоваться для ограничения допустимых размеров и координат положения на экране.

Определение:

WM_GETMINMAXINFO
lpmmi = (LPMINMAXINFO) lParam; // address of structure

Параметр lpmmi указывает на структуру типа MINMAXINFO, содержащую принятые по умолчанию пределы изменения размеров и координат положения окна. Описание этой структуры:

typedef struct tagMINMAXINFO { // mmi
POINT ptReserved;
POINT ptMaxSize;
POINT ptMaxPosition;
POINT ptMinTrackSize;
POINT ptMaxTrackSize;
} MINMAXINFO;

Поля структуры означают следующее:ptReserved Зарезервировано и пока не используется
ptMaxSize Поле типа Point определяет ширину (Point.x) и высоту (Point.y) развернутого окна
ptMaxPosition Поле типа Point определяет положение левого (Point.x) и верхнего (Point.y) краев развернутого окна
ptMinTrackSize Поле типа Point определяет минимальную ширину (Point.x) и минимальную высоту (Point.y) окна при изменении пользователем размеров его рамки.
ptMaxTrackSize Поле типа Point определяет максимальную ширину (Point.x) и максимальную высоту (Point.y) окна при изменении пользователем размеров его рамки.

Если приложение обрабатывает это сообщение, оно должно вернуть 0.


{RASkov}   (2008-09-26 23:16:00) [9]

> [15] AlexDan ©   (26.09.08 23:11)
> почти получилось..)

:)
Ты чего там воротишь? Там кода - две дельных строчки ....я думаю)


AlexDan   (2008-09-26 23:11:00) [10]

Ага, спасибо всем, почти получилось..)


AlexDan   (2008-09-26 22:51:00) [11]

Ну да, буду смотреть WM_WINDOWPOSCHANGING..


DVM   (2008-09-26 22:50:00) [12]


> Что ж делать..?

все уже написано


{RASkov}   (2008-09-26 22:49:00) [13]

Удалено модератором


AlexDan   (2008-09-26 22:48:00) [14]

> {RASkov} ©   (26.09.08 22:46) [10]
Да, и к тому же можно её мышкой за бардюр сложить..( Что ж делать..?:(


{RASkov}   (2008-09-26 22:46:00) [15]

> [9] AlexDan ©   (26.09.08 22:43)

Даже и мышкой таскается :)
Вызови системное меню (Окна)формы и выбери "Переместить" ну и мышкой как обычно таскается... до клика)

См сообщения выше.


AlexDan   (2008-09-26 22:43:00) [16]

> {RASkov} ©   (26.09.08 22:42) [5]
И кстати, что значит
> Только перемещать такую форму можно ...с клавиатуры :)
что значит с клавиатуры? Попробовал, вроде не перемещается..


DVM   (2008-09-26 22:43:00) [17]

WM_MOVING и WM_SIZING тоже можно, но WM_WINDOWPOSCHANGING это наиболее общее


{RASkov}   (2008-09-26 22:43:00) [18]

> [4] AlexDan ©   (26.09.08 22:40)

Кликни правой кнопкой по заголовку и выбери "Переместить".... Теперь "стрелочками" "таскай" ее :)


DVM   (2008-09-26 22:42:00) [19]


> мне бы вообще..

Вообще это к WM_WINDOWPOSCHANGING


{RASkov}   (2008-09-26 22:42:00) [20]

> [2] AlexDan ©   (26.09.08 22:38)

Точно закроют) Прибей ее гвоздями :)
Попробуй глянуть в сторону сообщений WM_MOVE или WM_MOVING


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо