Что нового

GUITFLabel - Создание форматированного элемента Label

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
AutoIt: 3.3.6.1+
Версия: 1.5
Категория: Элементы GUI
Описание: Позволяет создавать форматированные строчки используя элемент Label. Форматирование задаётся модификатором похожим на тег <font> в Html.

Пример:
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

#include "GUITFLabel.au3"

$hGUI = GUICreate("Example #1", 300, 200)

$sLabel1_Data = _
	'some simple data and... <font color="red" size="8.5" weight="800" attrib="italic">My</font> ' & _
	'<font color="blue" size="9" weight="800">Colored </font>' & _
	'<font color="darkgreen" attrib="underlined" size="8.5" name="Tahoma" cursor="POINTING">Label</font> data.'

$sLabel2_Data = _
	'and ' & _
	'<font color="brown" size="9" weight="800">Few</font> ' & _
	'<font color="darkorange" size="9" weight="800" style="' & BitOr($GUI_SS_DEFAULT_LABEL, $SS_NOPREFIX) & '">&more&</font> ' & _
	'<font color="navy" size="12" weight="800" top="-2.5" name="Georgia">strings</font> data.'

$nLabel1 = _GUICtrlTFLabel_Create($sLabel1_Data, 20, 20)
$nLabel2 = _GUICtrlTFLabel_Create($sLabel2_Data, 20, 50)

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $nLabel1[4]
			MsgBox(64, 'Hyperlink', GUICtrlRead($nLabel1[4]) & ' clicked.', 0, $hGUI)
	EndSwitch
WEnd

Файл: GUITFLabel_UDF.zip
(файлы во вложении это старые версии)

Снимки:


Список изменении:
v1.5
* Библиотека переименована в GUITFLabel.au3.
* _GUICtrlCreateTFLabel переименована в _GUICtrlTFLabel_Create, старые имена функции ещё поддерживаются в целях обратной совместимости.
* Исправлены некоторые проблемы с выравниванием текста.

v1.4
* Исправлена проблема с распознаванием параметра bkcolor как color. Это вызывало проблемы с корректным отображением цвета Label'а.
* Улучшена корректировка ширины и высоты (width / height) получаемой на выходе строки.
+ Добавлен пример сравнения двух строк и вывод результата с подсветкой отличий.

v1.3
+ Добавлен параметр "cursor" в теге <font>, поддерживает как числовые ID, так и строковые значения (POINTING, ARROW, CROSS, и т.п.), пример:
<font attrib="underlined" cursor="POINTING">Гиперссылка</font>
+ Добавлен "Генератор форматированных строк", позволяет использовать библиотеку более проще - теперь форматированные строки можно генерировать визуально.
* Исправлено некорректное использование набора символов (charset), вызывало добавление лишней длины к форматированным строкам при использовании некоторых шрифтов.
* Теперь неотформатированные строки (без тега <font>) создаются со шрифтом используемым в GUI (от GUISetFont).
* Косметические поправки в коде.

Автор(ы): G.Sandler (CreatoR)
Источник: autoitscript.com
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Re: _GUICtrlCreateTFLabel - Создание форматированного элемента Label

Неверная ссылка на скриншоты. При клике не открвается.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

Обновление...

Список изменении:
v1.3
+ Добавлен параметр "cursor" в теге <font>, поддерживает как числовые ID, так и строковые значения (POINTING, ARROW, CROSS, и т.п.), пример:
<font attrib="underlined" cursor="POINTING">Гиперссылка</font>
+ Добавлен "Генератор форматированных строк", позволяет использовать библиотеку более проще - теперь форматированные строки можно генерировать визуально.
* Исправлено некорректное использование набора символов (charset), вызывало добавление лишней длины к форматированным строкам при использовании некоторых шрифтов.
* Теперь неотформатированные строки (без тега <font>) создаются со шрифтом используемым в GUI (от GUISetFont).
* Косметические поправки в коде.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

Обновление...

Список изменении:
v1.4
* Исправлена проблема с распознаванием параметра bkcolor как color. Это вызывало проблемы с корректным отображением цвета Label'а.
* Улучшена корректировка ширины и высоты (width / height) получаемой на выходе строки.
+ Добавлен пример сравнения двух строк и вывод результата с подсветкой отличий.
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

Для меня сейчас это просто находка. Как раз нужно раскрасить текст в label. Но вот незадача! Посмотрите, что происходит:
<font color="Black" size="12">Duis aute irure dolor in reprehenderit in voluptate borum. </font><font size="12" weight="1000" bkcolor="Red" color="White" >l</font><font color="0x9a6a99" size="12"> amco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate borum.</font>

Может просто я чего-то не понимаю и на самом деле нет ошибки в функции...
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

А что именно происходит, глядя на скрины я так и не понял что вам надо.
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

Ой ой. и забыл то сказать! Нужно чтобы не было переноса текста(скрин 1), и отображался он с начала и до конца строки (скрин 2). В общем текст бродит как ему нравится, и я не понимаю почему. Если в тексте только 1 тег <font> то все вроде как нормально. Но если больше, то получается билеберда.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

Да, проблемы есть, позже выложу новую версию, попытаюсь поправить эти ляпы.
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

Вот это было бы очень здорово. Вы меня очень выручите. А то шаманить с 3-мя лэйблами мазохизм получается.
 
Автор
CreatoR

CreatoR

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

v1.5
* Библиотека переименована в GUITFLabel.au3.
* _GUICtrlCreateTFLabel переименована в _GUICtrlTFLabel_Create, старые имена функции ещё поддерживаются в целях обратной совместимости.
* Исправлены некоторые проблемы с выравниванием текста.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Bloodrinker
Я так понял это нужно было:

Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>

#include "GUITFLabel.au3"

$hGUI = GUICreate("Example #1", 350, 200)

$sLabel_Data = '<font color="Black" size="12">Duis aute irure dolor in reprehenderit in voluptate borum.</font><font size="12" weight="800" bkcolor="Red" color="White" top="12">l</font><font color="0x9a6a99" size="12" top="10"> amco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate borum.</font>'

$nLabel = _GUICtrlTFLabel_Create($sLabel_Data, 20, 20, 300, 70)

GUISetState(@SW_SHOW, $hGUI)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd


?
:scratch:
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Спасибо! Некоторые проблемы ушли. Но основные остались. Только я не до конца понял, почему текст не переносится автоматом а уходит за край формы? Но (!) Если выводить не форматированный текст, то он автоматом переносится.
А также не только уезжает за форму, но и еще 2-я строка отображается не с начала, а также шаманским образом переносится, why?
PS: Может я просто идиот и не вижу очевидного? :stars:
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Имел ввиду перенос, когда label заканчивается. Вот такая несуазица получается.
Как видим, текст уехал за label, "проснись" уехало от края, а дальше все почему-то началось с нового абзаца. А хотелось чтобы текст и дальше оставался "сплошняком"
Код:
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include "GUITFLabel.au3"
$hGUI = GUICreate("Form1", 405, 315, 192, 124)
$sLabel_Data1 = '<font color="Brown">Мороз и солнце; день чудесный!</font> <font color="Gray">Еще ты дремлешь, друг прелестный Пора, красавица, проснись:</font><font color="Green"> Открой сомкнуты негой взоры Навстречу северной Авроры, Звездою севера явись!</font>'
$nLabel = _GUICtrlTFLabel_Create($sLabel_Data1, 20, 20, 300, 70)
GUISetState(@SW_SHOW, $hGUI)
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
    EndSwitch
WEnd
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Bloodrinker [?]
Как видим, текст уехал за label, "проснись" уехало от края, а дальше все почему-то началось с нового абзаца.
Это будет очень сложно исправить. Дело в том, что каждый текст из тега font это отдельный Label, и его позиция слева задаётся относительно позиции предыдущего Label.

Буду думать как это можно сделать по другому...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
А пока могу предложить только это:

Код:
$sLabel_Data1 = '<font color="Brown">Мороз и солнце; день чудесный!</font> <font color="Gray">Еще ты дремлешь, друг прелестный</font>'
$sLabel_Data2 = '<font color="Gray">Пора, красавица, проснись:</font> <font color="Green">Открой сомкнуты негой взоры Навстречу</font>'
$sLabel_Data3 = '<font color="Green">северной Авроры, Звездою севера явись!</font>'

$nLabel1 = _GUICtrlTFLabel_Create($sLabel_Data1, 20, 20, 300, 70)
$nLabel2 = _GUICtrlTFLabel_Create($sLabel_Data2, 20, 40, 300, 70)
$nLabel2 = _GUICtrlTFLabel_Create($sLabel_Data3, 20, 60, 300, 70)
 

Bloodrinker

<Блуждающий...>
Сообщения
228
Репутация
19
Дело в том, что каждый текст из тега font это отдельный Label, и его позиция слева задаётся относительно позиции предыдущего Label.
я уже начал это понимать) просто мне нужно раскрасить текст, а стандартными ф-ми AutoIt это можно сделать только 3-мя label'ами, что не есть хорошо, так как выделение все время смещается на следующую букву, бежит по строчке так сказать. Если юзать 3 лэйбла то придется их двигать, что также приводит к проблемам. В общем не знаю что делать даже.
PS: А может как-то без Label'ов можно текст на форму вывести? (имею ввиду раскрашенный текст)?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Есть ещё такой вариант :smile:

Не много изменил вариант по ссылке RichEdit


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

Ну а вот пример Label
 
Верх