Работа с юникодовой строкой в типизированном файле, как правильно считывать и записывать |
Добро пожаловать, гость ( Вход | Регистрация )
Работа с юникодовой строкой в типизированном файле, как правильно считывать и записывать |
Siberian GRemlin |
Jul 5 2006, 06:46
Сообщение
#1
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Сталкнулся с одной проблемкой. Есть типизированный файл, в котором помимо всего прочего хранятся строчки в юникоде. Как с такими работать я не знаю, пока сделал изврат полнейший:
CODE for j:=1 to Header.NameArr[i].StringLenght do begin Mstr.ReadBuffer(c,1); Mstr.ReadBuffer(x,1); if x=4 then begin if c=01 then begin c:=$A8; Header.StringsArr[i][j]:=chr(c); end else if c=$51 then begin c:=$B8; Header.StringsArr[i][j]:=chr(c); end else Header.StringsArr[i][j]:=chr(c+$B0); end else Header.StringsArr[i][j]:=chr(c); end; StringGrid1.Cols[1].Strings[i]:=Header.StringsArr[i]; Тут у меня обрабатываются только латиница и кириллица, а юникод понятно дело только им не ограничивается. Если с первого взгляда непонятно, то поясняю, два байта на один символ, если первый четвёрка, то это кириллица, иначе работаем как с латиницей. В кириллице там еще два случая, с 'Ё' и 'ё'. Может, кто подскажет как правильно считать строку в string (естественно, который расширенный, не стандартный ANSII) за один присест. Насколько мне известно, это реально... просто я с этим не сталкивался и ламачёк |
-=CHE@TER=- |
Jul 5 2006, 09:00
Сообщение
#2
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Siberian GRemlin!
Попробуй так: S:=Utf8ToAnsi(S); Сразу должна всё перевести в Win1251. У меня на ANSI+UNICODE файлах от Opera 8.5 сработало. Строчку: C:\Documents and Settings\USERNAME\Рабочий стол Перевела в: C:\Documents and Settings\USERNAME\Рабочий стол P.S. Если не поможет попробуй заюзать перед ней ещё UnicodeToUtf8() |
Siberian GRemlin |
Jul 5 2006, 17:41
Сообщение
#3
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
А правильно считать её как?
|
-=CHE@TER=- |
Jul 6 2006, 14:02
Сообщение
#4
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
А правильно считать её как? Смотря откуда... Я так понимаю, по твоему сообщению, что у тебя "типизированный файл" - это, хотелось бы узнать, файл какого типа? А вообще - создаёшь переменную типа WideString и жахаешь туда весь UNICODE-буфер. И уже с ней работаешь. |
Siberian GRemlin |
Jul 8 2006, 05:17
Сообщение
#5
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Я имел ввиду не стандартного типа, а в котором записи типа record. В файле несколько массивов с переменными, в некоторых хранятся юникодовые строки. Вообщем, ладно, сделал корявыю работу с этими файлами, без учёта таких символов как троеточие и прочих наворотов.
Еще у меня есть одна старая проблема - стили ХР. Компилю прогу я под классическом стилем винды, а запускают её под разными и получается, что высота заголовка окна(полоска) увеличивается и элементы интерфейса уезжают в небытие и я подозреваю, что если бы стоял больший шрифт в настройках винду для заголовка окна, кнопки бы просто пропали. Вот как это выглядит: http://img55.imageshack.us/img55/5808/blue19wi.th.gif А должно выглядеть так: http://img92.imageshack.us/img92/4937/blue39sc.th.gif Как сделать, чтобы интерфейс отображался как положено на любом стиле винды?! Многие же пишут проги на Delphi и у них таких проблем нету. И зачем нужен компонент XPManifest и как им пользоваться, может это и есть то что нужно?! |
-=CHE@TER=- |
Jul 8 2006, 10:10
Сообщение
#6
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Я имел ввиду не стандартного типа, а в котором записи типа record. В файле несколько массивов с переменными, в некоторых хранятся юникодовые строки. Вообщем, ладно, сделал корявыю работу с этими файлами, без учёта таких символов как троеточие и прочих наворотов. Еще у меня есть одна старая проблема - стили ХР. Компилю прогу я под классическом стилем винды, а запускают её под разными и получается, что высота заголовка окна(полоска) увеличивается и элементы интерфейса уезжают в небытие и я подозреваю, что если бы стоял больший шрифт в настройках винду для заголовка окна, кнопки бы просто пропали. Вот как это выглядит: http://img55.imageshack.us/img55/5808/blue19wi.th.gif А должно выглядеть так: http://img92.imageshack.us/img92/4937/blue39sc.th.gif Как сделать, чтобы интерфейс отображался как положено на любом стиле винды?! Многие же пишут проги на Delphi и у них таких проблем нету. И зачем нужен компонент XPManifest и как им пользоваться, может это и есть то что нужно?! XPManifest необходим, чтобы у тебя окна отображались как на скриншоте 1, иначе они будут отображаться как на скриншоте 2 (вид а-ля "классик", без тем). Т.е. если манифест есть - и темы в XP включены, то будет отображаться с темами. Если тем нет, или манифеста в программе нет - то будет выглядеть как в Windows 9x/ME. Если форма сильно разъезжается, то попробуй выставить Scaled = False, в свойствах формы (делается в инспекторе свойств слева). |
Siberian GRemlin |
Jul 8 2006, 11:51
Сообщение
#7
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
1. Прикол в том, что я никогда не пользуюсь манифестом, а стиль меняется.
2. Кидание манифеста на форму, рузельтата не дало - всё осталось как я и описывал 3. При Scaled = False, после компиляции на форме появляются лишнее пустое место снизу и справа |
jTommy |
Jul 8 2006, 12:51
Сообщение
#8
|
Наблюдающий Группа: CTPAX-X Сообщений: 197 Регистрация: 4-February 08 Из: деревня Москва Пользователь №: 6 Спасибо сказали: 19 раз(а) |
Siberian GRemlin:
QUOTE 1. Прикол в том, что я никогда не пользуюсь манифестом, а стиль меняется. При отсутствии манифеста (внутри exe или в каталоге с прогой) меняется только заголовок и еще что-то, а при наличии манифеста изменяются все контролы: например, кнопки и GroupBox'ы станут с закругленными углами. QUOTE получается, что высота заголовка окна(полоска) увеличивается и элементы интерфейса уезжают в небытие У меня тоже была такая проблема в дельфи. Причем при смене темы во время работы программы все нормально. Попробовал поискать в своих программах - не нашел. Если я правильно помню, я в обработчике OnCreate формы запрашивал с помощью WinAPI функции высоту заголовка, вычислял разницу между полученным значением и высотой стандартного заголовка(при котором компилилась программа) и эту разницу (или чуть больше) прибавлял к высоте формы. |
Siberian GRemlin |
Jul 8 2006, 14:26
Сообщение
#9
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Если я правильно помню, я в обработчике OnCreate формы запрашивал с помощью WinAPI функции высоту заголовка, вычислял разницу между полученным значением и высотой стандартного заголовка(при котором компилилась программа) и эту разницу (или чуть больше) прибавлял к высоте формы. Если бы ты вспомнил название этой функции, я был бы очень признателен |
Xplorer |
Jul 8 2006, 14:45
Сообщение
#10
|
Advanced Member Группа: CTPAX-X Сообщений: 52 Регистрация: 4-February 08 Пользователь №: 8 Спасибо сказали: 30 раз(а) |
|
Siberian GRemlin |
Jul 12 2006, 11:35
Сообщение
#11
|
Advanced Member Группа: CTPAX-X Сообщений: 537 Регистрация: 4-February 08 Пользователь №: 2 Спасибо сказали: 221 раз(а) |
Всем спасибо, но либо лыжи не едут, либо я... когда выставляю Scaled = false, то после компиляции у формы получаются лишние отступы...
Кто-нибудь объясните как понять выражение: "pасположение подpавнять по какой-нибудь OwnerDraw-панели" |
-=CHE@TER=- |
Jul 12 2006, 12:45
Сообщение
#12
|
Walter Sullivan Группа: Root Admin Сообщений: 1,361 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 314 раз(а) |
Всем спасибо, но либо лыжи не едут, либо я... когда выставляю Scaled = false, то после компиляции у формы получаются лишние отступы... Когда ты ставишь Scaled = False форма у тебя становится фиксированного размера - т.е. на всех Windows с любыми стилями она будет одинакового размера. Т.к. ты говоришь, что у тебя она нормальная, но после выставления Scaled = False появляются левые поля - следовательно у тебя сейчас стоит какая-то "не стандартная тема" или у тебя оформление винды уехало и сбилось (я такое не один раз наблюдал, в результате чего и стал ставить везде Scaled = False).Кто-нибудь объясните как понять выражение: "pасположение подpавнять по какой-нибудь OwnerDraw-панели" Скорее всего имелось ввиду, по какой-то панели, положение и размер которой не меняется. |
Xplorer |
Jul 13 2006, 08:42
Сообщение
#13
|
Advanced Member Группа: CTPAX-X Сообщений: 52 Регистрация: 4-February 08 Пользователь №: 8 Спасибо сказали: 30 раз(а) |
Вот, держи заначку для редактора строк: http://slil.ru/22919972
|
Упрощённая версия | Сейчас: 30th October 2024 - 19:25 |