Sources
Delphi Russian Knowledge Base
DRKB - это самая большая и удобная в использовании база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как вставить содержимое файла в текущую позицию TMemo?

01.01.2007

Для чтения файла будем использовать TMemoryStream, а затем используем метод SetSelTextBuf() из TMemo, чтобы вставить в него текст:

var
  TheMStream : TMemoryStream;
  Zero : char;
begin
  TheMStream := TMemoryStream.Create;
  TheMStream.LoadFromFile('C:\AUTOEXEC.BAT');
  TheMStream.Seek(0, soFromEnd);
//Буфер завершается нулём!
  Zero := #0;
  TheMStream.Write(Zero, 1);
  TheMStream.Seek(0, soFromBeginning);
  Memo1.SetSelTextBuf(TheMStream.Memory);
  TheMStream.Free;
end;

Взято из https://forum.sources.ru


Как мне импортировать файл в элемент управления TMemo начиная с позиции курсора? LoadFromFile заменяет содержимое TMemo содержимым текстового файла. Я хочу включить текстовый файл или в поцизию курсора или, если выбран текст, заменить этот текст содержимым текстового файла. Все это должно быть похоже на работу фунции PasteFromClipboard.

Самый простой путь вставки текста в компонент Memo заключается в посылке ему сообщения EM_REPLACESEL.

{ InsertFileInMemo--
 
ПРИМЕЧАНИЕ: если вы хотите заменить к настоящему времени
выбранный в Memo текст, передайте в параметре ReplaceSel
TRUE. FALSE необходим для простой вставки текста... }
 
procedure InsertFileInMemo(Memo: TMemo; FileName: string;
  ReplaceSel: Boolean);
var
  Stream: TMemoryStream;
  NullTerminator: Char;
begin
  Stream := TMemoryStream.Create;
  try
    { Загружаем текст... }
    Stream.LoadFromFile(FileName);
 
    { Добавляем в конец текста терминирующий ноль... }
    Stream.Seek(0, 2);
    NullTerminator := #0;
    Stream.Write(NullTerminator, 1);
 
    { Вставляем текст в Memo... }
    if not ReplaceSel then
      Memo.SelLength := 0;
    SendMessage(Memo.Handle, EM_ReplaceSel, 0,
      LongInt(Stream.Memory));
  finally
    Stream.Free;
  end;
end;
 
 
https://delphiworld.narod.ru/

DelphiWorld 6.0


procedure TForm1.Button1Click(Sender: TObject);
 var
   sl: TStringList;
 begin
   sl := TStringList.Create;
   try
     sl.LoadFromFile('c:\afile.txt');
     Memo1.SetSelTextBuf(PChar(sl.Text));
   finally
     sl.Free;
   end;
 end;

Взято с сайта: https://www.swissdelphicenter.ch