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

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

Толщина СкролБар-ов


Страницы:   1 2

DevilDevil ©   (2006-09-15 15:58:00) 

Для реализации скроллинга в собственном компоненте использую:

procedure WMVScroll(var Message: TWMVScroll); message WM_VSCROLL
procedure WMHScroll(var Message: TWMVScroll); message WM_VSCROLL
GetScrollInfo
SetScrollInfo


Каким образом задать произвольную (не стандартную) толщину полос прокрутки?


GrayFace   (2006-09-23 21:06:00) [1]

DevilDevil ©   (22.09.06 17:28) [26]
> clickmaker ©   (22.09.06 17:18) [25]
> 1. SystemParametersInfo с параметром SPI_SETNONCLIENTMETRICS

Поговорка "краткость - сестра таланта" в данном случае теряет смысл. Предоставленной информации мало.

Help -> Windows SDK. Но, все равно, менять настройки системы под свою программу неприлично.


clickmaker   (2006-09-22 17:35:00) [2]


> Предоставленной информации мало

остальную информацию предоставит MSDN или Win32 SDK reference

> Пробовал. Неудачно

Быть не может. Пробовал просто положить на форму TScrollBar и поменять Width? А теперь тоже самое, но положить скролбар например на панель. А после обрабатывать OnScroll.


DevilDevil   (2006-09-22 17:28:00) [3]

> clickmaker ©   (22.09.06 17:18) [25]
> 1. SystemParametersInfo с параметром SPI_SETNONCLIENTMETRICS


Поговорка "краткость - сестра таланта" в данном случае теряет смысл. Предоставленной информации мало.

> 2. TScrollBar.Create; ScrollBar.Width :=

Пробовал. Неудачно.


clickmaker   (2006-09-22 17:18:00) [4]

действенных советов 2
1. SystemParametersInfo с параметром SPI_SETNONCLIENTMETRICS
2. TScrollBar.Create; ScrollBar.Width :=


DevilDevil   (2006-09-22 17:16:00) [5]

> GrayFace ©   (22.09.06 17:08) [22]

Наконец-то поступил нормальный ответ.

Хорошо. Как реализовать "доп. окно скроллбара" ? Т.е. просто в качестве предка в C reateWindowуказать Handleмоего компонента? А как различать вертикальный и горизонтальный скроллбары? Как отслеживать их изменения?


DevilDevil   (2006-09-22 17:09:00) [6]

Пожалуйста :(

Переозвучте, что же в посте [12] было действенным советом?

> Если только свои рисовать, но это дело объемное и многотрудное.

А традиционными методами обойтись нельзя?


GrayFace   (2006-09-22 17:08:00) [7]

Есть два способа - доп. окно скроллбара или WS_VSCROLL в основном окне. Ты делаешь второе, считая что делаешь первое. См. компонент TScrollBar.


clickmaker   (2006-09-22 17:06:00) [8]


> Лично Я никаких CreateWindow не вызывал. Конкретно в моём
> случае хватило SetScrollInfo

вот поэтому только [12]


Игорь Шевченко   (2006-09-22 17:03:00) [9]

DevilDevil ©   (22.09.06 16:18) [16]


> Изменение глобальных настроект системы Вы считаете дельным
> советом?


Так иначе никак :)

Если только свои рисовать, но это дело объемное и многотрудное.


DevilDevil   (2006-09-22 16:58:00) [10]

Лично Я никаких CreateWindowне вызывал. Конкретно в моём случае хватило SetScrollInfo.

Ну так по делу может у кого есть что сказать?


clickmaker   (2006-09-22 16:48:00) [11]


> код, создающий стандартный вертикальный скроллбар

что ты говоришь?!
А я-то наивный думал, что скролбар создается как-то так - CreateWindow("SCROLLBAR", .... );


Eraser   (2006-09-22 16:29:00) [12]

> [16] DevilDevil ©   (22.09.06 16:18)

The SetScrollInfo function sets the parameters of a scroll bar, including the minimum and maximum scrolling positions, the page size, and the position of the scroll box (thumb). The function also redraws the scroll bar, if requested.

(c) MSND.


DevilDevil   (2006-09-22 16:18:00) [13]

> clickmaker ©   (22.09.06 15:08) [14]

SetScrollInfo(Handle,SB_VERT,&Info, 1);

Игорь Шевченко ©   (22.09.06 15:28) [15]

Изменение глобальных настроект системы Вы считаете дельным советом?


Игорь Шевченко   (2006-09-22 15:28:00) [14]


> Ну так может кто нибудь даст дельный совет?


Он дан в [12]


clickmaker   (2006-09-22 15:08:00) [15]


> Код, создающий скролбары:

Ткни пальцем, где тут создаются скролбары?


DevilDevil   (2006-09-22 15:05:00) [16]

> DiamondShark ©   (21.09.06 21:27) [12]
> Вместо того, чтобы показать код, создающий твоё окно со  скролбарами, ребусы тут загадываешь.


Окно- мой TCustomControl компонент. Код, создающий скролбары:
void __fastcallTInfoTable::SetUpScrollV()
{
 SCROLLINFO Info = {0};
 Info.cbSize= sizeof(Info);
 Info.fMask=SIF_ALL;

if (!VScrollWidth || !FRowsCount || !FColsCount)
  {VScrollPos=0; gotol_end;}

 GetScrollInfo(Handle,SB_VERT,&Info);

 Info.nMax = FNeedRowsHeight;
 Info.nPage = ClHeight+1;
 VScrollPos = Info.nPos = Min(Info.nPos, Info.nMax-Info.nPage+1);
 NormalizePos(VScrollPos);

l_end:
 SetScrollInfo(Handle,SB_VERT,&Info, 1);
}


Ну так может кто нибудь даст дельный совет?


DiamondShark   (2006-09-21 21:27:00) [17]


> Я для того и указал в [0] GetScrollInfo, SetScrollInfo,
> чтобы Мастера WinAPI сразу поняли, каким образом у меня
> внедрены скроллбары.

Экий ты хитровыкрученный.
Вместо того, чтобы показать код, создающий твоё окно со скролбарами, ребусы тут загадываешь.
Ну давай, поотгадываем твои ребусы.


> DevilDevil ©   (15.09.06 19:33) [6]
> void __fastcall TInfoTable::WMVScroll(TWMVScroll& Msg)
> {
>  SCROLLINFO Info;
>  Info.cbSize=sizeof(Info);
>  Info.fMask=SIF_ALL;
>  GetScrollInfo(Handle,SB_VERT,&Info);

Судя по аргументам вызова GetScrollInfo получаешь ты параметры стандартного скролбара окна. Естественно, никакого хэндла скролбара у тебя нет.

А стандартные скролбары не изменишь. Разве что глобально для всей системы.


> Естественно я не делал ни каких окон со стилем WS_VSCROLL

Просто ты об этом не знаешь ;)


DevilDevil   (2006-09-21 15:45:00) [18]

> Пофигист   (20.09.06 23:20) [9]
> Конечно, не работает.
> Потому что, скорее всего, никакого хэндла скролбара там
> нет.
> Ты забыл в самом начале сказать, у тебя внедрён отдельный
> scroll bar control, или это просто окно со стилем WS_VSCROLL.
> Во втором случае никаких хэндлов скролбаров не бывает, это
> элемент неклиентской области окна.


Я для того и указал в [0] GetScrollInfo, SetScrollInfo, чтобы Мастера WinAPI сразу поняли, каким образом у меня внедрены скроллбары. Естественно я не делал ни каких окон со стилем WS_VSCROLL. Хотя... делаю впервые, могу и ошибаться...


Германн   (2006-09-21 01:52:00) [19]


> Ketmar ©   (15.09.06 19:37) [7]
>
> и какого ангела код изменения размеров делает в обработчике
> WM_VSCROLL?


Даже в WinAPI Ketmar себе (или точнее, ему) не изменяет! :-) Или делает вид, что не изменяет. Хотя сейчас уже это не так интересно как раньше.


Пофигист   (2006-09-20 23:20:00) [20]

Конечно, не работает.
Потому что, скорее всего, никакого хэндла скролбара там нет.

Ты забыл в самом начале сказать, у тебя внедрён отдельный scroll bar control, или это просто окно со стилем WS_VSCROLL.

Во втором случае никаких хэндлов скролбаров не бывает, это элемент неклиентской области окна.


Страницы:   1 2

Наверх

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