Что нового

ScrollText - Прокрутка текста c GDI+

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AutoIt: 3.3.10.2+
Версия: 0.4

Категория: Графика, GDI+, Элементы GUI

Описание: Позволяет создавать элемент прокрутки текста с использованием GDI+.

Код/Пример:
Код:
#include <GUIConstantsEx.au3>
#include <InetConstants.au3>
#include <EditConstants.au3>
#include "ScrollText.au3"

Global $bPaused = False
Global $sImageFile = @TempDir & '\ST_autoit.jpg'

If Not FileExists($sImageFile) Then
	InetGet('https://www.autoitscript.com/autoit3/files/graphics/autoit_fire_wall_1024x768.jpg', $sImageFile)
EndIf

Global $iGUI_Width = 600
Global $iGUI_Height = 500

$hMain_GUI = GUICreate('ScrollText UDF Example', $iGUI_Width, $iGUI_Height)

Dim $sScrollData = _
        'Scrolling text(Comic Sans MS,48)\n' & _
        'using GDIPlus(Comic Sans MS,24)\n' & _
        '\n\nNow with images support...(Verdana,20,0x51A2A2,2)\n' & _
        '<img>' & $sImageFile & '</img>\n' & _
        '(Arial,50)\n' & _
        'UDF(Verdana,30)\n' & _
        'by(Times New Roman,40)\n' & _
        'CreatoR(Arial Black,60,0xFF0000,4)\n' & _
        '(Arial,100)\n' & _
        'Thanks to:(Tunga,40,0xB95C00,5)\n' & _
        'UEZ:(Impact,44)\n' & _
        'Yashied:(Impact,44)\n' & _
        'AutoIt Team:(Impact,32)\n' & _
        'AutoIt Community(MV Boli,32)'

_ScrollText_Create($hMain_GUI, $sScrollData, -1, 30, 500, 400, True, 1, 0, 11)

Dim $sScrollData = _
        'Scrolling 1 text(Comic Sans MS,48)\n' & _
        'using GDIPlus(Comic Sans MS,24)\n' & _
        '\n\nNow with images support...(Verdana,20,0x51A2A2,2)\n' & _
        '<img>' & $sImageFile & '</img>\n' & _
        '(Arial,50)\n' & _
        'UDF(Verdana,30)\n' & _
        'by(Times New Roman,40)\n' & _
        'CreatoR(Arial Black,60,0xFF0000,4)\n' & _
        '(Arial,100)\n' & _
        'Thanks to:(Tunga,40,0xB95C00,5)\n' & _
        'UEZ:(Impact,44)\n' & _
        'Yashied:(Impact,44)\n' & _
        'AutoIt Team:(Impact,32)\n' & _
        'AutoIt Community(MV Boli,32)'

;_ScrollText_SetData($sScrollData)

GUICtrlCreateLabel('Scroll Speed:', 60, $iGUI_Height - 28, 70, 20)
$iSpeed_Input = GUICtrlCreateInput('1', 140, $iGUI_Height - 30, 60, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
$iSpeed_UpDown = GUICtrlCreateUpdown(-1)
GUICtrlSetLimit(-1, 10, 1)

$iEnableMouseScroll_CB = GUICtrlCreateCheckbox('Enable scroll by mouse', 260, $iGUI_Height - 30)
GUICtrlSetState(-1, $GUI_CHECKED)

$iPause_Bttn = GUICtrlCreateButton('Pause', $iGUI_Width - 110, $iGUI_Height - 30, 60, 20)

GUISetState(@SW_SHOW, $hMain_GUI)

While 1
    $nMsg = GUIGetMsg()
    
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            _ScrollText_Destroy()
            Exit
		Case $iSpeed_UpDown
			_ScrollText_SetScrollSpeed(GUICtrlRead($iSpeed_Input))
		Case $iEnableMouseScroll_CB
			_ScrollText_EnableMouseScroll(GUICtrlRead($iEnableMouseScroll_CB) = $GUI_CHECKED)
		Case $iPause_Bttn
			$sText = $bPaused ? 'Pause' : 'Resume'
			
			_ScrollText_SetPause(Not $bPaused)
			GUICtrlSetData($iPause_Bttn, $sText)
			
			$bPaused = Not $bPaused
    EndSwitch
WEnd

Файл: ScrollText.zip

История версий:
v0.4
* _ScrollText_Create теперь проверяет на повторное создание элемента (что не поддерживается на данный момент).
+ Добавлена функция _ScrollText_SetData для динамического обновления данных.

v0.3
* Теперь библиотека поддерживает только AutoIt версию 3.3.10.2 и выше.
* Исправлена проблема с мерцанием курсора.
* Исправлена проблема с созданием элементов после использования _ScrollText_Create, элементы создавались внутри дочернего окна прокрутки.
* Исправлена проблема не установленного курсора до тех пор, пока не была использована прокрутка текста.
+ Добавлен параметр $iBorderStyle.
+ Добавлены параметры $iDefMouseCursor и $iScrollMouseCursor для установки курсора по умолчанию и прокрутки.
+ Добавлена возможность использования изображения в элементе прокрутки текста (используйте тег <img[ width=N[ height=N ]]>Local\Image\Path.bmp</img> для вставки изображения).

v0.2
* Изменён формат текста прокрутки (см. пример).
+ Добавлены параметры Color и Style отдельно для каждой строчки (см. заголовок UDF).
+ Добавлены параметры $iLeft, $iTop, $iWidth и $iHeight для определения позиции элемента ScrollText.
Параметры добавлены перед $bStartScroll.

v0.1
* Первая версия.

Спасибо:
* UEZ - За пример механизма прокрутки текста используя GDI+.
* Yashied - За помощь с реализацией полупрозрачного градиента для эффекта затухания текста.

Источник: autoit-script.ru
Автор(ы): G.Sandler (CreatoR)
 

Ganibal95

GreenBytes
Сообщения
877
Репутация
240
CreatoR
Сделать бы вроде такого, только Edit было-бы шикарно... :smile:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Ganibal95 [?]
Сделать бы вроде такого, только Edit было-бы шикарно
Я так раньше делал, а в чём собственно шикарность?
С GDI+ возможностей побольше, да и понадёжнее прокрутка.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Обновление...

v0.2
* Изменён формат текста прокрутки (см. пример).
+ Добавлены параметры Color и Style отдельно для каждой строчки (см. заголовок UDF).
+ Добавлены параметры $iLeft, $iTop, $iWidth и $iHeight для определения позиции элемента ScrollText.
Параметры добавлены перед $bStartScroll.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
А текст только вертикально может двигаться? Или можно и горизонтально, вроде бегущей строки (у меня есть вариант такой строки, но тут реализация поизящнее)?
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
CreatoR
Спасибо, там мощный пример :laugh:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Обновление...

v0.3
* Теперь библиотека поддерживает только AutoIt версию 3.3.10.2 и выше.
* Исправлена проблема с мерцанием курсора.
* Исправлена проблема с созданием элементов после использования _ScrollText_Create, элементы создавались внутри дочернего окна прокрутки.
* Исправлена проблема не установленного курсора до тех пор, пока не была использована прокрутка текста.
+ Добавлен параметр $iBorderStyle.
+ Добавлены параметры $iDefMouseCursor и $iScrollMouseCursor для установки курсора по умолчанию и прокрутки.
+ Добавлена возможность использования изображения в элементе прокрутки текста (используйте тег <img[ width=N[ height=N ]]>Local\Image\Path.bmp</img> для вставки изображения).
 

oesoes

xor eax,eax
Сообщения
171
Репутация
9
Ошибки в библиотеке по 270 & 566 строкам.

270:
Код:
DllCall($ghGDIPDll, "uint", "GdipSetTextRenderingHint", "handle", $_ST_hGraphicCntxt, "int", 4)

Попытка послать дескриптор библиотеке функцией DllOpen() я так понял, что якобы содержится в $ghGDIPDll, но вызова DllOpen() нигде по коду UDF не увидел. Или открывать DLL где-то вначале, либо менять на строчное представление библиотеки 'gdiplus.dll'.

566: Такая же проблема.

А вообще сделано круто, похож на эффект некоторых VCL компонент библиотеки JEDI (Delphi & Builder)
 

oesoes

xor eax,eax
Сообщения
171
Репутация
9
madmasles [?]
А можно подробнее немножко? Это как-то меняет дело? Я как загрузил архив, так и попытался запустить то, что имело имя `Example.au3` ничего не меняя. Я конечно понял, что вы хотели сказать но:

В моем GDIPlus.au3 эта константа гордо называется: $__g_hGDIPDll. В последних новостях библиотечки читаем-с:
* Теперь библиотека поддерживает только AutoIt версию 3.3.10.2 и выше.
Моя 3.3.12.0 стало быть должна подойти...

Читаем-с далее саму GDIPlus.au3:
Стало быть заголовочник у меня родной, с этой версии. Так что, лучше бы там в библиотеке поправить, однако.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
oesoes,
Не обратил внимания, что в 3.3.10.2 используется $ghGDIPDll, а в 3.3.12.0 уже $__g_hGDIPDll (зачем?), так что Вы, пожалуй, правы:
oesoes [?]
менять на строчное представление библиотеки 'gdiplus.dll'
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
oesoes [?]
В моем GDIPlus.au3 эта константа гордо называется: $__g_hGDIPDll
В 3.3.10.2 так ещё не было, поэтому и упустил.
Заменю на строковое значение, чтобы предотвратить дальнейшие конфликты.
 

oesoes

xor eax,eax
Сообщения
171
Репутация
9
Вот и я не понимал никогда, зачем так делать. Видать кому-то там наверху не понравилось, как выглядит и решил добавить подчеркиваний.

"А хотите, я его стукну? Он станет фиолетовым, в крапинку!"
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Обновил архив, версия та же.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Обновление...

v0.4
* _ScrollText_Create теперь проверяет на повторное создание элемента (что не поддерживается на данный момент).
+ Добавлена функция _ScrollText_SetData для динамического обновления данных.
 
Верх