Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.20;
Скачать: CL | DM;

Вниз

Уважаемые мастера. Вопрос о DBGrid.   Найти похожие ветки 

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

Нужно сделать одну из колонок авторазмерной.
Я делал что то вроде: на 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-25 16:04) [1]

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


 
vopros ©   (2002-12-25 16:06) [2]

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


 
Anatoliy ©   (2002-12-25 16:33) [3]


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

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


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


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

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


 
Lady D ©   (2002-12-25 16:50) [5]


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

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


 
Anatoliy ©   (2002-12-25 16:53) [6]


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

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


 
Lady D ©   (2002-12-25 17:04) [7]


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

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


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


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

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


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

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


 
Lady D ©   (2002-12-25 17:27) [9]


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

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


 
Anatoliy ©   (2002-12-25 17:31) [10]


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

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


 
Anatoliy ©   (2002-12-25 17:35) [11]


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

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


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


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

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


 
Lady D ©   (2002-12-25 17:47) [13]


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

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


 
Anatoliy ©   (2002-12-25 18:03) [14]

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


 
Lady D ©   (2002-12-26 13:04) [15]

uses Windows;

ShowScrollBar(DBGrid1.Handle, SB_VERT, true);



Страницы: 1 вся ветка

Текущий архив: 2003.01.20;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
1-62509
Slayer
2003-01-10 14:15
2003.01.20
Информация из *.AVI


1-62617
Yegor Derevenets
2003-01-08 13:00
2003.01.20
Про MainMenu и OnKeyXXXX


1-62478
Pavliner
2003-01-10 01:21
2003.01.20
Подскажите please новичку как свернуть прогу в SysTray?


1-62610
d_oleg
2003-01-09 12:49
2003.01.20
Dll - динамическое создание ресурса


14-62747
VJar
2003-01-04 13:45
2003.01.20
Ищу компонент