FreeBasic
Главная
Вход
Регистрация
Вторник, 15.10.2024, 16:38Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Обновление библиотеки window9
haavДата: Понедельник, 08.02.2021, 13:45 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Привет всем!

Очередное обновление библиотеки. В этот раз обновление коснулось в основном Windows версии, хотя на Linux тоже исправлено пару ошибок.

Что сделано :

1) Поддержка UNICODE для WINDOWS версии библиотеки
2) Исправление ошибок и недочетов , в том числе в справке

Пояснение

Можно использовать любую версию ASCII или UNICODE. В заголовке под Windows присутствует дополнительный файл extwstring.bi , в котором реализована динамическая строка UNICODE. Он необходим для UNICODE версии.

В библиотеке появился новый тип USTRING, который по сути:

в ASCII версии является обычным типом STRING
в UNICODE версии является типом extWstring

Использование во всех функциях (за очень редким исключением) одинаково. Справку обновлял только для тех немногих функций , где есть различие.

Для использования UNICODE:

1) библиотека должна быть скомпилирована правильно. Для этого перед компиляцией библиотеки в файле window9.bi нужно раскомментировать строку #Define UNICODE
2) использовать тип USTRING.

Для использования ASCII:

1) библиотека должна быть скомпилирована правильно. Для этого перед компиляцией библиотеки в файле window9.bi нужно закомментировать строку #Define UNICODE
2) использовать тип STRING или USTRING (что одно и тоже для ASCII версии).

В архивах есть скомпилированные библиотеки , для тех кому лень самому делать компиляцию

Про USTRING (aka extWstring) с примерами:

Я уже писал , что с использованием библиотечных функций по сути ничего не поменялось , разве только надо изменить название типа на USTRING. Однако надо пояснить использование USTRING и в том числе в WINAPI функциях.

USTRING под UNICODE является расширением WSTRING.

Объявление происходит как и с типом STRING:

Код
Dim wsText As USTRING  ' объявление


Получение указателя и данных:

Код
?  wsText ' просто обычное использование как и в случае STRING

? *wsText ' указатель на UNICODE строку , по сути WSTRING PTR

? **wsText ' разыменовывание , по сути тип WSTRING


Все строковые функции и операторы работают с USTRING так же как с STRING.

Пример:

Код
Dim wsText As USTRING  ' объявление

Dim wsText2 As USTRING = "ТЕКСТ" ' объявление и сразу присваивание текста

wsText = wsText2 ' обычное присваивание одной строки другой . Можно так же проделывать с обычным STRING , WSTRING , с числами

wsText &= wsText2 ' конкатенация строк . Можно так же проделывать с обычным STRING , WSTRING , с числами

wsText = "ТЕКСТ" & wsText2 & 100 ' конкатенация строк . Можно так же проделывать с обычным STRING , WSTRING , с числами

? len(wsText)

? Instr(wsText, "ТЕКСТ")


А это пример с функцией библиотеки:

Код
#Include "window9.bi"
Dim wsText As USTRING = "Это кнопка"
MessBox("Сообщение",wsText)


А это пример с WINAPI:


Код
#Include "window9.bi"
Dim wsText As USTRING = "Это кнопка"
MessageBox(0, "Сообщение" , *wsText , 0)

Разницу надеюсь уловили.  Да , просто в WINAPI отправляем указатель на WSTRING PTR. В очень редких случаях требуется чистая WSTRING , в таком случае добавляем звездочку **wsText.

Вот собственно и все. Скачать можно как и всегда здесь: https://sourceforge.net/projects/guiwindow9/files/


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Понедельник, 08.02.2021, 15:30 | Сообщение # 2
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
В коде:
>Declare Operator Cast() ByRef As Const wString

Значит можно использовать прямо, без звёздочки:
>MessageBox(0, "Сообщение" , wsText , 0)

Ещё нужно как‐то донести до ширмасс, что кодировка строковых литералов зависит от кодировки исходного кода, а то так и будут сидеть в 1251 или вообще 866, в то время как везде уже 65001.
 
haavДата: Понедельник, 08.02.2021, 16:06 | Сообщение # 3
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата zamabuvaraeu ()
Значит можно использовать прямо, без звёздочки:

Нет так нельзя с WINAPI , по крайней мере в моей реализации.

Цитата zamabuvaraeu ()
Ещё нужно как‐то донести до ширмасс, что кодировка строковых литералов зависит от кодировки исходного кода, а то так и будут сидеть в 1251 или вообще 866, в то время как везде уже 65001.


Уточняю: для UNICODE в Windows надо сохранять в UTF-16LE , если конечно же нужны международные символы. Если же обходимся латинскими и кириллицей , то можно сохранять и в ASCII.  Не советую сохранять в UTF-8  , а то будут крякозябры. Хотя в реализации есть активные свойства (property UTF8) для того , чтобы в extWstring отправлять\получать строку в UTF8.  При любых операциях extWstring с обычной строкой типа STRING происходит автоматическое преобразование ее в UNICODE и обратно.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
zamabuvaraeuДата: Понедельник, 08.02.2021, 19:52 | Сообщение # 4
Подполковник
Группа: Друзья
Сообщений: 149
Репутация: 5
Статус: Offline
>Не советую сохранять в UTF-8 
Почему же? Если исходник будет в UTF-8 со спецификацией (BOM), то компилятор переведёт все литералы в юникод, также как и c UTF-16LE и UTF-16BE.
 
haavДата: Понедельник, 08.02.2021, 20:46 | Сообщение # 5
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Репутация: 49
Статус: Offline
Цитата zamabuvaraeu ()
Почему же? Если исходник будет в UTF-8 со спецификацией (BOM), то компилятор переведёт все литералы в юникод, также как и c UTF-16LE и UTF-16BE.

Да , ты прав.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
  • Страница 1 из 1
  • 1
Поиск: