Обновление библиотеки window9
|
|
haav | Дата: Понедельник, 08.02.2021, 13:45 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: 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
Статус: Offline
| В коде: >Declare Operator Cast() ByRef As Const wString
Значит можно использовать прямо, без звёздочки: >MessageBox(0, "Сообщение" , wsText , 0)
Ещё нужно как‐то донести до ширмасс, что кодировка строковых литералов зависит от кодировки исходного кода, а то так и будут сидеть в 1251 или вообще 866, в то время как везде уже 65001.
|
|
| |
haav | Дата: Понедельник, 08.02.2021, 16:06 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: 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
Статус: Offline
| >Не советую сохранять в UTF-8 Почему же? Если исходник будет в UTF-8 со спецификацией (BOM), то компилятор переведёт все литералы в юникод, также как и c UTF-16LE и UTF-16BE.
|
|
| |
haav | Дата: Понедельник, 08.02.2021, 20:46 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Цитата zamabuvaraeu ( ) Почему же? Если исходник будет в UTF-8 со спецификацией (BOM), то компилятор переведёт все литералы в юникод, также как и c UTF-16LE и UTF-16BE. Да , ты прав.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |