WQ | Дата: Среда, 19.11.2014, 15:22 | Сообщение # 1 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Можно ли в ToolBar-е изменить ширину только одной конкретной кнопки?
|
|
| |
haav | Дата: Среда, 19.11.2014, 18:13 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: Offline
| Тулбар - групповой контрол , в нем все изменения связаны. Думаю, что нельзя.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
WQ | Дата: Пятница, 21.11.2014, 18:21 | Сообщение # 3 |
Полковник
Группа: Проверенные
Сообщений: 215
Статус: Offline
| Посмотрел - в Autoite такое можно сделать. Тулбар там тоже на основе WinApi, но сам механизм установки ширины что-то мне непонятен: также создается структура TBBUTTON, а дальше что-то "наверчено"
Используется для этого две функции _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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Статус: 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
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |