FreeBasic
Главная
Вход
Регистрация
Суббота, 23.09.2017, 10:29Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Изменить ширину только одной кнопки в ToolBar-е
Изменить ширину только одной кнопки в ToolBar-е
WQДата: Среда, 19.11.2014, 15:22 | Сообщение # 1
Подполковник
Группа: Пользователи
Сообщений: 124
Репутация: 2
Статус: Offline
Можно ли в ToolBar-е изменить ширину только одной конкретной кнопки?
 
haavДата: Среда, 19.11.2014, 18:13 | Сообщение # 2
Генерал-лейтенант
Группа: Администраторы
Сообщений: 768
Репутация: 33
Статус: Offline
Тулбар - групповой контрол , в нем все изменения связаны. Думаю, что нельзя.

Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Пятница, 21.11.2014, 18:21 | Сообщение # 3
Подполковник
Группа: Пользователи
Сообщений: 124
Репутация: 2
Статус: Offline
Посмотрел - в Autoite такое можно сделать.
Тулбар там тоже на основе WinApi, но сам механизм установки ширины что-то мне непонятен:
также создается структура TBBUTTON, а дальше что-то "наверчено" wacko

Используется для этого две функции  _GUICtrlToolbar_SetButtonInfoи _GUICtrlToolbar_SetButtonInfoEx
Код
Func _GUICtrlToolbar_SetButtonInfo($hWnd, $iCommandID, $iImage = -3, $iState = -1, $iStyle = -1, $iWidth = -1, $iParam = -1)
      Local $iMask = 0

      Local $tButton = DllStructCreate($tagTBBUTTONINFO)
      If $iImage <> -3 Then
         $iMask = $TBIF_IMAGE
         DllStructSetData($tButton, "Image", $iImage)
      EndIf
      If $iState <> -1 Then
         $iMask = BitOR($iMask, $TBIF_STATE)
         DllStructSetData($tButton, "State", $iState)
      EndIf
      If $iStyle <> -1 Then
         $iMask = BitOR($iMask, $TBIF_STYLE)
         DllStructSetData($tButton, "Style", $iStyle)
      EndIf
      If $iWidth <> -1 Then
         $iMask = BitOR($iMask, $TBIF_SIZE)
         DllStructSetData($tButton, "CX", $iWidth)
      EndIf
      If $iParam <> -1 Then
         $iMask = BitOR($iMask, $TBIF_LPARAM)
         DllStructSetData($tButton, "Param", $iParam)
      EndIf
      DllStructSetData($tButton, "Mask", $iMask)
      Return _GUICtrlToolbar_SetButtonInfoEx($hWnd, $iCommandID, $tButton)
EndFunc   ;==>_GUICtrlToolbar_SetButtonInfo

Код
Func _GUICtrlToolbar_SetButtonInfoEx($hWnd, $iCommandID, $tButton)
    If $Debug_TB Then __UDF_ValidateClassName($hWnd, $__TOOLBARCONSTANT_ClassName)

    Local $iButton = DllStructGetSize($tButton)
    DllStructSetData($tButton, "Size", $iButton)
    Local $iRet
    If _WinAPI_InProcess($hWnd, $gh_TBLastWnd) Then
       $iRet = _SendMessage($hWnd, $TB_SETBUTTONINFOW, $iCommandID, $tButton, 0, "wparam", "struct*")
    Else
       Local $iBuffer = DllStructGetData($tButton, "TextMax")
       Local $tMemMap
       Local $pMemory = _MemInit($hWnd, $iButton + $iBuffer, $tMemMap)
       Local $pBuffer = $pMemory + $iButton
       DllStructSetData($tButton, "Text", $pBuffer)
       _MemWrite($tMemMap, $tButton, $pMemory, $iButton)
       _MemWrite($tMemMap, $pBuffer, $pBuffer, $iBuffer)
       $iRet = _SendMessage($hWnd, $TB_SETBUTTONINFOW, $iCommandID, $pMemory, 0, "wparam", "ptr")
       _MemFree($tMemMap)
    EndIf

    Return $iRet <> 0
EndFunc   ;==>_GUICtrlToolbar_SetButtonInfoEx

Во второй функции используется какой-то механизм работы с памятью...

В общем, вопрос снимаю, смысла нет с этим копаться.

Жалко, что в IUP нет аналога тулбара.


Сообщение отредактировал WQ - Пятница, 21.11.2014, 18:22
 
haavДата: Пятница, 21.11.2014, 20:10 | Сообщение # 4
Генерал-лейтенант
Группа: Администраторы
Сообщений: 768
Репутация: 33
Статус: Offline
А ну да с помощью сообщения TB_SETBUTTONINFO можно.

Цитата
Во второй функции используется какой-то механизм работы с памятью...

В общем, вопрос снимаю, смысла нет с этим копаться.


А че так быстро сдался то? Ты же уже сам нашел решение, при том на том языке, который ты вроде как изучал. В общем что-то типа этого нужно написать на FB, чтобы изменить ширину кнопки:

Код
dim tb As TBBUTTONINFO
tb.cbSize = SizeOf(TBBUTTONINFO) ' размер структуры
tb.dwMask = TBIF_SIZE ' маска
tb.cx = 150 ' размер кнопки
SendMessage(hwndToolbar,TB_SETBUTTONINFO,2,@tb) ' меняем ширину кнопки c ID = 2


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Библиотеки для FreeBasic » Библиотека Window9 для Freebasic » Изменить ширину только одной кнопки в ToolBar-е
Страница 1 из 11
Поиск: