Показать полную графическую версию : [решено] Проблема с перемещением слайдера (trackbar)
alexey_a
11-05-2009, 20:27
проблема в следующем:
я двигаю слайдер с помощью функции _GUICtrlSlider_SetPos , слайдер перемещается но при этом не передает информацию о перемещении родительскому окну. нашел инфу, что надо послать родительскому окну нотификацию TRBN_THUMBPOSCHANGING. но как это сделать не понимаю.
слайдер перемещается но при этом не передает информацию о перемещении родительскому окну »
Пример можно увидеть, где оно должно учитываться?
нашел инфу, что надо послать родительскому окну нотификацию TRBN_THUMBPOSCHANGING. но как это сделать не понимаю. »
А откуда инфа? Возможно там и решение :)
alexey_a
12-05-2009, 12:00
Цитата alexey_a:нашел инфу, что надо послать родительскому окну нотификацию TRBN_THUMBPOSCHANGING. но как это сделать не понимаю. »
А откуда инфа? Возможно там и решение »
инфа из МСДН.
Цитата alexey_a:слайдер перемещается но при этом не передает информацию о перемещении родительскому окну »
Пример можно увидеть, где оно должно учитываться? »
не понял, какой приме нужен. а слайдер двигаю элементарно:
$hwnd = ControlGetHandle($title, "", $ID)
_GUICtrlSlider_SetPos($hwnd, $pos)
какой приме нужен »
Пример где требуется «передать информацию о перемещении родительскому окну».
слайдер двигаю элементарно »
Немного подправленный пример из справки работает нормально:
#include <GuiConstantsEx.au3>
#include <GuiSlider.au3>
; Create GUI
GUICreate("Slider Set Pos", 400, 296)
$hSlider = GUICtrlCreateSlider(2, 2, 396, 20, BitOR($TBS_TOOLTIPS, $TBS_AUTOTICKS, $TBS_ENABLESELRANGE))
GUISetState()
; Set Pos
$hwnd = ControlGetHandle("Slider Set Pos", "", $hSlider)
_GUICtrlSlider_SetPos($hwnd, 50)
; Get Pos
MsgBox(4160, "Information", "Pos: " & _GUICtrlSlider_GetPos($hSlider))
; Loop until user exits
Do
Until GUIGetMsg() = $GUI_EVENT_CLOSE
alexey_a
12-05-2009, 15:08
Пример где требуется «передать информацию о перемещении родительскому окну». »
пример точный не могу указать. но суть в следующем: у меня есть готовое приложение, в нем есть слайдер, двигая который мы изменяем картинку. так вот когда слайдер передвигаю, то картинка не меняется. можешь попробовать с любым слайдером в готовом стороннем приложение. Немного подправленный пример из справки работает нормально: »
еще раз повторюсь: слайдер передвигается, а сообщение родительскому окну не отправляется. т.е. получается,что бегунок слайдера просто перерисовывается в новом месте, а родительское окно об этом ничег оне знает.
пример точный не могу указать »
можешь попробовать с любым слайдером в готовом стороннем приложение »
Я значит должен и пример сам делать, и ещё приложение искать?
еще раз повторюсь: слайдер передвигается, а сообщение родительскому окну не отправляется »
Поэтому и пример нужен, чтобы понять проблему.
Ладно, у меня сегодня хорошее настроение, вот пример, и решение проблеме (ControlClick :)):
#include <GuiConstants.au3>
#include <GuiSlider.au3>
$GUI = GUICreate("Test Script", 300, 200)
$Icon = GUICtrlCreateIcon("Shell32.dll", Random(1, 10, 1), 20, 80, 16, 16)
$Slider = GUICtrlCreateSlider(20, 40, 260, 20)
$Button = GUICtrlCreateButton("Set Slider", 20, 10, 60, 20)
GUISetState(@SW_SHOW, $GUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button
$hSlider = ControlGetHandle($GUI, "", $Slider)
_GUICtrlSlider_SetPos($hSlider, Random(1, 100, 1))
ControlClick($GUI, "", $hSlider)
Case $Slider
ConsoleWrite("Slider changed" & @CRLF)
GUICtrlSetImage($Icon, "Shell32.dll", Random(1, 10, 1))
EndSwitch
WEnd
alexey_a
13-05-2009, 18:50
Ладно, у меня сегодня хорошее настроение, вот пример, и решение проблеме (ControlClick ): »
спасибо, великий и могучий! :) и что мне самому в голову не пришло попробовать controlClick?!
alexey_a
14-05-2009, 19:12
Ладно, у меня сегодня хорошее настроение, вот пример, и решение проблеме (ControlClick ): »
проблема втом, что после ControlClick слайдер сдвигается на одну позицию. ControlClick делает клик по середине контрола. соответственно: если ты пытаешься установить на позицию 1, то слайдер устанавливается на позицию 2, т.е. все время ("необходимая позиция"+1), пока необходимая позиция находится до середины контрола, и все время ("необходимая позиция"-1), пока необходимая позиция находится после середины контрола. Т.е я никаким образом не могу установить позиции: начальная и конечная. :)
Немного поправил пример Creat0R`а. Просто мне не нравится ControlClick().
:wink:
#include <GuiConstants.au3>
#include <GuiSlider.au3>
#include <WindowsConstants.au3>
Global Const $SB_ENDSCROLL = 0x0008
$GUI = GUICreate("Test Script", 300, 200)
$Icon = GUICtrlCreateIcon("Shell32.dll", Random(1, 10, 1), 20, 80, 16, 16)
$Slider = GUICtrlCreateSlider(20, 40, 260, 20)
$Button = GUICtrlCreateButton("Set Slider", 20, 10, 60, 20)
GUISetState(@SW_SHOW, $GUI)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $Button
; $hSlider = ControlGetHandle($GUI, "", $Slider)
_GUICtrlSlider_SetPos($Slider, Random(1, 100, 1))
DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $GUI, "int", $WM_HSCROLL, "wparam", $SB_ENDSCROLL, "lparam", GUICtrlGetHandle($Slider))
; ControlClick($GUI, "", $hSlider)
Case $Slider
ConsoleWrite("Slider changed" & @CRLF)
GUICtrlSetImage($Icon, "Shell32.dll", Random(1, 10, 1))
EndSwitch
WEnd
DllCall("user32.dll", "lparam", "SendMessage", "hwnd", $GUI, "int", $WM_HSCROLL, "wparam", $SB_ENDSCROLL, "lparam", GUICtrlGetHandle($Slider)) »
Блин, пробовал же подобное, разочаровавшись остановился на банальном ControlClick :)
alexey_a
18-05-2009, 19:00
Немного поправил пример Creat0R`а. Просто мне не нравится ControlClick(). »
теперь все работает!!! здорово! на само деле я тоже так пытался сделать, но так и не получилось. Вопрос, а откуда взялось оперделение константы Global Const $SB_ENDSCROLL = 0x0008 » ? это стандартное оперделение?
кстати я сделал чуть по-другому (строк побольше :)):
$contr_id = _WinAPI_GetDlgCtrlID($hwnd)
$parent_h = _WinAPI_GetParent($hwnd)
_GUICtrlSlider_SetPos($hwnd, $pos)
_SendMessage($parent_h, $WM_HSCROLL, $SB_ENDSCROLL, $contr_id)
Вопрос, а откуда взялось оперделение константы »
http://msdn.microsoft.com/en-us/library/bb787575(VS.85).aspx
alexey_a
19-05-2009, 09:47
Цитата alexey_a:Вопрос, а откуда взялось оперделение константы »
http://msdn.microsoft.com/en-us/libr...75(VS.85).aspx »
Спасибо! Что-то даже и не подумал, что для управления слайдером необходимо отсылать сообщения, которые предназначены для скролбаров.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.