Непонятки с класом TForm

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Непонятки с класом TForm

Сообщение grigoreo » 10.03.2009 15:51:31

решил поднять один проект в Лазарусе , и наткнулся на камень на ровном месте, почемуто у формы свойства Height равно ClientHeight, причем получается по логике оно равно ClientHeight, а размер физически формы немного более, и вот не знаю как быть с отрисовкой формы, я хочу высоту формы со всеми заголовками и бордюрами к примеру 200 а он устанавливает в 200 клиентскую часть формы показывает общую высоту тоже 200 но физически на 25-27 пикселей больше, это проблемы глобального характера или у меня чего то?(пробовал собирать проект на разных версиях паскаля и лазаруса эфект одинаковый)
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: Непонятки с класом TForm

Сообщение Павел Ишенин » 11.03.2009 17:33:19

Это не проблемы какого-либо характера. Height для формы = ClientHeight и все. Это отличается от delphi. Если нужна вся высота - пишите GetWindowSize(Form1.Handle)
Павел Ишенин
постоялец
 
Сообщения: 475
Зарегистрирован: 24.03.2007 10:16:52

Re: Непонятки с класом TForm

Сообщение stikriz » 11.03.2009 17:41:00

Если это так, то это баг.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Непонятки с класом TForm

Сообщение betatester » 11.03.2009 17:49:50

stikriz писал(а):Если это так, то это баг.

Нет. Это связано с тем, что оболочку окна, заголовок и кнопки в Linux добавляет Window Manager. Без Window Manager'а ваша программа все равно будет работать - т.е. рисовать в свою клиентскую область. :wink:
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

Re: Непонятки с класом TForm

Сообщение stikriz » 12.03.2009 10:03:15

Ну и что, что что-то не так с Linux?
Это методологический вопрос. а не вопрос как ведет себя та или иная операционка.
Когда-то давно в Delphi не было ClientWidth и ClientHeight. Все очень по этому поводу переживали.
Сделали - всем понравилось. Если в Lazarus Width - это ClientWidth, тогда нам не нужен ClientWidth, а нужен WindowWidth, чтобы знать размер окна.
Реальный размер окна нужно знать, когда делаешь привязки окна по отношению к десктопу. Мало-ли, я поменял шрифт в заголовке, и теперь моё окно не влазит...
Короче, это баг.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Непонятки с класом TForm

Сообщение alexs » 12.03.2009 20:05:38

Засада в том - как определить размер рамки вокруг окна.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Непонятки с класом TForm

Сообщение stikriz » 13.03.2009 09:31:49

В Винде такой проблемы нет.
Если Линуксоиды не могут определить размер окна, то это еще не значит, что Виндовозникам нужно портить жизнь.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Непонятки с класом TForm

Сообщение grigoreo » 13.03.2009 12:00:55

Спасибо всем за участие, хоть что то понятно, когда знаешь правили игры уже проще , буду пока выкручиватся вашими советами, но получается полную кросплатформеность при отрисовки у моих конструкторов форм не добьешься, в Форточках будет работать а в линуксах пока не знаю, ладно поживем увидим :)
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: Непонятки с класом TForm

Сообщение betatester » 13.03.2009 12:50:02

stikriz писал(а):В Винде такой проблемы нет.
Если Линуксоиды не могут определить размер окна, то это еще не значит, что Виндовозникам нужно портить жизнь.
Еще раз. Размер рамки окна и заголовка окна в Linux зависит от:
  • Используемого Window Manager. Их существует порядка 20 штук и все они, вообще говоря, разные. :wink:
  • Используемого шрифта заголовка.
  • Используемой темы WM
С точки зрения X11 оболочка окна - отдельное окно, отдельный процесс, родителем которого выступает WM, а вовсе не ваша программа. И, вообще говоря, нет штатных средств, которые могут дать информацию о том, какой будет реальный результирующий размер окна на экране.

Т.к. Lazarus - кроссплатформенное IDE, то приходиться чем-то жертвовать. Вам же предложили вариант с GetWindowSize(Form1.Handle). Чем он вам не нравиться?
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

Re: Непонятки с класом TForm

Сообщение RED_DRAGON » 13.03.2009 13:18:44

Это не бага, это фича. Не надо покупаться на сказки Лазарус = Дельфи.
RED_DRAGON
новенький
 
Сообщения: 13
Зарегистрирован: 09.01.2009 13:53:16

Re: Непонятки с класом TForm

Сообщение stikriz » 13.03.2009 14:00:01

>> Т.к. Lazarus - кроссплатформенное IDE, то приходиться чем-то жертвовать. Вам же предложили вариант с GetWindowSize(Form1.Handle). Чем он вам не нравиться?

Действительно...
А нафига мне вообще объектная модель. если все можно делать на АПИ, так?
Можно же сделать по человечески. Оставить ClientWidth и ClientHeight, но в Windows это будет именно ClientWidth и ClientHeight, а в Linux Width = ClientWidth , Hieght = ClientHeight.
Затем, написать Тольвадсу, что надо бы ввести АПИ на получение ширины рамок, и что бы все "сволочи" обязательно поддерживали этот вызов.
Вы хоть понимаете как это уродливо смотрится, что я не могу получить реальный размер своего окна со всеми рамочками?
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Непонятки с класом TForm

Сообщение RED_DRAGON » 13.03.2009 14:12:28

вах... пятничная религиозная война началась :)
ООП чисто ради ООП ничего не стоит... т.к. не решает практическую задачу, которая в конечном итоге все равное решается более низовыми методами.
Потому люди, не подверженные демагогии, ищут максимально оптимальное решение для данных [времени]/[состояния проекта].
RED_DRAGON
новенький
 
Сообщения: 13
Зарегистрирован: 09.01.2009 13:53:16

Re: Непонятки с класом TForm

Сообщение stikriz » 13.03.2009 14:46:58

RED_DRAGON писал(а):вах... пятничная религиозная война началась :)
ООП чисто ради ООП ничего не стоит... т.к. не решает практическую задачу, которая в конечном итоге все равное решается более низовыми методами.
Потому люди, не подверженные демагогии, ищут максимально оптимальное решение для данных [времени]/[состояния проекта].

Я не говорил, что это не решение. Я, во первых, предложил более корректное решение, а во вторых объяснил почему. А сейчас, да, сейчас так. Собственно, товарищь ушел довольным, на сколько я понял.
Аватара пользователя
stikriz
энтузиаст
 
Сообщения: 612
Зарегистрирован: 15.03.2006 09:37:47

Re: Непонятки с класом TForm

Сообщение sts » 13.03.2009 18:04:28

betatester писал(а):Размер рамки окна и заголовка окна в Linux зависит от:
  • Используемого Window Manager. Их существует порядка 20 штук и все они, вообще говоря, разные. :wink:
  • Используемого шрифта заголовка.
  • Используемой темы WM

И это все никаким боком не мешает определить реальный размер окна, мешают только отдельные криворукости WM использовать эти цифры :)

betatester писал(а):С точки зрения X11 оболочка окна - отдельное окно, отдельный процесс, родителем которого выступает WM, а вовсе не ваша программа.


В висте и даже в XP почти тоже самое, с включенными темами.

зы: В принципе делать специально такое отличие от дельфы конечно маразм.
sts
постоялец
 
Сообщения: 431
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Непонятки с класом TForm

Сообщение betatester » 13.03.2009 19:11:36

stikriz писал(а):Затем, написать Тольвадсу, что надо бы ввести АПИ на получение ширины рамок, и что бы все "сволочи" обязательно поддерживали этот вызов.
Вы хоть понимаете как это уродливо смотрится, что я не могу получить реальный размер своего окна со всеми рамочками?

Я понимаю. И ищу механизмы, которые позволили бы мне не зависеть от ширины рамочек. Вам это очень нужно? Вы что0то особенное делайте, для чего точно нужно знать ширину окна?

  • Если вы как-то по особому располагаете окно на рабочем столе - для этого есть отдельные вызовы WM.
  • Если вы пишите что-то в область рамки окна - это тоже, в принципе, решаемый вопрос. Но, чаще в сего, в Linux он решается несколько по другому, чем в Windows. Посмотрите на исходный код того же Audacious. Там эти вопросы прописаны.

Просто поймите. То, о чем вы ведете речь - особенности реализации КОНКРЕТНОЙ рабочей среды Linux. И стандартов оформления рамки окна в Linux нету. Практически, единственный стандарт, который управляет поведением и взаимодействием окон X11 - ICCCM. Да и то там темы и толщина рамок не описаны.

Еще раз - X11 - не Windows. И совершенно не важно подо что вы пишите - под QT ли, под GTK или под голый X11 - различия с Windows будут обязательно. Кстати, Торвальдсу писать бессмысленно. Он курирует только разработку ядра Linux. А за X11 отвечает совершенно другая команда(ы). Ну и, разумеется, у каждого из 20 WM - своя команда разработчиков. :wink:
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot] и гости: 26

Рейтинг@Mail.ru