Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.09.06;
Скачать: CL | DM;

Вниз

Вопрос по 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
15-1247137679
Пит
2009-07-09 15:07
2009.09.06
Определение названия модуля по указателю


2-1246969271
Алексей111
2009-07-07 16:21
2009.09.06
Table is read only


15-1246060493
Клаус
2009-06-27 03:54
2009.09.06
помогите найти книгу


2-1246968716
cyber-pilot
2009-07-07 16:11
2009.09.06
Формат даты


2-1247060009
tomkat
2009-07-08 17:33
2009.09.06
компоненты в консольном приложении