Помощь - Поиск - Пользователи - Календарь
Полная версия: Определение наличия вертикального скроллбара у DrawGrid
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
tvolf
Привет всем.

Такая проблема. Есть форма, на ней - компонент TDrawGrid. В этом DrawGrid'е в процессе работы программы отображается произвольное кол-во строк. У DrawGrid'а свойство ScrollBars установлено в ssVertical.
Возможно ли в run-time как-то узнать, имеется ли в данный конкретный момент у DrawGrid'а вертикальный скроллбар или нет ? Свойство DrawGrid.ClientWidth постоянно возвращает величину, скорректированную
на значение ширины скроллбара, независимо от того, есть он или нет.

Заранее благодарю.

ps. Delphi версии 7

volvo
Помнится мне, что делали вот такой WinAPI-шный трюк:

function has_vscrollbar(h: HWND): boolean;
var
sInfo: SCROLLINFO;
b: LongBool;
begin
sInfo.cbSize := SizeOf(sInfo);
sInfo.fMask := SIF_ALL;
b := GetScrollInfo(h, SB_VERT, sInfo);
result := b and (sInfo.nMax <> 100);
end;

, дело все в том, что если у окна нет скроллбара, то то GetScrollInfo либо возвращает False (что, кстати, логично - ведь его нет), либо все-таки True (обычно при первом вызове), но максимальное значение установлено в 100. Если же СкроллБар есть, то nMax установлен в 127...

Вызывать - с DrawGrid1.Handle ... Попробуй.
tvolf
Спасибо, работает. Собственно, мне надо только получить фактическую ширину клиентской области
DrawGrid'а c учетом присутствия в тот или иной момент вертикального скроллбара. Пока что сделал
так: сначала определяю, имеется ли вертикальный скроллбар или нет, а затем, если его нет, увеличиваю
DrawGrid.ClietnWidth на ширину скроллбара, полученного WinAPI-шной функцией
GetSystemMetrics(SM_CXVSCROLL).
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.