|
#1
|
|||
|
|||
Работа с WideChar
В TEdit через буфер обмена попадает строка, которая может содержать спецсимволы. Мне надо при выходе из эдита найти эти символы и заменить их другими, обычными. Раньше я делал это в VBA, все было достаточно просто. Здесь (в Delphi 7) все мои попытки наталкиваются на то, что передаваемые в параметры спецсимволы (a и b) показываются как пустые и не обрабатываются. При наличии хоть одного спецсимвола вся строка становится пустой .
Код:
function substitute(s:WideString; a,b: WideChar): WideString; var found: boolean; i: integer; c: WideString; begin found:=true; while found do begin found:=false; for i:=1 to Length(s) do begin c:=copy(s,i,1); if c=a then begin found:=true; s:=copy(s,1,i-1)+b+copy(s,i+1,1000); end; end; end; Result:=s; end; procedure TForm1.Edit1Exit(Sender: TObject); var s: WideString; begin AlignEditTRA.Color:=cl3DLight; s:= Edit1.Text; s := substitute(s, WideChar(884), WideChar('''')); s := substitute(s, WideChar(305), WideChar('I'); ... Edit1.Text:=s; end; PS. Что такое гугль я знаю, и он уже в течение 2 часов закипает от моих запросов. Если пишу сюда - значит ответа не нашел. PPS. Под "спецсимволами" я имею в виду символы, код которых больше 255. |
#2
|
||||
|
||||
Какая версия Дельфи?
Как это код мог откомпилироваться? В строке 28 не хватает закрывающей скобки. Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. Последний раз редактировалось angvelem, 26.10.2012 в 04:53. |
#3
|
|||
|
|||
Как-то странно работает форум... Я нажал "Правка", чтобы подкорректировать топик - создалась новая тема. Просьба к модераторам удалить эту. Я не хотел флудить...
|
#4
|
|||
|
|||
Цитата:
Я действительно добавил вторую строку сюда прежде чем раскомментить ее в основном коде; там скобку добавил, здесь нет . Извините. Пожалуйста, посмотрите мое второе созданное случайно сообщение. http://www.delphisources.ru/forum/sh...ad.php?t=22428 |
#5
|
||||
|
||||
Ошибочного топика уже нет (случай он создаться не мог). Подкинь примерную строку для Edit-а.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
Этот пользователь сказал Спасибо angvelem за это полезное сообщение: | ||
alexingor (26.10.2012)
|
#6
|
|||
|
|||
Цитата:
Цитата:
Тут проблема другая - надо создать свой класс, наследник TAlignEdit, в котором свойство Text имело бы тип WideString. Я сам никогда такого еще не делал, но надеюсь, что тут дядя Гугль поможет. Спасибо, Angvelem, за участие. |
#7
|
||||
|
||||
Цитата:
Установи себе компоненты TNT и используй TTntEdit вместо TEdit. Последнюю бесплатную версию компонент TNT можно скачать >>отсюда<<. Цитата:
Вот так попроще будет: Код:
function substitute(const s: WideString; a, b: WideChar): WideString; var i: Integer; begin Result := s; for i := 1 to Length(Result) do if Result[i] = a then Result[i] := b; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
alexingor (26.10.2012)
|
#8
|
|||
|
|||
Цитата:
Цитата:
|