![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по AnsiChar [D7, WinXP]
smirnoff © (2009-07-06 11:53:00)Здравствуйте! подскажите пожалуйста как в
a: array[0..2000] of ansichar;
записать содержимое Memo (Delphi 2009). Заранее спасибо!
smirnoff (2009-07-07 12:05:00) [1]
> > > ошибки нет. но в массиве "а" виден только первый символ
> > Извини, но ты уже вышел из круга доверия.
Не обвиняйте меня жестокой топусти, я знаю что (напр.) ShowMessage и Memo будут отображать всё, пока не встретят 1-й ноль (не в кавычках - т.е. #0).
smirnoff (2009-07-07 11:58:00) [2]!!!Delphi 12.0.3390.20513
a: array[0..70] of ansichar; //массив, который необходимо заполнить.
В Memo1 находится такой текст: "1234abcdабвг:{}230(&^&*(kdfg"
---------------------------------------------------------------------------------------
Memo1.Perform(WM_GETTEXT, SizeOf(a), LParam(@a));
дает следующее:
'1', #0, '2', #0, '3', #0, '4', #0, 'a', #0, 'b', #0, 'c', #0, 'd', #0, '0', #4, '1', #4,
'2', #4, '3', #4, ':', #0, '{', #0, '}', #0, '2', #0, '3', #0, '0', #0, '(', #0, '&', #0,
'^', #0, '&', #0, '*', #0, '(', #0, 'k', #0, 'd'
---------------------------------------------------------------------------------------
StrCopy(a,pansichar(Memo1.Text));
дает следующее:
'1', #0, 'v', #20, #21, #1, #14, 'Ђ', #152, 'й', #1, #0, #0, #0, #0, #0, #0, #0, #0, #4,
#0, #0, #0, #0, #0, #0, #0, #1, #0, #0, #0, 'l', 'a', 't', 'n', '§', '
Юрий Зотов (2009-07-06 23:57:00) [3]Кстати, [14] тоже подтверждает п.3 - Вы просто не умеете правильно интерпретировать содержимое памяти.
Юрий Зотов (2009-07-06 23:56:00) [4]> smirnoff
Если [6] заработало (о чем Вы сказали в [7]), то никакого юникода у Вас на самом деле нет, а есть просто AnsiStrinng - то есть, массив однобайтовых символов. Далее:
1. Копирование одного массива в другой - задачка для детского сада. Но Вы на ней споткнулись.
2. Как выяснилось, копирование Вам понадобилось лишь для того, чтобы вызвать некую функцию с параметром PAnsiChar. Но для этого копировать вообще ничего не нужно - чего Вы тоже не знали.
3. В [9] Вы утверждаете, что "в массиве "а" виден только первый символ из содержимого". Это говорит о том, что Вы просто не умеете правильно интерпретировать содержимое памяти.
===========
И после всего этого Вы говорите о каких-то подводных камнях и о том, что Ваш вопрос не для "начинающих"? Не смешите.
smirnoff (2009-07-06 22:49:00) [5]
> > ошибки нет. но в массиве "а" виден только первый символ
> Извини, но ты уже вышел из круга доверия.
понял что результат юникода.
ну да вообщето там есть всё остальное. НО с НАРУШЕННОЙ кодировкой. русские символы НЕ отображаются как надо.
Leonid Troyanovsky (2009-07-06 22:27:00) [6]
> smirnoff © (06.07.09 19:44) [9]
> ошибки нет. но в массиве "а" виден только первый символ
Извини, но ты уже вышел из круга доверия.
--
Regards, LVT.
smirnoff (2009-07-06 22:16:00) [7]
> заработало! СПА-СИ-БО!!!вот теперь это сношу:
Уважаемые мастера. Имейте ввиду, что на поставленный вопрос никто не ответил правильно. был предложен альтернативный вариант отличный по функциональности.. он мне подошел. НО НА ВОПРОС НИКТО ТАК И НЕ ОТВЕТИЛ - продемонстрируйте же свои знания работы со строками, Юрий Зотов.
способы типа:
a: array[0..2000] of ansichar;
begin
for i := 1 to length(memo1.Lines.Text) do
a[i - 1] := ansichar(memo1.Lines.Text[i]);
или
a: array[0..2000] of ansichar;
begin
StrCopy(a,pansichar(Memo1.Text));
неуместны (для delphi 2009). почему? догадаетесь.
> подводный камень
- связан с кодировкой. русские символы теряются в указанных выше способах (только в d2009).
> - там ему и место
Да всё так. Спасибо, что все поставили на свои места. Еще только сайт остается назвать delphifighter.ru
Юрий Зотов (2009-07-06 21:20:00) [8]> думаю мой вопрос не совсем для начинающих (а то его переместили)..
Он не для начинающих. Он для даже еще не начавших. Извините, но это так.
> в нем закопан подводный камень..
И называется этот подводный камень - неумение работать со строками. Извините, но это тоже так.
Сергей М. (2009-07-06 19:55:00) [9]
> потомучто с массивом придется работать
А AnsiString, надо так понимать, для беззаботно отдыхающих и праздно дзенствующих ?
> думаю мой вопрос не совсем для начинающих
Судя даже по формулировке - там ему и место.
smirnoff (2009-07-06 19:44:00) [10]
> Leonid Troyanovsky ©
> Не верю.
Memo1.Perform(WM_GETTEXT, SizeOf(a), LParam(@a));
ошибки нет. но в массиве "а" виден только первый символ из содержимого.
Delphi 12.0.3390.20513
var
a: array[0..2000] of ansichar;
begin
Memo1.Perform(WM_GETTEXT, SizeOf(a), LParam(@a));
ShowMessage(a);
end;
по ShowMessage видим только 1й символ из Memo.
Leonid Troyanovsky (2009-07-06 15:54:00) [11]
> smirnoff © (06.07.09 15:18) [5]
> Увы
> Memo1.Perform(WM_GETTEXT, SizeOf(a), LParam(@a))
> не работает в delphi2009.
Не верю.
--
Regards, LVT.
smirnoff (2009-07-06 15:45:00) [12]
> > работает только с pansichar и функции нужен pansichar var
> s : AnsiString;begin s := 'Превед, Медвед!'; SomeFunction(PAnsiChar(s));
> end;
заработало! СПА-СИ-БО!!!
вот теперь это сношу:
a: array[0..2000] of ansichar;
Ega23 (2009-07-06 15:29:00) [13]
> работает только с pansichar и функции нужен pansichar
var
s : AnsiString;
begin
s := 'Превед, Медвед!';
SomeFunction(PAnsiChar(s));
end;
smirnoff (2009-07-06 15:18:00) [14]думаю мой вопрос не совсем для начинающих (а то его переместили).. в нем закопан подводный камень..
> Почему именно в массив, а не в AnsiString ?
потомучто с массивом придется работать. AnsiString не подходит уже пробовал. т.к. на массив ссылается b: pansichar;
b := @a;
а он в свою очередь передается как параметр для функции. (pansichar менять нельзя, всяко пробовал в d2009 глючить начинает. работает только с pansichar и функции нужен pansichar);
> главное: зачем? не с со stream или файлами пытаешься работать?
с файлами не работаю.
Увы
Memo1.Perform(WM_GETTEXT, SizeOf(a), LParam(@a))
не работает в delphi2009.
Leonid Troyanovsky (2009-07-06 13:10:00) [15]
> smirnoff © (06.07.09 11:53)
> a: array[0..2000] of ansichar;
> записать содержимое Memo (Delphi 2009).
Memo.Perform(WM_GETTEXT, SizeOf(a), LParam(@a))
--
Regards, LVT.
Ega23 (2009-07-06 12:39:00) [16]Да ладно, нормальный вариант работы: один раз буфер выделил и работай с ним.
brother (2009-07-06 12:27:00) [17]главное: зачем? не с со stream или файлами пытаешься работать?
Сергей М. (2009-07-06 12:26:00) [18]Почему именно в массив, а не в AnsiString ?