|
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
|
||||||
Рассчитать ширину колонок с учетом ScrollBar в StringGrid на всю ширину StringGrid20.09.2014, 22:27. Показов 7894. Ответов 7
Метки нет (Все метки)
Здравствуйте,
Требуется в StringGrid-ах автоматически рассчитать ширину колонок - что бы не было горизонтальной полосы прокрутки и не было справа не используемого места (то есть, занять всю ширину StringGrid-а). В рассматриваемом примере StringGrid-ы одинаковые, но в одном есть ScrollBar (строки не вмещаются все), в другом - ScrollBar отсутствует. Как работать со ScrollBar-ом уже объяснялось в теме Как обратиться к ScrollBar в StringGrid?. Вроде бы все делаю по инструкции, но почему-то в одном случае ScrollBar учитывается, в другом - нет (во второй таблице справа от колонки с заголовком Col_5 - пустое место). Такое ощущение, что какой-то важный момент упустил ![]() Картинка того, что получилась в итоге - ниже, во вложении. Так же и полностью весь проект во вложении. Оба StringGrid требуется обработать в одном цикле. По факту - у меня в разрабатываемом проекте StringGrid-ов несколько больше двух и требуется как-то автоматизировать процесс расчета ширины колонок для каждого StringGrid-а, в зависимости от того, есть или нет у него ScrollBar. Может быть есть другой, более правильный, способ как достигнуть результата - буду признателен если мне его расскажут.
0
|
||||||
| 20.09.2014, 22:27 | |
|
Ответы с готовыми решениями:
7
Delphi 7 Stringgrid Нужно сделать цикл для заполнения Stringgrid данными из другого Stringgrid
ScrollBar и StringGrid |
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
|||||||
| 21.09.2014, 07:59 | |||||||
1
|
|||||||
|
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
|
||
| 21.09.2014, 10:34 [ТС] | ||
|
0
|
||
|
844 / 739 / 342
Регистрация: 22.09.2012
Сообщений: 5,034
|
|
| 21.09.2014, 11:42 | |
|
il-ir,
Аа ну понятно, тебе значит нужно взять не ширину StringGrid-а а клиентскую область ширины StringGrid-а и поделить ее на кл-во колонок и со строками сделать тоже самое. Вобщем тебе нужно придумать формулу если не лень, если лень поджди мож кто и придумает напишет.
0
|
|
|
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
|
||||||
| 21.09.2014, 12:00 [ТС] | ||||||
|
Сделал с предложенной NIKOLAYY, идеей - использовать StringGrid1.ClientWidth.
код (проект с обновленным кодом - во вложении):
но при условии, что для StringGrid, где мало строк, установлено свойство ScrollBars = ssNone.Если же в обоих StringGrid-ах свойство ScrollBars = ssVertical, то почему-то ClientWidth вычисляется не правильно (скорее всего, вычисляется правильно, только не так как мне надо ): несмотря на то, что в StringGrid-е скролбар отсутствует, параметр ClientWidth рассчитывается так, словно скролбар должен быть.В моем исходном коде (в самом первом сообщении) - та же самая фигня: если у таблицы, где мало строк, заранее установить свойство ScrollBars = ssNone - все работает как надо. Посему, вопрос может быть несколько изменен: как при создании таблицы определить, должен быть ScrollBars или нет. Или это не правильный путь? Ниже на картинке приводятся параметры, полученные при создании формы и после того, как форма уже создана (получены нажатием на кнопку "Загрузить параметры") - в ситуации, когда у обоих StringGrid-ов при создании свойство ScrollBars = ssVertical. Линией подчеркнуто различие в свойствах ClientWidth. Можно попробовать, используя свойство RowCount, узнать сколько всего строк должно быть. Далее, рассчитать, строки все влезут или нет (свойства ClientHeight, RowHeights и GridLineWidth). и соответственно, перед расчетом ширины колонок установить свойство ScrollBars = ssVertical (если все строки не вмещаются) и ScrollBars = ssNone (если все строки поместились в StringGrid-е)... Или этот путь - неправильный и ведет в никуда?
0
|
||||||
|
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
|
|||||||
| 21.09.2014, 12:58 [ТС] | |||||||
|
Вопрос только в том, есть ли путь Полностью код решения приведу тут, вдруг кому еще потребуется? Может быть кто-нибудь предложит другой вариант получения требуемого результата - буду благодарен. Полностью проект - в приложении. Решение:
0
|
|||||||
|
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
|
||||||
| 22.09.2014, 18:48 [ТС] | ||||||
|
опять требуется помощь форумчан...
Еще одно изменение (дополнение) предложенного выше решения. У меня заголовок таблицы форматируется в несколько строк, если не вмещается по ширине. И произошел ляпсус, когда в некоторых ситуациях вертикального скроллбара по расчету быть не должно было, но он нагло появлялся ![]() Если использовать форматирование, когда в ячейке текст будет отображаться в несколько строк (как это сделать, решение предложено в частности в теме Форматирование текста в несколько строк в StringGrid), то может получиться не совсем то, что требовалось. Как я вычислил, проблема в том, что при обработке процедуры TForm1.FormCreate заголовок еще не форматируется в несколько строк и высота строки с заголовком не меняется (так как по событию OnDrawCell процедуры StringGrid1DrawCell и StringGrid2DrawCell выполняются ПОСЛЕ процедуры FormCreate). А после того, как мы в FormCreate рассчитали ширину столбцов (например, с учетом отсутствия вертикального скроллбара), то изменение высоты строки с заголовком может инициировать появление этого самого скроллбара - и часть последней ячейки окажется за видимым полем. В примере количество строк в StringGrid2 подобрано таким образом, что если заголовок в одну строку отображать, то вертикальный скроллбар не нужен. Если форматировать заголовок, что бы текст в заголовке отображался целиком в несколько строк - то вертикальный скроллбар требуется. Что бы избежать такой неприятной загогулины, пришлось несколько изменить код процедуры FormCreate: 1. Значения ячеек заголовка таблицы устанавливаются ДО расчета ширины колонок. 2. Вместо банального оператора K := TSG.RowHeights[0]; пришлось вычислять высоту для каждой ячейки заголовка (в каждой ячейке нулевой строки). Но почему-то, несмотря на то, что делаю вроде по инструкции, не работает так как надо ![]() Картинка той фигни, что получилось - ниже, во вложении. В идеале, в StringGrid2 ширина столбцов должна рассчитываться исходя из посыла, что вертикальный скроллбар есть. Но почему-то, при расчете ширины столбцов таблицы считается, что вертикального скроллбара не должно быть ... ![]() Полный текст проекта так же во вложении. Что-то я, похоже, пропустил - вот и не работает как надо ![]() Код процедуры FormCreate:
0
|
||||||
|
47 / 27 / 8
Регистрация: 11.05.2010
Сообщений: 169
|
||||||
| 23.09.2014, 13:10 [ТС] | ||||||
|
УРА!!! я победил эту ситуацию
![]() так как у нас сейчас чуть больше, чем половина четвертого утра, то подробно напишу уже днем - ошибка смешная, но неприятная. немножко пришлось но я ее нашел ![]() Добавлено через 12 часов 29 минут решение оказалось очень простое. У меня ширина первой колонки устанавливается в коде программы абсолютным значением (не зависимо от ширины StringGrid'а), ширина остальных колонок вычислялась в зависимость от ширины StringGrid'а. Соответственно, требовалось установить ширину этой первой колонки, а затем измерять высоту строки с заголовком. Я же сначала измерил высоту строки, а затем изменил ширину колонки - что в свою очередь повлекло возможное увеличение высоты строки, так как ширина колонки уменьшилась. исправленный код процедуры (полностью проект можно скачать в моем сообщении - только в проекте заменить текст процедуры TForm1.FormCreate на приведенный ниже).
0
|
||||||
| 23.09.2014, 13:10 | |
|
Помогаю со студенческими работами здесь
8
Stringgrid и его ScrollBar
Непонятки с шириной колонок у StringGrid
Закрашивает не всю ячейку StringGrid Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут
Суть:
- Группа наркоманов из 10 человек.
- Только один инфицирован ВИЧ.
- Колются одной иглой.
- Колются раз в день.
- Колются последовательно через. . .
|
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
|
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
|
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . .
а удачный момент так и не приходит.
|
|
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица.
Задача: зафиксировать три левых колонки в отчете.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
/ / . . .
|
Настройки VS Code
Loafer 13.04.2026
{
"cmake. configureOnOpen": false,
"diffEditor. ignoreTrimWhitespace": true,
"editor. guides. bracketPairs": "active",
"extensions. ignoreRecommendations": true,
. . .
|
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2.
Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива.
Было так:. . .
|
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2.
Задача: реализовать контроль корректности заполнения дат назначения. . .
|