Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2014, 10:46   #1
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию Получить размер Scroll'a

Дано: Grid, на котором может появляться ScrollBar, в зависимости от к-ва строк, естественно.
Найти: ширину этого Grid так, чтобы ScrollBar оказывался ровно по краю, не налезал на последний столбец и зазора тоже не было.
Приходит в голову что-то типа
Grid1.Width:=(Grid1.DefaultColWidth +Grid1.GridLineWidth)*Grid1.ColCoun t+GetSystemMetrics(SM_CXVSCROLL);
но не работает, ширина пустого места с краю явно плывёт в зависимости от ColCount
Дmmm вне форума Ответить с цитированием
Старый 02.12.2014, 11:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Так что нужно? подогнать ширину колонок или ширину грида?
Если грида, то в цикле пройтись по колонкам, просуммировать их ширину плюс метрика.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.12.2014, 11:59   #3
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию

Грида, ширину скролла разве можно менять? У всех колонок одинаковая ширина, но не получается так, может еще что-то прибавлять надо?
Дmmm вне форума Ответить с цитированием
Старый 02.12.2014, 12:10   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не красиво, когда грид или любой визуальный объект по ширине дергается. Юзер тоже будет дергаться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.12.2014, 12:11   #5
Дmmm
Пользователь
 
Регистрация: 26.02.2013
Сообщений: 66
По умолчанию

Так в том и вопрос, как сразу ширину с запасом задать, чтобы скролл встал ровно?
Дmmm вне форума Ответить с цитированием
Старый 02.12.2014, 12:43   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну так бы сделал
Код:
type
  TDBGrid = class(DBGrids.TDBGrid)
  end;
...
  s:=DBGrid1.GridLineWidth*DBGrid1.ColCount;
  for i:=0 to DBGrid1.ColCount-1 do s:=s+DBGrid1.ColWidths[i];
  DBGrid1.ClientWidth:=s;
Почему то решил, что DBGrid. Но не важно, для стринггрида тоже, но без переопределения типа. Для него можно и без цикла используя DefaultColWidth. Главное - ClientWidth, она без учета скролбара
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.12.2014 в 12:47.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить размер dds-файла? RibGeDx Общие вопросы Delphi 8 16.03.2013 20:56
Как получить размер базы данных Greek9000 Общие вопросы .NET 1 02.08.2011 13:49
Как получить размер строки типа LPCWSTR? Gtx541 Общие вопросы C/C++ 1 30.05.2010 14:18
Получить размер диапазона в сантиметрах Саня_Д Microsoft Office Excel 2 28.09.2009 18:11
Scroll на форме MasterofCDM Общие вопросы Delphi 5 24.02.2009 16:18