Страница 1 из 2

Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 03:56:16
.wOvAN
В общем тема не новая, вот решил таки озвучить.
Может кто то знает разумное объяснение почему в Lazarus размер формы равен размеру клиентской части?

Вот сравнение показаний Width\Height с ClientWidth\ClientHeight в Lazarus и Delphi

Изображение

Это по моему очевидный баг. Но раз он такой очевидный может это фича? :shock:

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 07:32:19
BadBoyAlex
.wOvAN писал(а):В общем тема не новая, вот решил таки озвучить.
Это по моему очевидный баг. Но раз он такой очевидный может это фича? :shock:


Это не баг, а жертва кроссплатформенности. Если в Windows ты длину границы вычислить сможешь, то в Linux - нет...

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 07:42:59
.wOvAN
А как на счет {$ifdef linux} ? Зачем издеваться над всеми. Получается за что не возьмись, даже элементарные свойства и методы, приходится брать напильник. :(

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 07:44:42
BadBoyAlex
.wOvAN писал(а):А как на счет {$ifdef linux} ? Зачем издеваться над всеми. Получается за что не возьмись, даже элементарные свойства и методы, приходится брать напильник. :(

Компилятор должен быть универсальным...

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 07:49:30
.wOvAN
Глупость это, компилятор тут при чем? У линукса дай бог 1% десктопов, ради процента коряжить 99% и наружать саму идею заложенную в код, ширина должна быть шириной и клиентская ширина клиентской.

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 08:13:50
BadBoyAlex
.wOvAN писал(а):Глупость это, компилятор тут при чем? У линукса дай бог 1% десктопов, ради процента коряжить 99% и наружать саму идею заложенную в код, ширина должна быть шириной и клиентская ширина клиентской.


В общем, сделано это не без умысла... Меня, лично, это не напрягает. Если вас напрягает - идите сюда: http://lazarus.freepascal.org/ на форум - там и говорите...
И, кстати, почему именно "должна быть". Если в Делфях так, то это не значит, что у всех так...

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 08:22:22
.wOvAN
BadBoyAlex писал(а):И, кстати, почему именно "должна быть". Если в Делфях так, то это не значит, что у всех так...


Именно потому что свойства эти разные ClientWidth и Width и отвечают за разные величины.

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 08:24:56
BadBoyAlex
.wOvAN писал(а):
BadBoyAlex писал(а):И, кстати, почему именно "должна быть". Если в Делфях так, то это не значит, что у всех так...


Именно потому что свойства эти разные ClientWidth и Width и отвечают за разные величины.


ну, отвечают они за разное. Ну и что?

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 08:46:23
.wOvAN
BadBoyAlex писал(а):Ну и что?

Ну и ничего.

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 08:54:07
BadBoyAlex
.wOvAN писал(а):
BadBoyAlex писал(а):Ну и что?

Ну и ничего.

Я где-то читал ранее, что пока не найдут способ реализовать это в других системах, кроме Windows - не сделают...

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 10:30:50
Nik
Имхо, стоит создать баг-репорт с указанием, что поведение кода отличается от принятого в Delphi.

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 10:34:40
BadBoyAlex
Nik писал(а):Имхо, стоит создать баг-репорт с указанием, что поведение кода отличается от принятого в Delphi.

Зачем? Они и так уже знают...

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 11:05:37
Odyssey
BadBoyAlex писал(а):Зачем? Они и так уже знают...

Верно.
http://bugs.freepascal.org/view.php?id=10420
http://bugs.freepascal.org/view.php?id=1794

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 11:20:34
.wOvAN
Глупая политика, ОСИ никогда не достигнут равного функционала, поэтому подгонка всех платформ под один знаменатель не имеет смысла, она лишь заставляет разработчиков многократно реализовывать недостающий функционал под каждую ось. Логично было бы реализовать максимум доступного функционала под каждую ось а там уж объединять то что можно.

Re: Width = ClientWidth - Баг?

СообщениеДобавлено: 03.05.2011 12:08:42
Odyssey
Эта политика обеспечивает работу принципа "Write once, compile anywhere". Благодаря ему можно для N платформ писать одну, а не N разных программ. Цена этого -- N вариантов библиотеки, причём все они должны работать как можно более единообразно.

.wOvAN писал(а):Логично было бы реализовать максимум доступного функционала под каждую ось а там уж объединять то что можно.

Примерно так и делается. Максимум доступного функционала под каждую ось находится в модулях Windows, BaseUnix и т.п., а то, что должно работать везде -- включается в LCL.

Имхо, конструктивным решением проблемы был бы патч, вычисляющий правильные TForm.Width/TForm.Height под Windows, и добавляющий эти свойства в Restrictions для Qt/GTK/Carbon.
В крайнем случае, можно начать с костыля типа функций GetWindowHeight/GetWindowWidth, под виндой вызывающих WinAPI-функцию GetWindowRect (см. MSDN), а под другими платформами возвращающих ClientHeight/ClientWidth. А потом, под настроение, перенести код в LCL.