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


Автор: Serkys 3.4.2006, 19:36
Предупреждаю сразу: в Delphi я ламер полный.
Попытался немного, вроде нормально пошло, но не получается прочитать в TMemo из файла текст.
Пытался так, выскакивает ошибка.
Код

Form1.Memo1.Lines.LoadFromFile('base.mdb');

Выручайте.
Добавлено @ 19:37
Файл содержит текст в несколько строк. Пробовал оставить только одну строку - не помогает.

Автор: Guedda 3.4.2006, 19:46
Какая ошибка выскакивает? На кофейной гуще гадать никто не может.

Автор: Serkys 3.4.2006, 20:17
Выскакивает сообщение с текстом: "Project Project1.exe raised exception class EAccessViolation With message 'Access violation at address 00451DB8 in module 'Project1.exe'. Read of address 00000308'. Process stopped. Use Step or Run to continue." И на выбор OK или Help.
Help ничего хорошего не пишет (пишет по английски и заумными терминами). Жму ОК, при попытке перейти к пошаговому выполнению (Step Over) или запустить (Run) выскакивает ошибка "Runtime error 216 at 004035B6".
Гадость какая-то. Я правильно понимаю, что дело не в коде?

Автор: Poseidon 3.4.2006, 20:20
Дело в коде в любом случае. Но вот то, что дело не в той строке, что ты привел - 99%. Посмотри на какой строке вылетает ошибка и все станет ясно.

Автор: Демо 3.4.2006, 20:27
Serkys,

Базу MS Access пытаешься загрузить? - Зря.
Memo для отображения текстовых данных.

Автор: Serkys 3.4.2006, 20:37
Цитата(Демо @ 3.4.2006, 21:27 Найти цитируемый пост)
Базу MS Access пытаешься загрузить? - Зря.

Не, не пытаюсь. Расширение сам придумал (типа себя крутым программером чувствую smile ). Надо попробовать расширение сменить.
Цитата(Poseidon @ 3.4.2006, 21:20 Найти цитируемый пост)
Но вот то, что дело не в той строке, что ты привел - 99%. Посмотри на какой строке вылетает ошибка и все станет ясно.

На этой и вылетает.
Добавлено @ 20:47
Не, смена расширения на txt не помогла. Вот вся процедура:
Код

procedure demo_load;
begin
  if (fileexists('base.mdb')) then
  begin
    Form1.Memo1.Lines.LoadFromFile('base.mdb');
  end;
end;

Вот что заметил: если файл он не находит, то всё нормально и выводит то, что забито в lines (очищать lines тоже пробовал, не помогает). А если файл нашёл, то ошибка.

Содержимое файла base.mdb случайно набранный текст в английской раскладке без каких-либо спецсимволов.

Ошибка вылетает во время прохода "Application.Initialize". Что-то я вообще ничего не понимаю.

Делфи седьмой стоит.

Для особо интересующихся выкладываю весь код. По себе знаю, что мутное это дело - в чужом коде разбираться. Если у кого желание будет - посмотрите.
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Button2: TButton;
    Label1: TLabel;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  edit1.Visible:=true;
  button2.Visible:=true;
end;

procedure TForm1.Button2Click(Sender: TObject);
var t: textfile;
begin
  assignfile(t,'base.mdb');
  if (fileexists('base.mdb')) then
    append(t)
  else rewrite(t);
  writeln(t,edit1.Text);
  closefile(t);
  edit1.Text:='';
  edit1.Visible:=false;
  button2.Visible:=false;
end;

procedure demo_load;

begin
  if (fileexists('base.mdb')) then
  begin
    Form1.Memo1.Lines.LoadFromFile('base.mdb');
  end;
end;

begin
demo_load;
end.

Автор: Poseidon 3.4.2006, 21:08
Цитата(Serkys @ 3.4.2006, 19:37 Найти цитируемый пост)
begin
demo_load;
end.
Кто тебя этому научил? smile Сделай так
Код

procedure TForm1.FormCreate(Sender: TObject);
begin
demo_load;
end;
и будет счастье smile

Автор: Pakshin A. S. 3.4.2006, 21:30
Цитата(Poseidon @ 3.4.2006, 21:08 Найти цитируемый пост)
Кто тебя этому научил?

Есть такое в мире... Называют инициализацией... Говорят, что гуд, но скорее для переменных модуля, поэтому скорее всего тут тот же случай: человек инициализирует текст в компоненте, поэтому и прибегает именно к такой конструкции... smile Прав?

Автор: Quadr0 3.4.2006, 22:04
...

Автор: Serkys 3.4.2006, 22:14
Цитата(Poseidon @ 3.4.2006, 22:08 Найти цитируемый пост)
Кто тебя этому научил?

Я сам кого хочешь научу smile . Да я просто на паскале кодил, тут подумал, что будет также почти - сначала процедуры/функции и т.д., затем сам код.

Poseidon, спасибо огромное!!! С меня плюс. Всем остальным тоже спасибо.

Да... Делфи это не паскаль...

Автор: Pakshin A. S. 3.4.2006, 22:17
Кстати еще один вариант имеется (меньше кода получится)...

Открываем dpr от нашего проекта... там есть Application.CreateForm(TForm1, Form1); вот после этой строчки поставим Form1.Memo1.Lines.LoadFromFile('');

Итого, мы избавились от события... smile

Автор: Serkys 3.4.2006, 22:36
Вот что я люблю в пригладном программировании, так это то, что чтобы показать кому-нибудь проект не надо показывать код smile . Стыдно smile

Автор: Pakshin A. S. 3.4.2006, 22:39
Цитата(Serkys @ 3.4.2006, 22:36 Найти цитируемый пост)
Стыдно

Что стыдно?

Автор: Serkys 4.4.2006, 00:22
Цитата(Pakshin A. S. @ 3.4.2006, 23:39 Найти цитируемый пост)
Что стыдно?

Ламерства стыдно. Обычно те, кто мой код смотрят, или офигенные гуру, или те, кто вообще это считает шифровками какими-то smile

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