powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить размеры внутренней области окна?
17 сообщений из 17, страница 1 из 1
Как получить размеры внутренней области окна?
    #39748441
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помещаем на форму любой контрол и задаем ему размеры больше видимой области окна. Если использовать ClientRect то получим размеры видимой области, а надо получить размер всей области, в том числе и за границами окна. Вот где это лежит?
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748447
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъВот где это лежит?

VertScrollBar, HorzScrollBar.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748449
Соколинский Борис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,
BoundsRect?
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748471
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Страдалецъ,
Обходи всех детей контрола и объединяй их границы. Описывающий прямоугольник и будет ответом. Разумеется это не будет работать, если границы клиентской части виртуальные, а-ля грид
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748500
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поместил на форму кнопку, с обработчиком

Код: pascal
1.
2.
3.
4.
5.
6.
7.
procedure TForm1.Button1Click(Sender: TObject);
var
  R: TRect;
begin
  R := Button1.ClientRect;
  ShowMessage(R.Width.ToString)
end;




нажимаю, вижу ширину W. Cужаю форму так, чтобы кнопка выходила за ее пределы, нажимаю - все равно вижу ширину W. Что я делаю не так?
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748514
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VertScrollBar, HorzScrollBar? Как именно вы предполагаете их использовать для получения нужных размеров?
BoundsRect как и ClientRect дают информации о видимой части окна, так-что не катит. Обходить все контролы уж очень не хочется, но видимо все-же придется, я собственно по причине лени это делать и задал вопрос на форуме.
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748515
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если только поднять исходники для скролов и там посмотреть откуда они берут данные. Надо попробовать.
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748516
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдCужаю форму так, чтобы кнопка выходила за ее пределы, нажимаю - все равно вижу ширину W. Что я делаю не так?
Я так понимаю, что ему нужен размер формы в этом примере.
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748523
SimplTsar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СтрадалецъVertScrollBar, HorzScrollBar? Как именно вы предполагаете их использовать для получения нужных размеров?
Чтиние исходников и документации никто не запрещал.
При TForm.AutoScroll = True нужные значения будут в *ScrollBar.Range
http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Forms_TControlScrollBar_Range.html
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748536
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Квейд это для меня что-ли пример был? Так он не в ту степ. Тут вот в чем проблема - на форме у меня лежит растягиваемый компонент, и когда он изменяет свои размеры, то содержимое формы бодро уползает за границу формы, несмотря на выставленный флаг AutoSize для формы. Вот я и хочу узнать размеры этой виртуальной оконной области, которые VertScrollBar, HorzScrollBar как-то используют.
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748537
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПри TForm.AutoScroll = True нужные значения будут в *ScrollBar.Range
Если вы о TForm.VertScrollBar.Range, то нет, ожидаемого размера по вертикали не получаем, возвращается всегда 0, хотя и флаг выставлен и скролбар и имеется на форме.
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748540
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъТут вот в чем проблема - на форме у меня лежит растягиваемый компонент, и когда он
изменяет свои размеры, то содержимое формы бодро уползает за границу формы, несмотря на
выставленный флаг AutoSize для формы.

Ну и забей на эту автоматику, делай изменение ручками в OnResize. Оно, заодно, глаже
получится.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748630
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я и хочу его сделать, но для этого надо знать новый размер, а вот с этим то и проблема и тут мы возвращаемся к исходному вопросу в теме. Я в общем-то сделал такую простенькую функцию, она пока работает без учета бордюра и заголовков окна, да и проверок на несоответствие класса нет, но для моей формы работает вроде корректно:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function GetRealBoundRect(Frm: TForm): TRect;
var
  i: Integer;
begin
 Result := Frm.ClientRect;
 for i := 0 to Frm.ComponentCount - 1
 do Result := Result.Union(Result, TControl(Frm.Components[i]).BoundsRect);
end;
  
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748639
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъТак я и хочу его сделать, но для этого надо знать новый размер, а вот с этим то и проблема
и тут мы возвращаемся к исходному вопросу в теме.

И тут мы возвращаемся к третьему ответ в этой теме: устанавливай размер клиентской области
формы в суммарный размер всех необходимых тебе компонентов на ней:
Код: sql
1.
ClientHeight = Label1.Height + 2 + Edit1.Height + 2 + Memo1.Height + 1;


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748718
Страдалецъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем же мне складывать отдельно высоту элементов, к тому-же они могут быть расположены и горизонтально и вертикально на форме и это надо учитывать для получения общей высоты. Куда проще и правильнее использовать объединение всех прямоугольников с получением общего прямоугольника охватывающего все элементы. Для этого я и использую Rect.Union()
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748722
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СтрадалецъЗачем же мне складывать

Затем, что это быстрее и проще. Но хочешь страдать - страдай.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Как получить размеры внутренней области окна?
    #39748737
SimplTsar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СтрадалецъЕсли вы о TForm.VertScrollBar.Range, то нет, ожидаемого размера по вертикали не получаем, возвращается всегда 0, хотя и флаг выставлен и скролбар и имеется на форме.
Код в студию
IDE
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Как получить размеры внутренней области окна?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]