PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » ScrollAreaGadget. можно ли сделать очень тонкий скролл?


ScrollAreaGadget. можно ли сделать очень тонкий скролл?

Сообщений 1 страница 7 из 7

1

есть окошко, забитое под завязку. однако пользователи жалуются что типа кнопок не хватает - хотят больше :) я бы хотел при наведении мышки на эту область с кнопками - крутить скролл бар колесиком мышки. сам гаджет - по идее ScrollAreaGadget подойдет... но у него конского размера скроллбары. мне надо примерно 3 пикселя. у него же 20 наверное высотой.

https://i114.fastpic.ru/big/2021/0613/17/46b398c5083f4cb542075a492bac5517.png

подскажите варианты выкрутится. на первой части картинки как есть, на второй подрисовал скроллбар в пейнте. так то по идее можно, в зависимости от скроллбара, рисовать нужные гаджеты и соответственно не рисовать не нужные - но там селект происходит путем дорисовки вокруг нужной кнопки, сиречь картинки - FrameGadget, то есть рамки. плюс еще горячие клавиши есть, которые должны выделять начальные 7 штук. поэтому нужно сохранить весь ряд.

Отредактировано SeregaZ (13.06.2021 20:01:40)

0

2

хотя сейчас думаю - рисование FrameGadget потребует перевода "фокуса" на это поле. это я потом буду парится наводить этот фокус, потом переводить на основное окно... переделаю тогда все на канвас. тем более там все отработано.

0

3

Может эта функция поможет https://docs.microsoft.com/en-us/window … scrollinfo

0

4

SeregaZ написал(а):

мне надо примерно 3 пикселя. у него же 20 наверное высотой

это настройка самой винды, и она доступна пользователю
посмотри это, может оно и пишет, не знаю

Код:
GetSystemMetrics_(#SM_CXVSCROLL)

0

5

ну я бросил это гиблое дело со ScrollAreaGadget. решил на канвасе нарисовать и засинхронизировать со скроллбаром.

подскажите как цвет окна виндовс темы получить? хочу канвас закрашивать тем-же цветом, что и само окно, то есть его задний фон. ну то есть на котором кнопки расположены типа там...

оказалось просто - начинаем рисовать и вывод в окно и Point берем цвет :)

Отредактировано SeregaZ (15.06.2021 00:19:48)

0

6

в винде предусмотрено изменение цвета скрола, посмотри все константы SystemMetrics

а ширину наверно можно в реестре найти, если константы нет
думаю раз есть такая настройка, значит она сидит в реестре

0

7

Там целый раздел вроде так и называется SystemMetrics. Возможно чтобы включить эти настройки нужно перевести тему окна в классический режим. Поищи GetThemeColor.

Извиняюсь конечно за примеры из AutoIt3, но на оф.форуме не нашёл GetThemeColor, а так ну хоть какой то намёк конвертировать в PureBasic.

отключает тему для всего окна

Код:
DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0)

отключает тему для элемента

Код:
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle($Group1), "wstr", 0, "wstr", 0)

Данный пример в винде создавался косяк, когда  окно выводится за экран не было перерисовки и чекбоксы были черными (только на вкладках), а данный код получал цвет окна и перекрашивал чекбоксы.

Код:
Switch @OSVersion
    Case 'WIN_2000', 'WIN_XP', 'WIN_2003'
        $Part = 10
    Case Else
        $Part = 11
EndSwitch
$Color = _WinAPI_GetThemeColor($hTab, 'TAB', $Part, 1, 0x0EED)

Func _WinAPI_GetThemeColor($hWnd, $sClass, $iPart, $iState, $iProp)
	Local $hTheme = DllCall('uxtheme.dll', 'ptr', 'OpenThemeData', 'hwnd', $hWnd, 'wstr', $sClass)
	Local $Ret = DllCall('uxtheme.dll', 'lresult', 'GetThemeColor', 'ptr', $hTheme[0], 'int', $iPart, 'int', $iState, 'int', $iProp, 'dword*', 0)

	If (@error) Or ($Ret[0] < 0) Then
    $Ret = -1
	EndIf
	DllCall('uxtheme.dll', 'lresult', 'CloseThemeData', 'ptr', $hTheme[0])
	If $Ret = -1 Then
    Return SetError(1, 0, -1)
	EndIf
	Return SetError(0, 0, BitOR(BitAND($Ret[5], 0x00FF00), BitShift(BitAND($Ret[5], 0x0000FF), -16), BitShift(BitAND($Ret[5], 0xFF0000), 16)))
EndFunc 

ещё GetSysColor, SetSysColors

Отредактировано AZJIO (16.06.2021 01:39:10)

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » ScrollAreaGadget. можно ли сделать очень тонкий скролл?