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