Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-62822
Igorek
2002-12-31 22:23
2003.01.20
Кто как встретил Новый Год?


14-62741
adolf_99
2003-01-04 16:47
2003.01.20
Надо срочно горю


4-62896
Ten
2002-12-02 04:18
2003.01.20
По поводу некоторых функций АПИ...


1-62475
Ag2002
2003-01-09 18:54
2003.01.20
Sender


8-62670
KKK
2002-08-31 02:49
2003.01.20
Tmultimedia





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский