Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2017, 08:20   #1
Voldemar__
 
Регистрация: 08.11.2017
Сообщений: 3
По умолчанию TMemo постранично

Подскажите пожалуйста, как сделать загрузку большого текстового файла в TMemo (Windows и Android), чтобы затем можно было листать "постранично"?
Voldemar__ вне форума Ответить с цитированием
Старый 08.11.2017, 09:04   #2
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,814
По умолчанию

подгружать в Memo блоками не катит? скажем, с1 по 50.000 символов, затем с 50.000 по 100.000 и так далее. т.к. у memo есть ограничение по количеству отображаемых символов, насколько я помню.
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 08.11.2017, 11:11   #3
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Лучше использовать TRichEdit. А постраничный вывод - загружать файл в TStringList, из него переносить нужный блок в TRichEdit, кнопками перехода на другую страницу менять номер блока.

Набросал пример, разбирайтесь и настраивайте под свою задачу:

Код:
const
  TXTFileName = '1.txt'; // имя файла с текстом
  LinesOfPage = 30; // кол-во строк на странице

procedure TForm1.ShowPage;
// Отображает текущую страницу
var
  i: Integer;
begin
  RichEdit1.Clear;
  for i := LinesOfPage * (Page - 1) to LinesOfPage * Page - 1 do begin
    if i >= TXT.Count then
      Break;
    RichEdit1.Lines.Add(TXT[i]);
  end;
  Label1.Caption := 'Страница: ' + IntToStr(Page); // вывод номера страницы
  Label2.Caption := 'Всего: ' + IntToStr(PageCount);
end;

function TForm1.PageCount: Integer;
// Считаем кол-во страниц
begin
  Result := TXT.Count div LinesOfPage;
  if TXT.Count mod LinesOfPage > 0 then
    Inc(Result);
end;

procedure TForm1.NextPage;
// Переход к следующей странице
begin
  if Page < PageCount then begin
    Inc(Page);
    ShowPage;
  end;
end;

procedure TForm1.PrevPage;
// Переход к предыдущей странице
begin
  if Page > 1 then begin
    Dec(Page);
    ShowPage;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  TXT := TStringList.Create; // TXT: TStringList;
  TXT.LoadFromFile(TXTFileName);
  Page := 1; // Page: Integer;
  ShowPage;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  PrevPage;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  NextPage;
end;

Последний раз редактировалось Arigato; 08.11.2017 в 11:15.
Arigato вне форума Ответить с цитированием
Старый 08.11.2017, 11:20   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А чем rich лучше? Текст же не форматированный
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.11.2017, 13:52   #5
Voldemar__
 
Регистрация: 08.11.2017
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Лучше использовать TRichEdit. А постраничный вывод - загружать файл в TStringList, из него переносить нужный блок в TRichEdit, кнопками перехода на другую страницу менять номер блока.

Набросал пример, разбирайтесь и настраивайте под свою задачу:
Спасибо за пример, но TStringList подгрузит всю строку, пока не встретится #13#10, а в РичЭдите что будет? Огромная ширина строки с горизонтальным скроллбаром? А если WordWrap, то текст превысит высоту РичЭдита (или Мемо)
Voldemar__ вне форума Ответить с цитированием
Старый 08.11.2017, 15:25   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Memo1.Perform(EM_LINESCROLL,0,22) или назад -22
22 (количество строк) сам вычисли сколько умещается по высоте
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.11.2017, 16:18   #7
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,547
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А чем rich лучше?
А чем хуже? Форматирование отключается выставлением в true свойства PlainText.
Arigato вне форума Ответить с цитированием
Старый 08.11.2017, 16:26   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Не хуже. И не лучше в данном случае ))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Постранично листаемый грид soleil@mmc БД в Delphi 2 25.08.2010 18:04
Копирование файлов постранично andre48 Microsoft Office Excel 2 08.03.2010 22:14
Вывод из базы постранично Amen PHP 14 20.10.2009 19:40
помогите с разбивкой постранично El_Pablo PHP 2 16.05.2008 12:12