Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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 и функции нужен pansichar


var
 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.20513

var
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
15-1246973837
Пит
2009-07-07 17:37
2009.09.06
CallStack vs обработчики событий


1-1214219828
Alik
2008-06-23 15:17
2009.09.06
Выделение контура региона


2-1246969997
Zheksonz
2009-07-07 16:33
2009.09.06
Отклик от COM порта


15-1246617399
vajo
2009-07-03 14:36
2009.09.06
Как правильно написать заявление на увольнение?


1-1213532081
Student
2008-06-15 16:14
2009.09.06
Свободная память + TStringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский