Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Можно ли в лейбле выводить разноцветный текст? (http://forum.oszone.net/showthread.php?t=151556)

evg64 26-09-2009 19:26 1228089

Можно ли в лейбле выводить разноцветный текст?
 
Можно ли в лейбле выводить разноцветный текст?

Creat0R 26-09-2009 19:46 1228099

Можно.

evg64 26-09-2009 21:00 1228166

А как? Можно пример? Или где почитать про это можно?

Medic84 26-09-2009 21:11 1228179

GUICtrlSetColor
GUICtrlSetBkColor


Эти 2 функции тебе помогут :happy:

evg64 26-09-2009 21:16 1228185

Нет, я имею в виду, как можно сделать буквы в лэйбле разного цвета? К примеру, половина красные, половина зеленые.

Medic84 26-09-2009 21:45 1228207

Вот так и надо сразу задачу ставить!
Насколько я знаю, думаю что нельзя.

Creat0R 27-09-2009 00:41 1228343

Цитата:

Цитата Medic84
Насколько я знаю, думаю что нельзя. »

Я же не просто так написал что можно: _GUICtrlCreateTFLabel - Создание форматированного элемента Label

Creat0R 27-09-2009 01:01 1228360

Цитата:

Цитата evg64
я имею в виду »

Вот нужно писать то что имеется в виду в первом сообщении, а не после того как спрашивают. Я конечно понял о чём речь с полуслова, т.к близко с этим связан, я давно и сам искал решение этой проблеме, и в результате пришлось самому написать решение :)

evg64 27-09-2009 09:39 1228457

Спасибо! Клево! Буду решать свою задачу! :)


Цитата:

Цитата Medic84
Вот так и надо сразу задачу ставить! »

Цитата:

Цитата Creat0R
Вот нужно писать то что имеется в виду в первом сообщении »

В первом сообщении я употребил слово "разноцветный" - оно само по себе подразумевает, что текст должен быть разных цветов.

evg64 13-10-2009 00:26 1241401

Вложений: 1
Цитата:

Цитата Creat0R
_GUICtrlCreateTFLabel - Создание форматированного элемента Label »

Я попробовал в качестве аргумента для данной UDF указать строку, содержащую китайские иероглифы. Цвета отобразились верно, однако иероглифы как бы накладываются друг на друга (в качестве иллюстрации я прикрепил файл). Создается впечатление, будто на каждый символ выделяется фиксированное количество пикселей по ширине и этого количества иероглифам нехватает. Я пробовал найти в UDF параметр, который отвечал бы за ширину, выделяемую для каждого символа, но это не получилось. Также пробовал менять там шрифт с Arial на SimSun (самый распространенный шрифт для китайск языка) - пользы не принесло. Подкажите, пожалуйста, как сделать так, чтобы иероглифы отображались по всей ширине?

Creat0R 13-10-2009 00:33 1241406

Цитата:

Цитата evg64
как сделать так, чтобы иероглифы отображались по всей ширине? »

Без примера ничем не могу помочь.

evg64 13-10-2009 07:55 1241491

В примере первые 2 лейла выводят цветные иероглифы, а вторые 2 - те же иероглифы, но функцией GUICtrlCreateLabel.
Код:

Opt ( "TrayIconDebug",1)
Opt ("WinTitleMatchMode",2)


#include <GUIConstants.au3>
#include <StaticConstants.au3>
#include <GUICtrlCreateTFLabel.au3>


$hGUI = GUICreate("_GUICtrlCreateTFLabel Example #1", 633, 447, 192, 124)

$sLabel1_Data = '<font color="red" weight="800">否</font>'

$sLabel2_Data = '<font color="red" weight="800">如</font><font color="green" weight="800">下</font>'

$sLabel3_Data = "否"

$sLabel4_Data = "如下"


_GUICtrlCreateTFLabel($sLabel1_Data, 192, 80, 228, 25)
_GUICtrlCreateTFLabel($sLabel2_Data, 192, 120, 228, 25)
GUICtrlCreateLabel($sLabel3_Data, 192, 160, 228, 25); этот
GUICtrlCreateLabel($sLabel4_Data, 192, 200, 228, 25); и этот лэйбл показывают, как иероглифы выглядят в полную ширину


GUISetState(@SW_SHOW, $hGUI)

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

P.S. Этот файл я создавал в блокноте (Scite не видит иероглифов) и сохранял в юникоде.

Creat0R 13-10-2009 15:40 1241830

Цитата:

Цитата evg64
Этот файл я создавал в блокноте (Scite не видит иероглифов) и сохранял в юникоде. »

Выложите лучше этот скрипт, у меня никк не распознаёт эту кодировку.

evg64 13-10-2009 19:05 1241992

Вложений: 2
Вы имели в виду в скомпилированном виде? Ок. На всякий случай кину и сам текстовый файл.

Creat0R 13-10-2009 19:45 1242024

Цитата:

Цитата evg64
Вы имели в виду в скомпилированном виде? »

Не совсем.. ладно, вот что у меня выдаёт скрипт:



Т.ч разобраться в проблеме будет сложновато :)

evg64 13-10-2009 19:52 1242029

Вложений: 1
)) Могу выложить принтскрин с компа. Как бы там ни было, скорее всего нужно что-то менять в UDF, потому что поменяй я иероглифы на буквы - все будет ок.

P.S. Дело определенно в UDF, потому что написав строку _GUICtrlCreateTFLabel($Label2Text, 70, 152, 260, 41), где $Label2Text - строка иероглифов без тегов, все вывелось в полную ширину, как и положено.

Creat0R 14-10-2009 01:19 1242291

Цитата:

Цитата evg64
Также пробовал менять там шрифт с Arial на SimSun (самый распространенный шрифт для китайск языка) - пользы не принесло. »

Где именно меняли? в цикле for переменная $sFont_Name = "Arial"?

И ещё, попробуйте заменить в «$DEFAULT_CHARSET = 0» на 1.

Creat0R 14-10-2009 01:52 1242307

Цитата:

Цитата Creat0R
пробовал менять там шрифт с Arial на SimSun »

А если так:

Код:

$sLabel1_Data = '<font name="SimSun" color="red" weight="800">否</font>'

evg64 14-10-2009 08:27 1242359

Цитата:

Где именно меняли? в цикле for переменная $sFont_Name = "Arial"?
Да.

Цитата:

И ещё, попробуйте заменить в «$DEFAULT_CHARSET = 0» на 1.
Попробовал, проблема осталась.

Цитата:

$sLabel1_Data = '<font name="SimSun" color="red" weight="800">否</font>'
Тоже попробовал - не помогает, какая-то упертая ошибка )

Проблема скорее всего в функции __GUICtrlLabelGetTextWidth, но не понимая ничего в dll функциях, я не могу там разобраться(
Нашел один обходной путь: сначала создать лэйбл с оч обльшим шрифтом, которому выделится много ширины, а потом поменять там все лейблы на маленький шрифт. Лэйблы получаются высокими, но это не беда для конкретно моего случая.

Creat0R 15-10-2009 06:05 1243380

Цитата:

Цитата evg64
Проблема скорее всего в функции __GUICtrlLabelGetTextWidth »

Да. И там где она используется, можно попробовать добавить пару единиц:

Код:

$aData_Width = __GUICtrlLabelGetTextWidth($sIn_Data, $iFont_Size, $iFont_Weight, $sFont_Name)
$aData_Width[0] += 5


evg64 15-10-2009 21:28 1244088

Спасибо! Теперь все нормально. В том месте, на которое вы указали, сделал так:
Код:

$aData_Width = __GUICtrlLabelGetTextWidth($sIn_Data, $iFont_Size, $iFont_Weight, $sFont_Name)
if Chr( Asc($sIn_Data))<> $sIn_Data then $aData_Width[0] += $iFont_Size*0.55



Время: 19:40.

Время: 19:40.
© OSzone.net 2001-