Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
1

И снова про PopupMenu (было про длину, теперь про ширину)

14.05.2018, 00:35. Просмотров 1187. Ответов 16
Метки нет (Все метки)

Добавляем в пустое PopupMenu несколько пунктов динамически (шириной, например, до 50 символов).
Отображаем его – всё нормально. Затем удаляем все пункты (Items.Clear) и добавляем новые, но более короткие (до 10 символов). Снова отображаем. Ширина окна PopupMenu такая же, как и при прошлом вызове, т.е. гораздо шире расположенного в нём текста. WTF?
Это ещё один баг или как?
p.s. Не знаю что будет, если сделать наоборот: сначала короткий текст, а потом длинный. Не пробовал... И только в Tokyo, в 7 и др. не пробовал.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2018, 00:35
Ответы с готовыми решениями:

Версии Делфи 10 и 7. Можно где-то почитать про их особенности, про совместимость?
Переносили вы проекты из делфи 7 на делфи 10. Может знаете в чем особенности, где можно побольше...

Про ШИМ в роли ЦАП и про АЦП на примере резистивного датчика
Есть датчик угарного газа MICS-5525. Он состоит из чувствительного слоя (пины 1-3, см. вложение),...

Как заблокировать windwos (нет, я не про вирус, а про win+l)
Возможно такой вопрос уже задавали такой вопрос, но всё же как заблокировать компьютер (вызвать...

моя первая плата, хедеры - вопрос про eagle или про пайку
До сих пор я паял платы на однослойных платах для прототипирования - примерно вот таких...

16
пофигист широкого профиля
4169 / 2712 / 770
Регистрация: 15.07.2013
Сообщений: 15,782
14.05.2018, 02:33 2
Jin X, Давайте скажем так.
Ширина PopupMenu до сих пор никого не волновала. Да и не должна бы волновать никого. В меню, по определению, должны быть однословные названия. Нафига в меню нужно использовать что-то ещё типа многословного текста?
Не. Ну если вам/вас приспичило, то пожалуйста пишите свои компоненты.
0
4429 / 3672 / 1236
Регистрация: 14.04.2014
Сообщений: 17,150
Записей в блоге: 17
14.05.2018, 11:44 3
не забываем, что меню - это штука целиком системная, и воздействовать на то, как она там работает, никакой возможности нет...
зато можно создавать компонент заново, начисто, динамически
0
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
14.05.2018, 15:57  [ТС] 4
Не приходилось создавать popup-меню на чистом WinAPI, но вероятно, что где-то в свойствах класса TPopupMenu (приватных, например) хранится ширина, которая указывается при создании окна меню.

Добавлено через 2 минуты
Цитата Сообщение от northener Посмотреть сообщение
В меню, по определению, должны быть однословные названия.
С чего вы решили, что ДОЛЖНО быть так, как вам кажется? По какому определению так должно быть? И с чего вы взяли, что это НИКОГО не волновало? Потому что не волновало вас лично???
Что за стереотипы?

А если я напишу 3 слово общей длиной в 30 символов – это укладывается в ваши понятия нормального размера? А 20 символов?
А потом создам 3 пункта из 3 символов. И ширина такого меню будет равна ширине 30-символьных пунктов. Это нормально?

Добавлено через 3 минуты
В моём понимании программная реализация чего-либо должна работать нормально для любых входящих данных.
Задали 100 символов – будь добр отобразить все 100 и отобразить нормально. И зачем мне понадобилось 100 – того, кто этот компонент делает, волновать не должно. Задали 1000 – значит в конце должно быть многоточие, например (если все символы не умещаются в ширину экрана). Но это не должно выглядеть криво.
Именно из-за того (отчасти), что кто-то думает, что чего-то быть не должно по определению и возникают проблемы типа переполнения стека и прочие уязвимости, которыми пользуются авторы эксплойтов и т.п.
0
4429 / 3672 / 1236
Регистрация: 14.04.2014
Сообщений: 17,150
Записей в блоге: 17
14.05.2018, 18:57 5
никто не отменяет принципа разумной достаточности
есть ограничение на длину пути в имени файла, на длину самого имени, не обязаны программы работать на любых мыслимых разрешениях и шрифтах
уязвимости должны быть ограничены, элементы меню обрезаться, но если не обрезаются, вы можете написать в QC Microsoft и подождать, когда разработка дойдет до вашего тикета
но возникает разумный вопрос
вам шашечки или ехать?
как пересоздать меню с нуля вроде все понятно
Menu.Free
menu:=TMenu.Create(Self)
ну накрайняк еще пара каких-нибудь строк для WinApi. Это ж меню, огого.
вот собсно из-за этих строк столько пара?
0
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
14.05.2018, 21:22  [ТС] 6
Создать новое меню не проблема, конечно.
Но речь-то не об этом. А о том, что при очистке и добавлении вот такая странная вещь происходит. Хочется разобраться что к чему.
0
4429 / 3672 / 1236
Регистрация: 14.04.2014
Сообщений: 17,150
Записей в блоге: 17
14.05.2018, 22:28 7
где-то в дебрях VCL
я лично концов не нашел
упоминания о ширине есть только в прорисовке тем а там черт ногу сломит
но пересоздание работает прекрасно. я проверил
1
пофигист широкого профиля
4169 / 2712 / 770
Регистрация: 15.07.2013
Сообщений: 15,782
15.05.2018, 01:55 8
Цитата Сообщение от Jin X Посмотреть сообщение
С чего вы решили, что ДОЛЖНО быть так, как вам кажется? По какому определению так должно быть?
Ув. krapotkin, уже сказал почему.
И если вы подумаете, то и сами поймёте этот принцип.
Цитата Сообщение от Jin X Посмотреть сообщение
В моём понимании программная реализация чего-либо должна работать нормально для любых входящих данных.
Задали 100 символов – будь добр отобразить все 100 и отобразить нормально. И зачем мне понадобилось 100 – того, кто этот компонент делает, волновать не должно. Задали 1000 – значит в конце должно быть многоточие, например (если все символы не умещаются в ширину экрана). Но это не должно выглядеть криво.
Ещё раз постарайтесь подумать и может быть поймёте что это невозможно для любых входящих данных.
Вот вы предложили, что нужно заменить последние символы многоточием. Но если речь идёт об имени файла в пункте меню, то что вам даст это многоточие?
0
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
15.05.2018, 14:42  [ТС] 9
Цитата Сообщение от northener Посмотреть сообщение
Но если речь идёт об имени файла в пункте меню, то что вам даст это многоточие?
Длину конкретно на имя файла должен ограничивать не контрол/класс/etc, а программист, который это имя файла туда посылает (потому как контрол не знает, да и не должен знать, какого вида строка ему передаётся), а если он этого сделать не потрудился, то ничего не остаётся как просто обрезать или заменить концовку многоточием.

А какой вариант вам кажется более логичным? Что должно произойти? Надо обрезать на 30 символах или пусть выходит за пределы экрана, т.к. "это невозможно для любых входящих данных"?
Я скажу так: возможно, но не всегда (но чаще всего вполне возможно). По крайней мере, стремиться к этому нужно.
Под любыми входящими данными я подразумеваю не типы строк, разумеется (т.к. в данном случае – для PopupMenu – это ни к чему), а например, проверка на пустую и слишком длинную строку. Разве это слишком много условий, которые нужно проверить?

Кстати, вы сами ответили на свой вопрос: "Нафига в меню нужно использовать что-то ещё типа многословного текста?" Например, при указании списка файлов. Откройте меню "Recent Files" в любом редакторе и увидите, что там не только "однословные названия". Да, это не PopupMenu, но это не сильно меняет сути, т.к. PopupMenu со списком файлов вполне может открываться, например, при нажатии на кнопку или по right-click, и в одном из подменю может быть список Recent Files.
0
Непрофессионал
2700 / 2341 / 361
Регистрация: 26.07.2011
Сообщений: 9,939
Записей в блоге: 1
15.05.2018, 22:18 10
Цитата Сообщение от Jin X Посмотреть сообщение
Длину конкретно на имя файла должен ограничивать не контрол/класс/etc, а программист, который это имя файла туда посылает
вот есть редактор, который сохраняет пути всех последних открытых файлов в виде меню с полным путем к файлу в качестве заголовка пункта меню. а пользователь открыл файл из 100 вложенных папок + имя файла на over 50 символов. и в чем здесь вина программиста?
0
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
15.05.2018, 23:07  [ТС] 11
Цитата Сообщение от DenNik Посмотреть сообщение
а пользователь открыл файл из 100 вложенных папок + имя файла на over 50 символов. и в чем здесь вина программиста?
Да я ж не о том. Я про то, что если имя слишком длинное, то чтобы оно не было обрезано автоматом из-за того, что не помещается на экране, лучше это сделать самому (обрезать текст чисто для PopupMenu).

Добавлено через 2 минуты
ИМХО, лучше пусть будет D:\All of my Projects\Video\Adobe Premiere\...\Новый год\2018 - Мы в Подурюпинске\VIDEO1022.MPG, чем D:\All of my Projects\Video\Adobe Premiere\Семейные архивы\Мама, папа, я\Новый год\2018 - Мы в Подурю
0
4429 / 3672 / 1236
Регистрация: 14.04.2014
Сообщений: 17,150
Записей в блоге: 17
16.05.2018, 07:33 12
и самое главное - в обоих случаях дебил - дизайнер, который запроектировал этот интерфейс
так не должно быть потому что не должно быть никогда
для особо упертых есть даже гайды от создателей ОС на MSDN
0
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
16.05.2018, 08:21  [ТС] 13
Цитата Сообщение от krapotkin Посмотреть сообщение
дебил - дизайнер, который запроектировал этот интерфейс
Да почему дебил-то?
У каждого своя задача.
У проектировщика интерфейса – сделать так, чтобы приемлемо выглядела любая строка.
У программиста конечного приложения – чтобы конкретно его формат данных (имя файла, к примеру) выглядел хорошо (если не устраивает вариант по умолчанию).

Цитата Сообщение от krapotkin Посмотреть сообщение
для особо упертых есть даже гайды от создателей ОС на MSDN
Разве там написано, что пункты в PopupMenu должны быть не длиннее 20... 30... 40... 78... символов? Если привязываться конкретно к данной истории...
0
4429 / 3672 / 1236
Регистрация: 14.04.2014
Сообщений: 17,150
Записей в блоге: 17
16.05.2018, 08:49 14
потому что программист всего лишь кодирует то, что выдал ему архитектор и дизайнер
и если в постановке дичь, то ..
там написано ДЛЯ ЧЕГО используются элементы интерфейса
https://msdn.microsoft.com/en-... s.85).aspx

а еще есть общие принципы UX
которые просто кричат о том, что нечего делать в меню строкам размером с черное море
0
vscatterpf0qpd
5561 / 1715 / 190
Регистрация: 14.12.2014
Сообщений: 3,237
Записей в блоге: 11
16.05.2018, 12:46  [ТС] 15
Цитата Сообщение от krapotkin Посмотреть сообщение
потому что программист всего лишь кодирует то, что выдал ему архитектор и дизайнер
Программисты нередко сами и дизайнеры, и архитекторы, а не просто кодеры
Далеко не весь софт делается софтверными компаниями с укомплектованным штатом сотрудников.

Цитата Сообщение от krapotkin Посмотреть сообщение
а еще есть общие принципы UX
которые просто кричат о том, что нечего делать в меню строкам размером с черное море
Тем не менее, те же "Recent Files" нередко нарушают это правило. Причёт, довольно серьёзные приложениях типа Adobe Photoshop вполне записывают туда строки, создающие ширину окна до 500+ пикселей. Visual Studio использует многоточия для сокращения пути. А вот Notepad ++ (вероятно, не лучший пример для подражания) с шириной вообще особо не заморачивается.
0
пофигист широкого профиля
4169 / 2712 / 770
Регистрация: 15.07.2013
Сообщений: 15,782
17.05.2018, 02:18 16
Цитата Сообщение от Jin X Посмотреть сообщение
Кстати, вы сами ответили на свой вопрос: "Нафига в меню нужно использовать что-то ещё типа многословного текста?" Например, при указании списка файлов.
Цитата Сообщение от Jin X Посмотреть сообщение
Тем не менее, те же "Recent Files" нередко нарушают это правило.
Вообще-то говоря идея MRU (Most Recently Used) не предполагает упоминания имен файлов. Она более заточена на использование имён документов.
0
4429 / 3672 / 1236
Регистрация: 14.04.2014
Сообщений: 17,150
Записей в блоге: 17
17.05.2018, 07:08 17
Цитата Сообщение от northener Посмотреть сообщение
упоминания имен файлов
точнее, путей. Имена там достаточно часто
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.05.2018, 07:08

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Вопрос про обратную связь, и про схемотехнику полумоста
Добрый день) Я сейчас делаю схему от уважаемого rost c форума http://www.psb-kots.ru/forum/ , и...

разное про работу инвертора, трансформатора + про esr
разбирал вчера монитор viewsonic vx2255wmh (поводом стало то, что osd меню работало, а сигнала с...

Немного про наблюдение про рост цену клика
Доброго времени суток коллеги. Хочу поделиться некоторыми наблюдениями. По порядку: В...

Про тег SELECT, про позиционирование на конкретном значении.
Привет всем! Помогите мне, может кто сталкивался с таким. Ситуация: Выпадающий список - выбрали...

Про линковку библиотек и про архитектуру иерархии классов
Добрый день! Возникла такая вот проблема. Я использую MinGW Developer Studio. Это довольно старая...

Про прицелы. Или про линзу сложной формы
Занимаюсь стрельбой из блочного лука. В нем есть прицельное приспособление - на тетиве закреплена...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.