Как загнать непечатные символы в КОНСТАНТУ String?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
0xy
Бывалый
Бывалый
 
Сообщения: 223
Зарегистрирован: 14.06.2006 (Ср) 2:34

Как загнать непечатные символы в КОНСТАНТУ String?

Сообщение 0xy » 03.02.2008 (Вс) 1:34

Константа описана на уровне модуля, и содержит "Энтер" (0D, 0A)

Собственно, проблема в этом:
Справка писал(а):Не допускается использование переменных, определяемых пользователем функций или внутренних функций языка Visual Basic (типа Chr) в выражениях, присваиваемых константам.


Есть ли окольные пути?

[Добавлено позднее]
На сей раз мне хватило этого:
Справка писал(а):Следующие константы определены в библиотеке типов Visual Basic для приложений и могут использоваться в любом месте программы вместо их значений:

Константа Эквивалент Описание
vbCrLf Chr(13) + Chr(10) Комбинация символов возврата каретки и перевода строки.
vbCr Chr(13) Символ возврата каретки.
vbLf Chr(10) Символ перевода строки.
vbNullChar Chr(0) Символ с кодом 0.
vbNullString Строка с кодом 0 Не совпадает с пустой строкой (""); используется для вызова внешних процедур.
vbTab Chr(9) Символ табуляции.
vbBack Chr(8 ) Символ Backspace.
vbFormFeed Chr(12) Не используется в Microsoft Windows.
vbVerticalTab Chr(11) Не используется в Microsoft Windows.


Но мне по прежднему интересно,
:?: как вогнать в константу произвольный непечатный символ?

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 03.02.2008 (Вс) 23:25

А что, если написать в другом языке библиотеку типов, в которой будут описаны в виде констант следующие непечатные значения, а затем подключить к проекту эту библиотеку; это приемлимое решение? И возможно ли это в других языках?
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

zHackLeX
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 283
Зарегистрирован: 23.10.2003 (Чт) 21:08

Сообщение zHackLeX » 04.02.2008 (Пн) 2:41

CopyMemory в строку из байта, или это уже не тру? :roll:
There is no knowledge that is not power...

X,C,A,B,C,Z,X,A,B,C,Z....
Многие ли помнят? :)

iGrok
Артефакт VBStreets
Артефакт VBStreets
 
Сообщения: 4272
Зарегистрирован: 10.05.2007 (Чт) 16:11
Откуда: Сетевое сознание

Сообщение iGrok » 04.02.2008 (Пн) 11:18

Окольный путь - не константа, а переменная.
И при старте проги пихать в эту переменную то, что надо.
label:
cli
jmp label

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 04.02.2008 (Пн) 21:57

Как загнать непечатный символ в константу?
Очень просто -- этот символ нужно... напечатать!

Вызываем дебагер, пишем в нём ?chr(1) и бъём энтер.

Полученный квадратик и объявляем в качестве константы. Всё.

С непечатными словами можно поступить точно так же. :D
Вложения
mm.zip
Объявления констант со всеми непечатными символами.
(733 байт) Скачиваний: 101

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Сообщение Денис » 04.02.2008 (Пн) 22:41

arthur2
Браво! Гениальное и простое решение. Я уж было хотел посоветовать заполнить значения в HEX редакторе, но это более простое решение, и модуль уже написан Вами к тоу же.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 05.02.2008 (Вт) 10:14

Кстати, очень хорошо, что появился такой вопрос. Мне это и самому нужно было, но я пользовался обходным путём -- объявлял переменную.

А тут -- под такое дело -- раскинул мозгами 8)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 05.02.2008 (Вт) 10:27

Только таким способом не все значения можно использовать. Chr$(10) не сможешь.
Lasciate ogni speranza, voi ch'entrate.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 05.02.2008 (Вт) 11:14

Для тех, кто в танке: chr(10)=vbLf

Ну или

Public Const chr0 = vbNullChar
Public Const chr9 = vbTab
Public Const chr10 = vbLf
Public Const chr13 = vbCr

Для всех остальных знаков работает замечательно.


Кстати, есть оказывается и ещё два непечатных знака (chr(127) -- контрл+бекспейс, на сколько я знаю, и chr(152) -- не знаю что это). И ещё куча малопечатных (• и прочие ђ), так что выкладываю улучшеный модуль. :wink:
Вложения
AllChr.zip
Объявления констант всех 255 знаков
(1.09 Кб) Скачиваний: 108


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: The trick и гости: 35

    TopList  
cron