Что нового

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
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 702
Re: _GUICtrlCreateTFLabel - Создание форматированного элемента Label

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

CreatoR

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
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 160
Репутация
2 329
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
Репутация
408
Re: GUICtrlCreateTFLabel - Создание форматированного элемента Label

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

Bloodrinker

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

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

CreatoR

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

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

Bloodrinker

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

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

CreatoR

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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329
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:
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 160
Репутация
2 329

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 160
Репутация
2 329
Bloodrinker [?]
Как видим, текст уехал за label, "проснись" уехало от края, а дальше все почему-то началось с нового абзаца.
Это будет очень сложно исправить. Дело в том, что каждый текст из тега font это отдельный Label, и его позиция слева задаётся относительно позиции предыдущего Label.

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

CreatoR

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

Код:
$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
Репутация
408
Есть ещё такой вариант :smile:

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


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

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