Страница 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.