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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2017, 12:02   #1
YurMak
 
Регистрация: 21.01.2016
Сообщений: 6
Вопрос Delphi 10 | Android | Проблема с Memo

Здравствуйте, уважаемые!
Появилась непонятка, прошу помощи.

Задача: прочитать содержимое текстового файла вывести его в Memo с особыми визуальными параметрами (шрифт, размер шрифта, выравнивание...)

Делаю так:

Код:
unit MemoTest;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.ScrollBox, FMX.Memo, FMX.Controls.Presentation;

type
  TForm3 = class(TForm)
    ToolBar1: TToolBar;
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;
  TextFile: string = 'File Path+File.txt';
  StrList: TStringList;
  WS: string=' ';
implementation

{$R *.fmx}

procedure TForm3.Button1Click(Sender: TObject);
var i:integer;
begin
        Memo1.Lines.Clear;
        StrList:= TStringList.Create;
        StrList.LoadFromFile(TextFile);
        for i := 0 to StrList.Count - 1 do

        begin
            WS:= StrList[i]; // Здесь идет какая-то обработка строки
            Memo1.Lines.Add(WS);
        end;
        StrList.Free;
        Label1.Text:=IntToStr(Memo1.Lines.Count);
end;


end.
Всё работает корректно, но только с первого раза.
При повторном нажатии на Button (ну например, нужно открыть другой файл в том же цикле) всё срабатывает, но в конце Memo, после текста появляются пустые строки!!! И количество их растёт с каждым нажатием (чтением файла).

Не могу понять причину.

При тестировании под Windows-32 этого не наблюдается, Memo каждый раз выделяет столько строк, сколько их в файле.
А при тестировании под Android вот такая беда.

Усть ли у Memo возможность "очиститься" полностью и обнулить количество строк?

Буду благодарен любым подсказкам.

Последний раз редактировалось YurMak; 15.09.2017 в 08:29.
YurMak вне форума Ответить с цитированием
Старый 14.09.2017, 21:01   #2
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Код:
procedure TForm3.Button1Click(Sender: TObject);
begin
        Memo1.Lines.Clear;
       Memo1.Lines.LoadFromFile(TextFile);
        Label1.Text:=IntToStr(Memo1.Lines.Count);
end;
пробуй...
PTyTb32 вне форума Ответить с цитированием
Старый 14.09.2017, 22:29   #3
YurMak
 
Регистрация: 21.01.2016
Сообщений: 6
По умолчанию

Неет!
Мне не нужно читать файл в Memo!
Мне нужно прочитать его именно в TStringList для последующей обработки (выделение части строки) и циклического внесения в Memo.
Вот:
Цитата:
Всё работает корректно, но только с первого раза.
При повторном нажатии на Button (ну например, нужно открыть другой файл в том же цикле) всё срабатывает, но в конце Memo, после текста появляются пустые строки!!! И количество их растёт с каждым нажатием (чтением файла).

Как решить эту проблему?

Последний раз редактировалось YurMak; 14.09.2017 в 22:35.
YurMak вне форума Ответить с цитированием
Старый 15.09.2017, 07:55   #4
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от YurMak Посмотреть сообщение
Неет!
Мне не нужно читать файл в Memo!
Мне нужно прочитать его именно в TStringList для последующей обработки (выделение части строки) и циклического внесения в Memo.
Вот:
Цитата:
Всё работает корректно, но только с первого раза.
При повторном нажатии на Button (ну например, нужно открыть другой файл в том же цикле) всё срабатывает, но в конце Memo, после текста появляются пустые строки!!! И количество их растёт с каждым нажатием (чтением файла).

Как решить эту проблему?
окей, а чисто случайно в файлы не вписываются пустые строки?

можешь еще вот так добавить, если это не нарушит концепции программы
Код:
procedure TForm3.Button1Click(Sender: TObject);
var i:integer;
begin
        Memo1.Lines.Clear;
        StrList:= TStringList.Create;
        StrList.LoadFromFile(TextFile);
        for i := 0 to StrList.Count - 1 do

        begin
            if StrList[i] <> '' then
            begin
              WS:= StrList[i];
              Memo1.Lines.Add(WS);
            end;
        end;
        StrList.Free;
        Label1.Text:=IntToStr(Memo1.Lines.Count);
end;

Последний раз редактировалось PTyTb32; 15.09.2017 в 07:59.
PTyTb32 вне форума Ответить с цитированием
Старый 15.09.2017, 08:08   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
StrList.LoadFromFile(TextFile);
Memo1.Lines.Assign(StrList);
и ни каких циклов))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.09.2017, 08:31   #6
YurMak
 
Регистрация: 21.01.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от PTyTb32 Посмотреть сообщение
можешь еще вот так добавить, если это не нарушит концепции программы
Спасибо, попробую.
YurMak вне форума Ответить с цитированием
Старый 15.09.2017, 08:34   #7
YurMak
 
Регистрация: 21.01.2016
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
и ни каких циклов))
Спасибо, но в таком случае я не смогу редактировать строку.
И мне не важно, как заполнить Memo.
Мне важно его полностью очистить и обнулить строки!!!
YurMak вне форума Ответить с цитированием
Старый 15.09.2017, 09:24   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от YurMak Посмотреть сообщение
Спасибо, но в таком случае я не смогу редактировать строку.
прочитали в TStringList. Отредактировали в нём нужные строки.

и потом:
Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
Memo1.Lines.Assign(StrList);
и никаких циклов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.09.2017, 09:27   #9
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Serge_Bliznykov прав, так правильнее, проще и быстрее
PTyTb32 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с отображением сайта на Android в Chrome M-K HTML и CSS 2 24.10.2013 17:01
проблема с отображением данных поля MEMO в Delphi betirsolt БД в Delphi 8 08.05.2013 12:39
Delphi.Чтение файла в Memo, вычисление, добавление строк в Memo antonio_sk Помощь студентам 0 26.04.2013 18:01
Delphi передача текста из memo в memo hauk70 Помощь студентам 27 22.05.2012 18:33
проблема с memo D_E_N Общие вопросы Delphi 2 07.01.2010 22:29