Для чтения файла будем использовать TMemoryStream, а затем используем метод SetSelTextBuf() из TMemo, чтобы вставить в него текст:
Code: |
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; |
Как мне импортировать файл в элемент управления TMemo начиная с позиции курсора? LoadFromFile заменяет содержимое TMemo содержимым текстового файла. Я хочу включить текстовый файл или в поцизию курсора или, если выбран текст, заменить этот текст содержимым текстового файла. Все это должно быть похоже на работу фунции PasteFromClipboard.
Самый простой путь вставки текста в компонент Memo заключается в посылке ему сообщения EM_REPLACESEL.
Code: |
{ 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;
|
Code: |
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; |
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!