Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/40: Рейтинг темы: голосов - 40, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
1

Изменение размеров столбцов в DBGrid в зависимости от монитора

06.08.2017, 11:34. Показов 7994. Ответов 43
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть DBGrid у него в свойствах Align стоит alClient сама область таблицы растягивается по экрану как надо но вот столбцы нет, как сделать чтобы столбцы также растягивались при увеличении экрана точнее формы по экрану?

у меня в DBGrid 5 столбцов: 0.код 1.имя 2.фамилия 3.отчество 4.должность, вот например как сделать чтобы столбец 1.имя менял свою ширину относительно экрана при развертывании формы на весь экран? а при свертывании в обратное положение формы также и столбец принимал свою изначальную ширину.

Добавлено через 1 час 19 минут
попробовал в onResize формы написать вот так

Delphi
1
DBGrid1.Columns[1].Width := Trunc(0.56 * DBGrid1.Width);
растягивается но не полностью на всю область DBGrid

если например ширина мною созданной формы равна 950рх все столбцы и вертикальный скрол занимают 100% область DBGrid, когда разворачиваю форму на размер экрана 1024х768 то получается пустота между столбцами и скролом примерно размер пустоты столько же сколько и сам скрол при этом столбец (1) чуть чуть растягивается, когда разворачиваю форму на размер экрана более 1024х768 то пустота между столбцами и скролом увеличивается столбец (1) чуть больше растягивается, как сделать чтобы независимо от размера экрана столбец (1) растягивается так чтобы все столбцы и вертикальный скрол все время занимали 100% области DBGrid?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2017, 11:34
Ответы с готовыми решениями:

Изменение размеров DBGrid в зависимости от количества записей в БД
Здравствуйте! Я только осваиваю работу с БД в C++ Builder и столкнулась со следующей проблемой. Я...

Автоматическое изменение размеров контролов в зависимости от размеров формы
Кто-нибудь может что-то сказать по этому поводу? Я имею ввиду как этого добиться наиболее простым...

Изменение Размеров Таблицы DBGrid Автоматически
Здравствуйте. Столкнулся с проблемой размеров таблицы. Облазил все, но не нашел нечего подобного....

Изменение размеров в зависимости от разрешения дисплея
Аксесс 2007 Здраствуйте. Можно ли как то играть с размерами формы (и контролов в ней) в...

43
qwertehok
06.08.2017, 12:02
  #2

Не по теме:

сомневаюсь что получится так сделать

0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 12:04  [ТС] 3
то есть вообще нельзя так сделать? или нельзя так сделать с одним столбцом? надо делать сразу все 5 столбцов? какое есть решение?
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
06.08.2017, 13:26 4
Алекс Корм, высчитываете пропорцию ширины каждого столбца Грида к ширине самого Грида - и применяете ее при событии FormResize
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 14:17  [ТС] 5
сколько процентов составляет ширина столбца от ширины грида? если так то я подсчитал что столбец (имя) равен 57.37% от грида 950рх грид и 545рх столбец (имя) верно? и так для каждого столбца?
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
06.08.2017, 14:45 6
Школьная задача:
GridWidth - 100%
Field[x]Width - x%
x = Round(Field[x]Width * 100 / GridWidth)
и. да, так для каждого столбца...
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 16:44  [ТС] 7
так должно выглядеть?

Delphi
1
DBGrid1.Columns[1].Width := Round(57.37 * 100 / DBGrid1.Width);
мне кажется я неправильно сделал
0
Модератор
9256 / 6034 / 2379
Регистрация: 21.01.2014
Сообщений: 25,793
Записей в блоге: 3
06.08.2017, 17:08 8
Цитата Сообщение от Алекс Корм Посмотреть сообщение
мне кажется я неправильно сделал
Алекс Корм, ну ведь программа Ваша: Вам и судить, правильно там "это" должно выглядеть или не правильно...
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 17:12  [ТС] 9
в программе с таким кодом столбец сжался почти полностью, и при развертывании формы столбец становится еще меньше

или я в принципе все не верно делаю?
0
500 / 346 / 200
Регистрация: 20.10.2016
Сообщений: 1,101
06.08.2017, 18:48 10
Цитата Сообщение от Алекс Корм Посмотреть сообщение
так должно выглядеть?
Не совсем, но ход мыслей верный, несколько замечаний:
- нужно юзать DBGrid1.ClientWidth, а не DBGrid1.Width;
- нужно учитывать ширину гридлайнов (их сумма зависит от количества столбцов);
- округлять лучше через Trunc, иначе можно поймать момент когда грид за криентскую область вылезет, собственно из-за округления обычно косяки в несколько пикселей и вылазят, но побороть вполне реально.
Цитата Сообщение от qwertehok Посмотреть сообщение
сомневаюсь что получится так сделать
Можно, я делал.
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 19:12  [ТС] 11
написал вот так но не че не изменилось также столбец наоборот сузился и при развертывании на весь экран столбец становится еще меньше а не больше((

наверно неправильно подсчитан процент 57.37?

Delphi
1
DBGrid1.Columns[1].Width := Trunc(57.37 * 100 / DBGrid1.ClientWidth);
950рх грид

545рх столбец (1)

70рх столбец (0)

125рх столбец (2)

125рх столбец (3)

70рх столбец (4)
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
06.08.2017, 19:13 12
Лучший ответ Сообщение было отмечено Алекс Корм как решение

Решение

Относительно недавно я публиковал код, решающий подобную задачу.
1
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 20:16  [ТС] 13
поставил код из той темы теперь все столбцы стали одного размера и чуть вылазит последний столбец за область появился горизонтальный скрол, при развертывании они расширяются как надо на всю область но если свернуть обратно то они так и остаются расширенными, можно как то настроить код чтобы столбцы были разного размера какие я задам и не вылазили за область, и при свертывании сужались обратно?
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
06.08.2017, 23:31 14
Интересно, что-то не замечал раньше такого, может что упустил тогда. Проверю...
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
06.08.2017, 23:43  [ТС] 15
Скорее всего я что то не так сделал, надо было скопировать код не чего в нем не меняя и вставить его в событие DBGridDrawColumnCell а потом в опциях грида поставить dgColumnResize = False? так?
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
06.08.2017, 23:59 16
Да, верно. Для грида создаете колонки, задаете ширину ручками для колонок которые не надо масштабировать и выставляете для этих колонок флаг ReadOnly в True.

Добавлено через 1 минуту
Насчет скрола горизонтального вы правы, он появился. В XE версии я его не видел, сейчас разбираюсь в чем подвох.
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
07.08.2017, 00:04  [ТС] 17
Ок спасибо огромное! я использую Delphi 7.
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
07.08.2017, 00:04 18
Ага, понял в чем дело! Моя недоработка. Я не использую в гриде индикатор и если его скрыть, то все работает как надо. Попробую подправить код с учетом индикатора, но что-то пока не вижу откуда взять его размеры.
0
0 / 0 / 0
Регистрация: 05.08.2017
Сообщений: 45
07.08.2017, 00:13  [ТС] 19
Ага понял про что вы говорите, я пытался подсчитать его размер когда вычислял пропорции для столбцов.
0
3586 / 2195 / 693
Регистрация: 29.05.2013
Сообщений: 9,373
07.08.2017, 00:37 20
В общем, как временный костыль можно добавить строчку:
Delphi
1
 if dgIndicator in Grid.Options then Inc(ColWidth, 12);
после
Delphi
1
 if dgColLines in Grid.Options then ColWidth := Grid.Columns.Count;
Но задав так константой размер индикатора мы рискуем получить визуальный баг с другим скином или манифестом.
Пока я не нашел способа получить размер индикатора.
1
07.08.2017, 00:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2017, 00:37
Помогаю со студенческими работами здесь

Изменение размеров столбцов DataGridView
В DataGridView, который заполнен на основе привязки данных, столбцы не изменяют свой размер (не...

Изменение размеров формы в зависимости от разрешения экрана
Здравствуйте. У меня возникло 2 проблемы. 1) Как на форму кинуть картинку с ресурса. Ну тоесть...

Изменение размера шрифта в TextBox в зависимости от его размеров
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data;...

Изменение размеров строк и столбцов на защищенном листе
Я защитил книгу паролем и дал некоторым ячейкам доступ, но у меня встала проблема при заполнении...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru