Что нового

Как сделать Кнопочный скролл

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Приветсвую. Возможно ли сделать скролл кнопок? ну или как это называется? Как пример даже подойдет переключатель страниц на этом форуме (1 2 3 ... 30). Впринципе это вполне ясно как сделать. Но способ, который я знаю, достаточно долгий и корявый( а именно при нажатии на последнюю кнопку в строке кнопок эти кнопки удаляются и создаются другие и наоборот) но что то это уж слишком ужасно звучит. Вот что хочу узнать. Есть ли простой и надежный способ это осуществить. И если да, то как.
Спасибо
 

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
http://autoit-script.ru/autoit3_docs/functions/GUICtrlCreateTab.htm
http://autoit-script.ru/autoit3_docs/functions/GUICtrlCreateTabItem.htm
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Писал помню более трёх лет назад, там парсер новостей с сайта, там их было где-то 10 000 штук. Я сделал вкладки 1, 2, 3, ... и потом просто отлавливал клик по этой вкладке, брал её index и подгружал в ListView новые данные.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Варианты конечно интересные, но я имел ввиду немного не это. Попробую пояснить подробнее

Вот есть к примеру 20 кнопок (GUICtrlCreateButton) которые должны быть обязательно в строчку. Но окно GUI, к примеру может вместить в себя лишь 5 из них из за размера. И вот как я себе представляю этот скролл. Вот представьте себе обычный WORD.doc
Там куча страниц, и возможно курсовая работа которую все давно писали. И справа от текста есть ползунок, который страницы прокручивает.

Вооот. И мой вопрос можно ли под такой же ползунок засунуть кнопки. Горизонтально конечно. Или же есть какой либо другой примерно!! такой же способ переключения кнопок.


Использовать вкладки совсем не вариант в моем случае.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
Вообще-то когда идёт много вкладок, там появляются стрелочки, на которые можно будет нажимать и будут появляться вкладки.
 
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
alex33 сказал(а):
Вообще-то когда идёт много вкладок, там появляются стрелочки, на которые можно будет нажимать и будут появляться вкладки.

А это сопоставимо с [TABITEM]? Просто в моем случае если таким образом делать, то получится что вкладки будут переключать другие вкладки. А в справке, вроде как написано, что в одном окне может быть создан только один элемент TAB.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
VermanVendetta13 [?]
только один элемент TAB.
Можно создать один Tab, а внутри него можно создать сколько хочешь TabItems (элементов).
Вы Tab и TabItem не путайте.
 

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
пришла такая мысль, но чего то не дошла )))
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Example1()


Func Example1()
   
  GUICreate("Мой GUI", -1, -1, -1, -1, $WS_THICKFRAME + $WS_HSCROLL) 
     GUISetState(@SW_SHOW)

$Button_1 = GUICtrlCreateButton("1", 10, 20, 100)
$Button_2 = GUICtrlCreateButton("2", 110, 20, 100)
$Button_3 = GUICtrlCreateButton("3", 260, 20, 100)
$Button_4 = GUICtrlCreateButton("4", 360, 20, 100)
$Button_5 = GUICtrlCreateButton("5", 460, 20, 100)
$Button_6 = GUICtrlCreateButton("6", 560, 20, 100)
$Button_7 = GUICtrlCreateButton("7", 660, 20, 100)
$Button_8 = GUICtrlCreateButton("8", 760, 20, 100)

	    While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
        EndSwitch
    WEnd
    GUIDelete()
EndFunc


вроде горизонтальная прокрутка есть, но не передвигает кнопки, или я что то недопонимаю )))


Добавлено:
Сообщение автоматически объединено:

http://autoit-script.ru/index.php?topic=16397.0
похожая тема
 

Prog

Продвинутый
Сообщения
600
Репутация
77
ZeVSalt [?]
вроде горизонтальная прокрутка есть, но не передвигает кнопки
Не все так просто. Система только информирует о передвижении скролла, а передвигать нужно программно.
 

ZeVSalt

Я не лупоглазый, это прищур такой !
Сообщения
136
Репутация
0
Автор
V

VermanVendetta13

Новичок
Сообщения
147
Репутация
0
Сделал как сказал алекс, но у меня получилось только хуже чем было
Код:
#Include <Icons.au3>
#Include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <GUIConstants.au3>
#include "MouseOnEvent.au3"

Global $FirstTab = 1
Global $LastTab = 3
Global $CurTab = $FirstTab

Local $tab, $iCombo, $msg, $Gui, $Pic, $Pic2


$GUI=GUICreate('Картинка и список', 640, 480)
$Pic = GUICtrlCreatePic("", 0,40,100,200)
$Pic2 = GUICtrlCreatePic("", 0,40,100,200)

GUISetBkColor(0xB4E1D3)
GUISetFont(9, 300)

$tab = GUICtrlCreateTab(10, 10, 380, 20)
GUICtrlCreateTabItem("1 картинка")


 If Not @Compiled Then

    _SetImage($Pic, @ScriptDir & '\CrashXP.bmp')
  Else

$hInstance = _WinAPI_GetModuleHandle(0)
$hBitmap = _WinAPI_LoadBitmap($hInstance, 200)
_SetHImage($Pic, $hBitmap)
_WinAPI_DeleteObject($hBitmap)

  EndIf

GUICtrlCreateTabItem("Вторая картинка")

 If Not @Compiled Then

    _SetImage($Pic2, @ScriptDir & '\son.bmp')
  Else

$hInstance = _WinAPI_GetModuleHandle(0)
$hBitmap = _WinAPI_LoadBitmap($hInstance, 201)
_SetHImage($Pic2, $hBitmap)
_WinAPI_DeleteObject($hBitmap)

  EndIf
GUISetState()

; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
    $msg = GUIGetMsg()
    Switch $msg
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $tab
            ; отображает кликнутую вкладку
            WinSetTitle($Gui, "", "Вкладки (Tab) в GUI, текущая " & GUICtrlRead($tab))
        Case $iCombo
            GUICtrlSetStyle($tab, BitOR($GUI_SS_DEFAULT_TAB, Execute(GUICtrlRead($iCombo))))
    EndSwitch
WEnd
ну там конечно наковырял что только можно и нельзя.






ZeVSalt, идея у тебя суперская, но даже если скролл будет програмно двигать кнопки, разве содержимое не будет двигаться вместе с ними?


Добавлено:
Сообщение автоматически объединено:

вобщем сделал немного по другому, но оно вылетает моментально при нажатии на кнопку 3, но если не не менять значения у $TABITEM, более менее срабатывает, до тех пор пока не навести на них курсор, и тогда названия становятся такими как и были

Код:
; НАЧАЛО

 $GUI=GUICreate('Вкладки')

 Dim $TABITEM[4][5]

 $TABITEM[1][0]=GUICtrlCreateButton('1 вкладка',10,10,100,25)
 $TABITEM[2][0]=GUICtrlCreateButton('2 вкладка',10+100,10,100,25)
 $TABITEM[3][0]=GUICtrlCreateButton('3 вкладка',10+100+100,10,100,25)



 $TABITEM[1][1]=GUICtrlCreateList('Список 1',10,10+30,100,200)
 $TABITEM[1][2]=GUICtrlCreateButton('Кнопка 1',10+100+10,100,100,25)
 $TABITEM[2][1]=GUICtrlCreateList('Список 2',10,10+30,100,200)
 $TABITEM[2][2]=GUICtrlCreateButton('Кнопка 2',10+100+10,100,100,25)
 $TABITEM[3][1]=GUICtrlCreateList('Список 3',10,10+30,100,200)
 $TABITEM[3][2]=GUICtrlCreateButton('Кнопка 3',10+100+10,100,100,25)

 SHOWTAB(1)

 GUISetState()

 While True
  Switch GUIGetMsg()
   Case -3
    Exit
   Case $TABITEM[1][0]
    SHOWTAB(1)
   Case $TABITEM[2][0]
    SHOWTAB(2)
   Case $TABITEM[3][0]
    SHOWTAB(3)
   Case $TABITEM[1][1]
    MsgBox(0,'1 вкладка','Выбран список')
   Case $TABITEM[1][2]
    MsgBox(0,'1 вкладка','Нажата кнопка')
   Case $TABITEM[2][1]
    MsgBox(0,'2 вкладка','Выбран список')
   Case $TABITEM[2][2]
    MsgBox(0,'2 вкладка','Нажата кнопка')
   Case $TABITEM[3][1]
    MsgBox(0,'3 вкладка','Выбран список')
   Case $TABITEM[3][2]
    $TABITEM[4][0]=GUICtrlCreateButton('4 вкладка',10,10,100,25)
 $TABITEM[5][0]=GUICtrlCreateButton('5 вкладка',10+100,10,100,25)
 $TABITEM[6][0]=GUICtrlCreateButton('6 вкладка',10+100+100,10,100,25)

  $TABITEM[4][1]=GUICtrlCreateList('Список 4',10,10+30,100,200)
 $TABITEM[4][2]=GUICtrlCreateButton('Кнопка 4',10+100+10,100,100,25)
 $TABITEM[5][1]=GUICtrlCreateList('Список 5',10,10+30,100,200)
 $TABITEM[5][2]=GUICtrlCreateButton('Кнопка 5',10+100+10,100,100,25)
 $TABITEM[6][1]=GUICtrlCreateList('Список 6',10,10+30,100,200)
 $TABITEM[6][2]=GUICtrlCreateButton('Кнопка 6',10+100+10,100,100,25)
 SHOWTAB(1)
 While True
  Switch GUIGetMsg()
	  Case -3

		  Exit
   Case $TABITEM[4][0]
    SHOWTAB(4)
   Case $TABITEM[5][0]
    SHOWTAB(5)
   Case $TABITEM[6][0]
    SHOWTAB(6)
   Case $TABITEM[1][1]
    MsgBox(0,'4 вкладка','Выбран список')
   Case $TABITEM[1][2]
    MsgBox(0,'4 вкладка','Нажата кнопка')
   Case $TABITEM[2][1]
    MsgBox(0,'5 вкладка','Выбран список')
   Case $TABITEM[2][2]
    MsgBox(0,'5 вкладка','Нажата кнопка')
   Case $TABITEM[3][1]
    MsgBox(0,'6 вкладка','Выбран список')

	 EndSwitch
 WEnd
  EndSwitch
 WEnd

 Func SHOWTAB($NUMBER)

  For $I=1 To Ubound($TABITEM,1)-1
   For $J=1 To Ubound($TABITEM,2)-1
    If $TABITEM[$I][$J] Then GUICtrlSetState($TABITEM[$I][$J],32)
   Next
  Next

  For $I=1 To Ubound($TABITEM)-1
   If $TABITEM[$NUMBER][$I] Then GUICtrlSetState($TABITEM[$NUMBER][$I],16)
  Next

 EndFunc

; КОНЕЦ



В чем я тут мог ошибиться?
 
Верх