Форум: "Базы";
Текущий архив: 2003.01.20;
Скачать: [xml.tar.bz2];
ВнизУважаемые мастера. Вопрос о 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c