Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Уважаемые мастера. Вопрос о DBGrid. [D6]


Anatoliy ©   (2002-12-25 16:00:00) 

Нужно сделать одну из колонок авторазмерной.
Я делал что то вроде: на OnResize формы вешал процедурку
procedure ResizeAutoGrid(AGrid:TDBGrid;AAutoCol:Integer);
VAR I:Integer;
FW,FWC:Integer;
begin
if Assigned(AGrid) then
with AGrid do
begin
FW:=ClientWidth;
FWC:=0;
for I:=0 to Columns.Count-1 do
if I<>AAutoCol then FWC:=FWC+Columns[I].Width;
Columns[AAutoCol].Width:=FW-FWC-8;
end;
end;

Работат сносно, до тех пор, пока в gride больше больше одной строки - есть scrollbar. Скроллбар исчезает - нужно пересчитать размер.
Как поймать момент появления скроллбара в гриде. Или может по другому решить задачу?


Lady D   (2002-12-26 13:04:00) [1]

uses Windows;

ShowScrollBar(DBGrid1.Handle, SB_VERT, true);


Anatoliy   (2002-12-25 18:03:00) [2]

Решение проблемы я нашел в другом :)
Хотя так нечестно, изначально в задаче дожно быть 2 грида - один сверху, другой под ним. Размеры колонок одинаковы, и я просто копирую размеры из верхнего грида (у него всегда есть скроллбар). Но думаю тему можно продолжить.


Lady D   (2002-12-25 17:47:00) [3]


> Хотя я убрал "штучку по которой бегает курсор".

А вот об этом ClientWidth ничего не знает :-)


Anatoliy   (2002-12-25 17:44:00) [4]


> ClientWidth как раз таки подразумевает, что ScrollBar и
> Border уже есть, а Ваша 8-ка - это та штучка, по которой
> бегает курсор.

И точно. Хотя я убрал "штучку по которой бегает курсор".


Anatoliy   (2002-12-25 17:35:00) [5]


>
> > Стоит ли так долго думать об этом. Пусть ширина гепотетического
>
> > ScrollBar будет учтена сразу.
>
> Хотя в таком варианте тоже неплохо!

Нет. Не годится. Только меняешь размер формы - плывет. В ClientWidth уже заложена ширина скроллбара!


Anatoliy   (2002-12-25 17:31:00) [6]


> Стоит ли так долго думать об этом. Пусть ширина гепотетического
> ScrollBar будет учтена сразу.

Хотя в таком варианте тоже неплохо!


Lady D   (2002-12-25 17:27:00) [7]


> 8-ку я подобрал эмпирически. Попробовал подставить вместо
> нее GetSystemMetrics(SM_CXVSCROLL). Оказывается в ClientWidth
> учитывается ширина скроллбара! Но откуда эта восьмерка сам
> не пойму!

ClientWidth как раз таки подразумевает, что ScrollBar и Border уже есть, а Ваша 8-ка - это та штучка, по которой бегает курсор.


Anatoliy   (2002-12-25 17:13:00) [8]


> Columns[AAutoCol].Width:=FW-FWC-8;

8-ку я подобрал эмпирически. Попробовал подставить вместо нее GetSystemMetrics(SM_CXVSCROLL). Оказывается в ClientWidth учитывается ширина скроллбара! Но откуда эта восьмерка сам не пойму!


> Стоит ли так долго думать об этом. Пусть ширина гепотетического
> ScrollBar будет учтена сразу.

Тогда получится пустое место справа грдида при наличии скроллбара. Это не эстетично.


Lady D   (2002-12-25 17:04:00) [9]


> Тоже верно. Но все-же как узнать есть ли полоса или нет.
> Может API-шной функцией?

Стоит ли так долго думать об этом. Пусть ширина гепотетического ScrollBar будет учтена сразу.


Anatoliy   (2002-12-25 16:53:00) [10]


> Для правильного Resize потребуется знать и ширину Scrollbar.

Тоже верно. Но все-же как узнать есть ли полоса или нет. Может API-шной функцией?


Lady D   (2002-12-25 16:50:00) [11]


> Мне нужно узнать не ширину а наличие вертикального скроллбара
> в гриде.

Для правильного Resize потребуется знать и ширину Scrollbar.


Anatoliy   (2002-12-25 16:42:00) [12]


> Ehlib
> Или посмотри как у них реализовано это.

TDBGrid наследник TCustomGrid, а него свойство ScrollBars - protected!


Anatoliy   (2002-12-25 16:33:00) [13]


> GetSystemMetrics(SM_CXVSCROLL) - ширина ScrollBar

Мне нужно узнать не ширину а наличие вертикального скроллбара в гриде.


vopros   (2002-12-25 16:06:00) [14]

Ehlib
Или посмотри как у них реализовано это.


Lady D   (2002-12-25 16:04:00) [15]

GetSystemMetrics(SM_CXVSCROLL) - ширина ScrollBar


Наверх

Титульная страница Поиск, карта сайта Написать письмо