Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Array of char to memo


Автор: Гость_Вячеслав 11.10.2005, 09:52
Код

var buf [1..32000] : array of char;


Подскажите как Buf засунуть в Memo
пробовал так :

Код

var i1:integer
for i1:=1 to 32000 do memo.text:=memo.text+buf[i1];

этот код не работает - компьютер зависает.

И еще допустим что в мемо 12000 символов
как их занести обратно в buf.

Заранее спасибо.

Автор: Вася К. 11.10.2005, 10:13
Ну, грубо говоря, так:

Memo1.Text := buf.

А зависает у тебя потому что слишком долго протекает процесс for i1:=1 to 32000 do memo.text:=memo.text+buf[i1];

А вот обратно в buf:

var str: string;
....
str := Memo1.Text;
CopyMem(@buf[1], @str[1], Length(str) - 1)

Вот и все smile

Автор: ~FoX~ 11.10.2005, 10:21
Она не зависает, просто долго выполняется


Код

var i1:integer
begin
  for i1:=1 to 32000 do begin
    Application.ProcessMessages;
    Memo1.Lines.Text := Memo1.Lines.Text + buf[i1];
  end;
end;



Добавлено @ 10:22
Опять не опаздал smile

Автор: Гость_Вячеслав 11.10.2005, 11:06
Не получается обратное преобразование



var str: string;
....
str := Memo1.Text;
CopyMem(@buf[1], @str[1], Length(str) - 1)


А можно без перехода к строке?(в Memo может быть конец строки)

Автор: Rrader 11.10.2005, 11:27
Вставка содержимого массива м Memo:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Buf: Array[1..32000] Of Char;
  I :Integer;
begin
  FillChar(Buf, 32000, 0);
  For I := Low(Buf) To 1000 Do
    Buf[I] := #50 ;
  Memo1.Text := StrPas(@Buf);
end;

Цитата
Не получается обратное преобразование

Код

procedure TForm1.Button1Click(Sender: TObject);
type
  TCharArray = Array[1..32000] Of Char;
var
  Buf: TCharArray;
  S: String;
begin
  FillChar(Buf, 32000, 0);
  S := Memo1.Text;
  StrPCopy(@Buf, S);
  Memo2.Text := StrPas(@Buf); // Эта строка для теста
end;

Или:
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  Buf: Array[1..32000] Of Char;
  S: String;
begin
  FillChar(Buf, 32000, 0);
  S := Memo1.Text;
  StrPCopy(@Buf, S);
  Memo2.Text := StrPas(@Buf);
end;

Автор: Quadr0 13.10.2005, 14:46
...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)