Что нового

[Элементы GUI] Движущиеся элементы (ака The Bat!)

---Zak---

Скриптер
Сообщения
455
Репутация
120
Добрый день. Вроде бы еще такого не было...

Версия AutoIt: 3.3.8.0

Описание: скорее всего никому не придется рассказывать о почтовой программе The Bat!. Она то меня и натолкнула на идею создать информационное окно с выводом движущейся информации. Т.к. как в GUI я не сидел, то прошу Вашей помощи...

Идея заключается в следующем: выводить вот такую панельку - брать с сайта какую-либо информацию и после выводить ее на панель. При изменении на сайте информации - на панель информация обновляется с новым появлением.

Код:
ToolTip & TrayTip

Вещь, конечно, интересная, но кода приходится выносить много информации, то не удобная.

На вопрос: возможно ли такое сделать в AutoIT скорее всего получу ответ - да возможно =))) Но хотел бы получить пару пенделей советов или лучше наброски такой вот панельки.

PS: В программе The Bat! есть информационное окно (см. скрин), которое при появлении новых писем появляется и начинает двигать текст. Окон можно растягивать и двигать на любое удобное место.

Примечания:
y_e1f4ca5f.jpg


Как я понял надо скрестить много строк + http://autoit-script.ru/index.php/topic,9058.0.html +
Код:
GUICtrlSetPos



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

Сам написал, сам сделал тестовое:
Код:
#include <GUIConstantsEx.au3>

Global $PosX, $right, $label, $button, $msg
$PosX = 500
 AdlibRegister("MyAdlib", 30)

   GUICreate("My GUI position", 500, 100) ; will create a dialog box that when displayed is centered

    $right = 0
    $label = GUICtrlCreateLabel("my moving label", $PosX, 20)

    $button = GUICtrlCreateButton("Click to close", 50, 50)
    GUICtrlSetState(-1, $GUI_FOCUS) ; the focus is on this button

    GUISetState()

    While 1
        $msg = GUIGetMsg()

        If $msg = $button Or $msg = $GUI_EVENT_CLOSE Then Exit
        Sleep(10)
    WEnd


Func MyAdlib()
   $PosX = $PosX - 1
	  GUICtrlSetPos($label, $PosX, 20)
   If $PosX < -100 Then
	  $PosX = 500
   EndIf
EndFunc   ;==>MyAdlib
Ладно будем копать дальше...

ЗЫ: сюда тогда будем писать историю соображений, решений и т.п. =)
 

teges

Знающий
Сообщения
18
Репутация
16
Может кому еще понадобится
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>

Global $iMsgWidth, $giMsgPos
Global $gsTimer = 44 ; Таймер движения  Label

_CreateMsgBox() 	 ; Создать окно
_ShowMsgBox() 		 ; Показать окно
;~ _DeleteMsgBox() 	 ; Удалить окно
;~ _HideMsgBox() 	 ; Скрыть окно

AdlibRegister('_ShowMsg', $gsTimer)	; Задает движение Label
_UpdateMsg('[Элементы GUI] Движущиеся элементы (ака The Bat!)') ;Обновляет текст текст


While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Func _CreateMsgBox()
	Global $hBlanc, $hForm, $hParent ; Связанные окна

	Local $iWidth 	= 280		;Ширина окна
	$giMsgPos		= $iWidth
	Local $iHeight 	= 30 		; Высота окна
	Local $iColor 	= 0x000001	; Цвет фона
	Local $iTrans 	= 100 		; Прозрачность
	Local $aPos[2] 	= [40, 20]	; Позиция окна

	Local $iLabelHeight = 15 ; Высота Label
	Local $iTextColor 	= 0xFFFFFF	; Цвет текста

	$hBlanc = GUICreate("")
	$hForm 	= GUICreate("", $iWidth, $iHeight, $aPos[0], $aPos[1], $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED), $hBlanc)
	GUISetBkColor($iColor)
	$hParent = GUICreate("", $iWidth, $iHeight, $aPos[0], $aPos[1], $WS_POPUP, BitOR($WS_EX_TOPMOST, $WS_EX_LAYERED), $hForm)
	GUISetBkColor($iColor)

	Global $hMsgLabel = GUICtrlCreateLabel('', -1000, ($iHeight-$iLabelHeight)/2, -1, $iLabelHeight)
	;~ GUICtrlSetBkColor(-1, 0x000000) ;для проверки длины строки
	GUICtrlSetFont(-1, 9, -1, -1, 'Tahoma')
	GUICtrlSetColor(-1, $iTextColor)

	_WinAPI_SetLayeredWindowAttributes($hForm, $iColor, $iTrans, $LWA_ALPHA)
	_WinAPI_SetLayeredWindowAttributes($hParent, $iColor, 0, $LWA_COLORKEY)
EndFunc

Func _DeleteMsgBox()
	AdlibUnRegister('_ShowMsg')
	GUIDelete($hParent)
	GUIDelete($hForm)
	GUIDelete($hBlanc)
EndFunc

Func _ShowMsgBox()
	AdlibRegister('_ShowMsg', $gsTimer)
	GUISetState(@SW_SHOW, $hForm)
	GUISetState(@SW_SHOW, $hParent)
	WinSetOnTop($hForm,   "", 1)
	WinSetOnTop($hParent, "", 1)
EndFunc

Func _HideMsgBox()
	AdlibUnRegister('_ShowMsg')
	WinSetOnTop($hForm,   "", 0) 	;(?!)
	WinSetOnTop($hParent, "", 0)	;(?!)
	GUISetState(@SW_HIDE, $hForm)
	GUISetState(@SW_HIDE, $hParent)
EndFunc

Func _UpdateMsg($sMsgText)
	Local $iStringLen 	= StringLen($sMsgText)
	$iMsgWidth 	= $iStringLen*6.5

	GUICtrlSetPos($hMsgLabel, -1, -1, $iMsgWidth)
	GUICtrlSetData($hMsgLabel, $sMsgText)
EndFunc

Func _ShowMsg()
	$giMsgPos -= 1
	GUICtrlSetPos($hMsgLabel, $giMsgPos)
	If $giMsgPos < (-$iMsgWidth) Then $giMsgPos = 280
EndFunc
 
Верх