Форум: "Начинающим";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];
ВнизЗапрет перемещения формы.. Найти похожие ветки
← →
AlexDan © (2008-09-26 22:35) [0]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"
С чего это..?((
← →
{RASkov} © (2008-09-26 22:37) [1]> [0] AlexDan © (26.09.08 22:35)
Вот так попробуйprocedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
Inherited;
if Message.Result=HTCAPTION then Message.Result:=HTCLIENT;
end;
Только перемещать такую форму можно ...с клавиатуры :)
← →
AlexDan © (2008-09-26 22:38) [2]Удалено модератором
← →
{RASkov} © (2008-09-26 22:40) [3]> [0] AlexDan © (26.09.08 22:35)
> Result := HTNOWHERE; - [Error] Unit1.pas(39): Incompatible types: "Integer" and "THitTest"
Что-то ты напутал как обычно...) Сейчас опять закроют ветку :)
← →
AlexDan © (2008-09-26 22:40) [4]Нет, то что ты написал, работает, спасибо..
← →
{RASkov} © (2008-09-26 22:42) [5]> [2] AlexDan © (26.09.08 22:38)
Точно закроют) Прибей ее гвоздями :)
Попробуй глянуть в сторону сообщений WM_MOVE или WM_MOVING
← →
DVM © (2008-09-26 22:42) [6]
> мне бы вообще..
Вообще это к WM_WINDOWPOSCHANGING
← →
{RASkov} © (2008-09-26 22:43) [7]> [4] AlexDan © (26.09.08 22:40)
Кликни правой кнопкой по заголовку и выбери "Переместить".... Теперь "стрелочками" "таскай" ее :)
← →
DVM © (2008-09-26 22:43) [8]WM_MOVING и WM_SIZING тоже можно, но WM_WINDOWPOSCHANGING это наиболее общее
← →
AlexDan © (2008-09-26 22:43) [9]> {RASkov} © (26.09.08 22:42) [5]
И кстати, что значит
> Только перемещать такую форму можно ...с клавиатуры :)
что значит с клавиатуры? Попробовал, вроде не перемещается..
← →
{RASkov} © (2008-09-26 22:46) [10]> [9] AlexDan © (26.09.08 22:43)
Даже и мышкой таскается :)
Вызови системное меню (Окна)формы и выбери "Переместить" ну и мышкой как обычно таскается... до клика)
См сообщения выше.
← →
AlexDan © (2008-09-26 22:48) [11]> {RASkov} © (26.09.08 22:46) [10]
Да, и к тому же можно её мышкой за бардюр сложить..( Что ж делать..?:(
← →
{RASkov} © (2008-09-26 22:49) [12]Удалено модератором
← →
DVM © (2008-09-26 22:50) [13]
> Что ж делать..?
все уже написано
← →
AlexDan © (2008-09-26 22:51) [14]Ну да, буду смотреть WM_WINDOWPOSCHANGING..
← →
AlexDan © (2008-09-26 23:11) [15]Ага, спасибо всем, почти получилось..)
← →
{RASkov} © (2008-09-26 23:16) [16]> [15] AlexDan © (26.09.08 23:11)
> почти получилось..)
:)
Ты чего там воротишь? Там кода - две дельных строчки ....я думаю)
← →
berrometr (2008-09-26 23:26) [17]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.
← →
AlexDan © (2008-09-26 23:31) [18]> {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;
Вот и две..). И стоит всё мёртво, как вкопанное..).
← →
AlexDan © (2008-09-26 23:34) [19]Удалено модератором
← →
{RASkov} © (2008-09-26 23:40) [20]> [19] AlexDan © (26.09.08 23:34)
В общем-то одна :) ...дельная, остальные так это, для прихвата)
← →
berrometr (2008-09-26 23:55) [21]а все - таки переместить окно можно и изменяя его размеры.
так что перехватывай и это.. ))
← →
AlexDan © (2008-09-27 00:25) [22]Не, в [18] и размеры изменить нельзя..
← →
DVM © (2008-09-27 17:00) [23]
> berrometr (26.09.08 23:55) [21]
WM_WINDOWPOSCHANGING позволяет контролировать все изменения размеров и положения окон. Причем даже по оси Z, а не только по X и Y.
← →
AlexDan © (2008-09-27 22:07) [24]Удалено модератором
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.11.09;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.006 c