Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.02.21;
Скачать: CL | DM;

Вниз

Как установить размеры клиентской части окна?   Найти похожие ветки 

 
Б   (2009-12-17 19:52) [0]

Здрасти!

Имеется окно. (не VCL)
Как установить размеры его клиентской части?
Т.е. без заголовка и бордера.
Функции SetClientRect нету.


 
Eraser ©   (2009-12-17 20:23) [1]

> [0] Б   (17.12.09 19:52)

можно глянуть как сделано в VCL и реализовать так же.


 
DVM ©   (2009-12-17 20:37) [2]


> Б   (17.12.09 19:52) 

WM_NCCalcRect


 
Б   (2009-12-17 21:12) [3]


> WM_NCCalcRect


Delphi говорит неизвезвестный индификатор.


 
Б   (2009-12-17 21:18) [4]

Может Вы перепутали с WM_NCCALCSIZE?


 
DVM ©   (2009-12-17 21:46) [5]


> Может Вы перепутали с WM_NCCALCSIZE?

Да, перепутал. Вот видишь сам нашел.


 
Б   (2009-12-17 21:47) [6]

Вроде бы нашёл эту функцию - AdjustWindowRect.


 
Б   (2009-12-17 21:49) [7]

Решил протестить на VCL окне.
Нажимаю кнопку и ничего не менятся. Что не так?



procedure TForm1.Button1Click(Sender: TObject);
Var
 R: TRect;
begin
 SetRect(R, 0, 0, 300, 250);
 AdjustWindowRect(R, GetWindowLong(Handle, GWL_STYLE), False);
 // False говорит, что окно без меню.
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 Caption:= IntToStr(ClientWidth) + " : " + IntToStr(ClientHeight);
end;



 
DVM ©   (2009-12-17 21:56) [8]


> Нажимаю кнопку и ничего не менятся. Что не так?

Эта функция вычисляет требуемые размеры прямоугольника, но не меняет окно.


 
Б   (2009-12-17 22:15) [9]

Усё работает. ;)
Теперь окно создаётся во весь экран.


procedure TForm1.Button1Click(Sender: TObject);
Var
 R: TRect;
begin
 SetRect(R, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
 AdjustWindowRect(R, GetWindowLong(Handle, GWL_STYLE), False);
 MoveWindow(Handle, R.Left, R.Top, R.Right - R.Left, R.Bottom - R.Top , True);
end;


 
Б   (2009-12-17 22:18) [10]

А что лучше использовать AdjustWindowRect или AdjustWindowRectEx?
В последнем ещё передается eX-стиль окна.
У моего окна расширенный стиль меняется. И поэтому думаю надо применять последнюю функцию? Да?


 
DVM ©   (2009-12-17 22:19) [11]


> Б   (17.12.09 22:15) [9]


> Теперь окно создаётся во весь экран.

Цель всех этих манипуляций - создать окно на весь экран? Если да, то выбран явно не лучший способ.


 
Б   (2009-12-17 22:21) [12]


> Цель всех этих манипуляций - создать окно на весь экран?
>  Если да, то выбран явно не лучший способ.


Да, цель именно такая.
Подробнее здесь: http://delphimaster.net/view/2-1260506010/

А как тогда сделать? Максимизировать что ли?


 
DVM ©   (2009-12-17 22:21) [13]


> Да?

чего ты хочешь добиться в результате? И что ты имеешь в начале?


 
DVM ©   (2009-12-17 22:24) [14]


> А как тогда сделать? Максимизировать что ли?

Менять стили окна попутно с размерами и положением. Можно и максимизировать. Не вижу причин мучать клиентскую область.


 
Б   (2009-12-17 22:33) [15]

> Можно и максимизировать

Попробуем.

ShowWindow(Handle, SW_SHOWMAXIMIZED);
Только шапка остаётся, но т.к. стили окна меняются не страшно.



Страницы: 1 вся ветка

Текущий архив: 2010.02.21;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.015 c
15-1260567020
Юрий
2009-12-12 00:30
2010.02.21
С днем рождения ! 12 декабря 2009 суббота


2-1261130070
pg81
2009-12-18 12:54
2010.02.21
Как проверить существет ли еще форма в frm:TMyTypeForm?


2-1261117696
maximkok
2009-12-18 09:28
2010.02.21
Как применить тему xp(.theme) без предупреждения?


2-1261467325
pg81
2009-12-22 10:35
2010.02.21
Как передать адрес метода из dll в приложение и присвоить его соб


15-1260851935
Делфиец
2009-12-15 07:38
2010.02.21
Бибилиотека JEDI сомпонентов бесплатна?