К>Вот в винде он как раз многопоточный (для этого и существуют очереди сообщений у потоков). К>И этим пользуются разные подпольные компоненты — DDE, OLE.
очереди сообщений относятся к приложению а не к графическому движку.
разве можно из двух потоков одновременно (а не ставя запросы в очередь) рисовать на одном DC?
или например запустить асинхронную операцию заливки экрана а самому в это время рисовать в другом месте
Re[16]: Почему настоящие программисты избегают C++
olegkr пишет:
> P>Ну не знаю как насчет дотнетчиков, а мне, дельфисту, swing'овские > layout'ы очень даже понравились. > Согласен. Вещь хорошая и полезная. Но только, как довесок в тех > случаях, когда они действительно необходимы.
А необходимы они всегда (якоря — пример простейшего layout'а). Достают
уже программы без поддержки масштабирования окон.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[18]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>Разделение на модель-вид-контроллер не заставляет "плодить классы". Как > C>раз наоборот. > C>Анонимные классы — это аналог делегатов, а не следствие MVC.
[большой скип]
> Наглядно видно, что подписка на событие и сам обработчик разделены. > Причем не надо городить отдельных классов (при желании можно и > отдельный класс сделать).
Ну и как все это относится к MVC? Понятно, что некоторые фичи C#
позволяют слегка сократить код (кстати, по методу на обработчик события
— тоже некузяво), но как это относится к архитектуре WinForms?
> C>Да, нужно помнить параметры FormLayout'а.... Чрезвычайно > C>сложнозапоминаемые, настолько, что даже автокомплит совсем не > поможет. И > C>ведь еще даже документацию просмотреть придется. Нет, это не для > ВБистов. > Для примера, GridBagConstraints(int gridx, int gridy, int gridwidth, > int gridheight, double weightx, double weighty, int anchor, int fill, > Insets insets, int ipadx, int ipady) > Читаемость куска кода, использующего данную конструкцию просто > изумительная.
Говорю же: FormLayout. Всякие GridBag'и нужно забыть как пережитки прошлого.
> Да и вообще, весело разбираться в чужом коде на свинге, с целью > переместить кнопочку "отсуда-сюда". Работа для настоящих > интеллектуалов, дотнет отдыхает, комплит помогает. > Про документацию я вообще умалчиваю. Такое не может называться > полноценной документацией.
Чего? Весь _исходный_ и откомментированный код Свинга доступен в JDK,
JavaDoc качается с сайта, есть замечательный Swing Tutorial. Чего еще надо?
А вот где взять код WinForms — мне самому интересно.
> C>Чтобы потом все юзеры плевались от неправильно масштабируемых (или > C>вообще немасштабируемых) форм. > Anchor-ы решают сию задачу в 9 из 10 случаев.
Нет.
> Для оставшегося одного можно использовать и самописный лайаут > менеджер. Не велика задача.
Да, поэтому в большинстве программ она и не решена.
> C>У меня она вызывает отвращение. Интерфейсы не выделены, наследование > C>используется сверх меры > Ценность интерфейсов в винформах сомнительная, благодаря наличию > евентов. Это в свинге без интерфейсов никуда.
Нда.... Крайняя степень VB-запущенности.
Интерфейсы нужны для отделения разных видов функциональности. Вот,
например, в WinForms список сам хранит свои данные. В Swing'е список
получает данные из объекта, реализующего интерфейс ListModel.
Соответственно, я могу сделать ListModel (точнее это уже давно
сделаено), который работает поверх ResultSet'а из БД и получить
"датабиндинг" (так любимый дельфистами). А еще можно сделать ListModel,
получающий данные по RPC с удаленного сервера.
Ну или можно использовать стандартную реализацию, которая хранит данные
внутри себя.
> C>Хотя МС в этот раз поступила честно — пакет называется WinForms, так > как > C>ни на что большее, чем формочки, он не способен. > Вот только одна беда. На винформах не проблема написать > professional-looking GUI
К сожалению только "looking", а не "working".
> а на свинге это вызывает немалые затруднения. Фактически, любой > прилично-выглядящий ГУИ, типа эклипса — самопис.
Агащаз. Эклипс использует свой GUI-пакет только из-за того, что Swing во
время проектировки Эклипсы был еще малоюзабельным.
> C>Руки, значит, не так работают. IDEA написана на Свинге, однако летает > C>даже на старых машинах. > Если бы летала... Впрочем, возможно я просто привык к шустрому VS.NET > вот и ворчу.
Рекомендую поставить IDEA 3.0, или еще лучше IDEA 2.6 — новые версии
Идеи сами по себе тормозные (не из-за GUI).
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[15]: Почему настоящие программисты избегают C++
Кодт пишет:
> A>объясни в какой такой ОС существует многопоточный GUI? > A>в винде он однопоточный по определению (для этого и очередь сообщений) > Вот в винде он как раз многопоточный (для этого и существуют очереди > сообщений у потоков).
Он однопоточный в том смысле, что нельзя безопасно работать с
GUI-элементами, созданными в одном потоке, из другого потока (хотя
некоторые оконные сообщения действительно будут обрабатываться корректно).
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[17]: Почему настоящие программисты избегают C++
Здравствуйте, Cyberax, Вы писали:
C>А необходимы они всегда (якоря — пример простейшего layout'а). Достают C>уже программы без поддержки масштабирования окон.
Простейший, то он простейший. Только в большинстве случаев его хватает за глаза. И не надо громоздить для примитивнейшой формы лайаут в лайауте. Из практики, чего мне не хватает в дополнении к якорям — размещения контролов пропорционально-горизонтально, что бы они одновременно растягивались. Буду писать, благо к дотнету подключить лайаут не так сложно и он будет прекрасно работать в дизайнере форм. Хотя... по GUI Design Guidelines ширина лабелов, текстбоксов, листбоксов и комбобоксов на форме должна быть кратной 40px, не очень хорошо это правило стыкуется со свободно-масштабируемыми формами.
Re[18]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>А необходимы они всегда (якоря — пример простейшего layout'а). Достают > C>уже программы без поддержки масштабирования окон. > Простейший, то он простейший. Только в большинстве случаев его хватает > за глаза. И не надо громоздить для примитивнейшой формы лайаут в лайауте.
Пришли к соглашению: WinForms для примитивных форм. С чем я согласен.
> Из практики, чего мне не хватает в дополнении к якорям — размещения > контролов пропорционально-горизонтально, что бы они одновременно > растягивались. Буду писать, благо к дотнету подключить лайаут не так > сложно и он будет прекрасно работать в дизайнере форм.
Ссылки, плиз.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[19]: Почему настоящие программисты избегают C++
Здравствуйте, Cyberax, Вы писали:
C>Ну и как все это относится к MVC? Понятно, что некоторые фичи C# C>позволяют слегка сократить код (кстати, по методу на обработчик события C>- тоже некузяво), но как это относится к архитектуре WinForms?
Напрямую. Ты не обязан строго следовать MVC. И код за счет этого сокращается значительно. И что немаловажно он становится намного понятнее.
C>Говорю же: FormLayout. Всякие GridBag'и нужно забыть как пережитки прошлого.
Какой еще FormLayout? Поиск по javadoc не дал результата.
C>Чего? Весь _исходный_ и откомментированный код Свинга доступен в JDK, C>JavaDoc качается с сайта, есть замечательный Swing Tutorial. Чего еще надо?
Мелочи. Удобной документации. javadoc — большая свалка и помойка, по сравнению с MSDN.
C>А вот где взять код WinForms — мне самому интересно.
Неуверен на 100%, но можно посмотреть на mono project. Впрочем навряд-ли. Винформы никто переносить на другие платформы не собирается, т.к. он заточен под Win.
>> Anchor-ы решают сию задачу в 9 из 10 случаев. C>Нет.
Да. Подеремся?
C>Да, поэтому в большинстве программ она и не решена.
Лениво поди девелоперами, да и не особо нужно.
C>В Swing'е список получает данные из объекта, реализующего интерфейс ListModel.
Отсылаю к документации по дотнету. В частности, к IBindingList.
C>К сожалению только "looking", а не "working".
Ошибаешься. Работает все на-ура, в отличии от свинга.
C>Агащаз. Эклипс использует свой GUI-пакет только из-за того, что Swing во C>время проектировки Эклипсы был еще малоюзабельным.
А он и сейчас малоюзабелен. Изменений к лучшему не видно.
Re[19]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>Ну и как все это относится к MVC? Понятно, что некоторые фичи C# > C>позволяют слегка сократить код (кстати, по методу на обработчик события > C>- тоже некузяво), но как это относится к архитектуре WinForms? > Напрямую. Ты не обязан строго следовать MVC.
Ну что сказать... Не знаешь ты, что такое MVC.
> C>Говорю же: FormLayout. Всякие GridBag'и нужно забыть как пережитки > прошлого. > Какой еще FormLayout? Поиск по javadoc не дал результата.
http://www.jgoodies.com/freeware/forms/
> C>Чего? Весь _исходный_ и откомментированный код Свинга доступен в JDK, > C>JavaDoc качается с сайта, есть замечательный Swing Tutorial. Чего > еще надо? > Мелочи. Удобной документации. javadoc — большая свалка и помойка, по > сравнению с MSDN.
Нда уж....
JavaDoc — это всего лишь автосгенерированная документация по коду.
Аналога помойки MSDN в Java нет.
>>> Anchor-ы решают сию задачу в 9 из 10 случаев. > C>Нет. > Да. Подеремся?
Давай, как раз в Москву собираюсь ехать скоро
> C>Да, поэтому в большинстве программ она и не решена. > Лениво поди девелоперами, да и не особо нужно.
Нужно. Например при разрешении 1400x1050 всякие формочки в 400 пикселей
выглядят оооочеьнь мелкими.
> C>В Swing'е список получает данные из объекта, реализующего интерфейс > ListModel. > Отсылаю к документации по дотнету. В частности, к IBindingList.
Не то. Вот код интефейса ListModel (комментарии и импорты удалены):
public interface ListModel
{
int getSize();
Object getElementAt(int index);
void addListDataListener(ListDataListener l);
void removeListDataListener(ListDataListener l);
}
Все! Это все, что мне нужно реализовать. Как мне сделать тоже самое для
IBindingList'а? Написать свою реализацию DataTable'а?
И как быть с деревьями? Вот код TreeModel'а для Явы:
public interface TreeModel
{
public Object getRoot();
public Object getChild(Object parent, int index);
public int getChildCount(Object parent);
public boolean isLeaf(Object node);
public void valueForPathChanged(TreePath path, Object newValue);
public int getIndexOfChild(Object parent, Object child);
void addTreeModelListener(TreeModelListener l);
void removeTreeModelListener(TreeModelListener l);
}
> C>К сожалению только "looking", а не "working". > Ошибаешься. Работает все на-ура, в отличии от свинга.
Угу, то-то Янус до сих пор нормально не работает на моей машине.
> C>Агащаз. Эклипс использует свой GUI-пакет только из-за того, что > Swing во > C>время проектировки Эклипсы был еще малоюзабельным. > А он и сейчас малоюзабелен. Изменений к лучшему не видно.
Еще бы. Особенно не заметно, если и не смотреть.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[16]: Почему настоящие программисты избегают C++
Здравствуйте, Awaken, Вы писали:
К>>Вот в винде он как раз многопоточный (для этого и существуют очереди сообщений у потоков). К>>И этим пользуются разные подпольные компоненты — DDE, OLE.
A>очереди сообщений относятся к приложению а не к графическому движку. A>разве можно из двух потоков одновременно (а не ставя запросы в очередь) рисовать на одном DC?
Можно.
A>или например запустить асинхронную операцию заливки экрана а самому в это время рисовать в другом месте
Можно. Сколько угодно.
Другое дело, что заставлять несколько потоков драться за один графический контекст — это маразм...
Перекуём баги на фичи!
Re[20]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>Пришли к соглашению: WinForms для примитивных форм. С чем я согласен. > Ага, а свинг — для кривых форм и любителей потрахать мозги себе и > юзеру. Согласен.
Нет, Свинг — для профессиональных GUI-программистов, которые могут
обойтись и без редактора формочек.
> C>Ссылки, плиз. > Наследуешься от класса LayoutEngine и вперед.
Ага, конечно. Еще бы WM_SIZE посоветовал обрабатывать.
Готовые взаимозаменяемые Layout'ы где? Тот в МСной статье — фигня.
Особенно понравилось:
===========
*Layout mode interaction*
Currently, having *Spring*, *FillContainer*, and *SizeMode* set
generates some odd behavior. This should be cleaned up so that the
layout code becomes more fault-tolerant.
===========
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[21]: Почему настоящие программисты избегают C++
Здравствуйте, Cyberax, Вы писали:
C>Ну что сказать... Не знаешь ты, что такое MVC.
ОК. Пусть будет так. Не знаю я что такое MVC, хоть данная модель и используется в нашем проекте. Дело в том, что в дотнете есть выбор — использовать MVC или нет. В свинге такого выбора просто нет.
C>http://www.jgoodies.com/freeware/forms/
Интересная весчь. Спасибо. Единственная стоящая весчь, и то наваяли не в SUN-е.
C>JavaDoc — это всего лишь автосгенерированная документация по коду. C>Аналога помойки MSDN в Java нет.
Ага, нет бабок — генерим доки с сорцов (это уже мне наш джавист подсказывает у него почему-то на джавадоки аллергия)
C>Давай, как раз в Москву собираюсь ехать скоро
Давай к нам — нам как раз пара свингистов нужны на проект. С супер-знанием свинга на хорошие бабки. Если интересно — пиши на olegkr@email.su.
C>Не то. Вот код интефейса ListModel (комментарии и импорты удалены): C>Все! Это все, что мне нужно реализовать. Как мне сделать тоже самое для C>IBindingList'а? Написать свою реализацию DataTable'а?
Если проще — то имеется IList.
C>Угу, то-то Янус до сих пор нормально не работает на моей машине.
Я всегда думал — что Янус написали злобные джависты, что бы им было за что ругать дотнет.
Re[21]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>Нет, Свинг — для профессиональных GUI-программистов, которые могут > C>обойтись и без редактора формочек. > И которые готовы всю жизнь потратить на размещение контролов на форме.
Нет, при некотором опыте руками писать на Свинге получается _быстрее_,
чем рисовать в редакторе.
> C>Готовые взаимозаменяемые Layout'ы где? Тот в МСной статье — фигня. > Понятно дело, что писать надо. У нас один уже написан, вполне рабочий, > и я бы не сказал, что супер-пупер это сложно.
Каждый свой неинтероперабельный велосипед пишет....
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[22]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>Ну что сказать... Не знаешь ты, что такое MVC. > ОК. Пусть будет так. Не знаю я что такое MVC, хоть данная модель и > используется в нашем проекте. Дело в том, что в дотнете есть выбор — > использовать MVC или нет. В свинге такого выбора просто нет.
Покажите мне, где в WinForms есть MVC.
А в Свинге можно элементарно не использовать MVC, а просто пользоваться
стандартными реализациями моделей и видов — будет почти все как в WinForms.
> C>JavaDoc — это всего лишь автосгенерированная документация по коду. > C>Аналога помойки MSDN в Java нет. > Ага, нет бабок — генерим доки с сорцов (это уже мне наш джавист > подсказывает у него почему-то на джавадоки аллергия)
JavaDoc — это документация именно _к_ _исходникам_. То есть просто
документируются классы и методы — так же как и reference'ы в MSDN'е.
> C>Давай, как раз в Москву собираюсь ехать скоро > Давай к нам — нам как раз пара свингистов нужны на проект. С > супер-знанием свинга на хорошие бабки. Если интересно — пиши на > olegkr@email.su.
И так работа уже есть (на С++, а не на Java — я многопрофильный)
> C>Не то. Вот код интефейса ListModel (комментарии и импорты удалены): > C>Все! Это все, что мне нужно реализовать. Как мне сделать тоже самое для > C>IBindingList'а? Написать свою реализацию DataTable'а? > Если проще — то имеется IList.
Ну и как он будет оповещать спиок об изменениях данных? Ну а для дерева
вообще ничего подходящего нет.
--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 1.9
Sapienti sat!
Re[23]: Почему настоящие программисты избегают C++
Здравствуйте, Cyberax, Вы писали:
C>Нет, при некотором опыте руками писать на Свинге получается _быстрее_, C>чем рисовать в редакторе.
Я бы поверил, если бы сам не писал на Свинге. Возможно через пару-тройку лет интерфейсы вслепую и можно натренироваться фигачать.
C>Каждый свой неинтероперабельный велосипед пишет....
аналогично можно сказать и про jgoodies
Re[17]: Почему настоящие программисты избегают C++
Здравствуйте, Cyberax, Вы писали:
>> Другое дело, что заставлять несколько потоков драться за один >> графический контекст — это маразм...
C>Еще очень забавный опыт: создать в одном потоке дочернее окно с C>родителем в другом потоке.
Вот только что опыт ставил. Результат — мрачный, но (через пень-колоду) работает.
Перекуём баги на фичи!
Re[24]: Почему настоящие программисты избегают C++
olegkr пишет:
> C>Нет, при некотором опыте руками писать на Свинге получается _быстрее_, > C>чем рисовать в редакторе. > Я бы поверил, если бы сам не писал на Свинге. Возможно через > пару-тройку лет интерфейсы вслепую и можно натренироваться фигачать.
Я помню, что уже через месяц (после того, как набил шишки в нужных
местах) писал на Свинге быстрее, чем в редакторе. Причем было это в 2002
году.
> C>Каждый свой неинтероперабельный велосипед пишет.... > аналогично можно сказать и про jgoodies
Но! В Яве у layout'ов стандартный интерфейс, поэтому тот же JGoodies без
проблем может интеоперировать хоть с FlowLayout'ом из JDK1.0.1