![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Запрет перемещения формы..
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