Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.01.2011, 12:37
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию Подскажите что не так делаю...

Необходимо:
1. По событию OnClick объекта Open1
• Открываться диалоговое окно открытия файла;
2. При закрытии окна по кнопке Open:
- В Memo1 загрузить выбранный файл;
- В заголовок формы - полное имя файла;
- Memo1 сделать видимым;
- Save1, SaveAs1 – включить (т.е. сделать доступными);

Не работают следующие вещи:
- В Memo1 файл не грузится - выдаёт ошибку;
- элементы меню не активируются;
- в заголовок формы записывается имя предыдущего файла.
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    File1: TMenuItem;
    Help1: TMenuItem;
    About1: TMenuItem;
    New1: TMenuItem;
    Open1: TMenuItem;
    Close1: TMenuItem;
    Save1: TMenuItem;
    SaveAs1: TMenuItem;
    Exit1: TMenuItem;
    PopupMenu1: TPopupMenu;
    Save2: TMenuItem;
    About2: TMenuItem;
    Exit2: TMenuItem;
    Memo1: TMemo;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    N1: TMenuItem;
    procedure Open1Click(Sender: TObject);
    procedure OpenDialog1Close(Sender: TObject);
    procedure Close1Click(Sender: TObject);
    procedure Save1Click(Sender: TObject);
    procedure SaveAs1Click(Sender: TObject);
    procedure Exit1Click(Sender: TObject);
    procedure About1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  f: string;

implementation

{$R *.dfm}

procedure TForm1.Open1Click(Sender: TObject);
begin
  OpenDialog1.Execute;
  f:= OpenDialog1.FileName;
end;

procedure TForm1.OpenDialog1Close(Sender: TObject);
begin
  Form1.Caption := f;
  Memo1.Clear;
  Memo1.Visible:= true;
  Memo1.Lines.LoadFromFile(f);
  Save1MenuItem.Enabled := Enable;
  SaveAs1MenuItem.Enabled := Enable;
  Close1MenuItem.Enabled := Enable;
 end;

procedure TForm1.Close1Click(Sender: TObject);
begin
  Memo1.Visible:= False;
end;

procedure TForm1.Save1Click(Sender: TObject);
begin
  Memo1.Lines.SaveToFile(f);
end;

procedure TForm1.SaveAs1Click(Sender: TObject);
begin
  if SaveDialog1.Execute then
    Memo1.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.Exit1Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.About1Click(Sender: TObject);
begin
  MessageDlg('Автор'+ #13#10 + 'Студент СибГУТИ' + #13#10 +
  'Савченко Сергей Владимирович', mtInformation, [mbOK], 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  If FileExists('memos.txt') then Memo1.Lines.LoadFromFile('memos.txt')
	  else Memo1.Lines.SaveToFile('memos.txt');
end;

	CloseFile(OpenDialog1.FileName);   //закрываем файл
end.
Ответить с цитированием
  #2  
Старый 26.01.2011, 12:55
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Несколько неверная обработка событий:
Вместо:
Код:
procedure TForm1.Open1Click(Sender: TObject);
begin
  OpenDialog1.Execute;
  f:= OpenDialog1.FileName;
end;

procedure TForm1.OpenDialog1Close(Sender: TObject);
begin
  Form1.Caption := f;
  Memo1.Clear;
  Memo1.Visible:= true;
  Memo1.Lines.LoadFromFile(f);
  Save1MenuItem.Enabled := Enable;
  SaveAs1MenuItem.Enabled := Enable;
  Close1MenuItem.Enabled := Enable;
 end;

Лучше так:

Код:
procedure TForm1.Open1Click(Sender: TObject);
begin
  if not OpenDialog1.Execute then Exit;
  Form1.Caption := OpenDialog1.FileName;
  Memo1.Clear;
  Memo1.Visible:= true;
  Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
  Save1MenuItem.Enabled := Enable;
  SaveAs1MenuItem.Enabled := Enable;
  Close1MenuItem.Enabled := Enable;
end;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 26.01.2011, 20:14
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию

Когда делал примерно так - то всё работало.
Проблема в том, что
Цитата:
- В Memo1 загрузить выбранный файл;
- В заголовок формы - полное имя файла;
- Memo1 сделать видимым;
- Save1, SaveAs1 – включить (т.е. сделать доступными);
должно выполняться после закрытия диалогового окна (OnClose).
Ответить с цитированием
  #4  
Старый 26.01.2011, 20:56
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию

И выдаёт такие ошибки:
[Error] Unit1.pas(66): Undeclared identifier: 'Save1MenuItem'
[Error] Unit1.pas(66): Missing operator or semicolon
[Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
при
Код:
procedure TForm1.Open1Click(Sender: TObject);
begin
  //OpenDialog1.Execute;
  //f:= OpenDialog1.FileName;
  if not OpenDialog1.Execute then Exit;
  if not FileExists(OpenDialog1.FileName) then begin
    ShowMessage('Ôàéë ñ çàäàííûì èìåíåì íå íàéäåí. Äåéñòâèå îòìåíåíî.');
    Exit;
  end;
  f:= OpenDialog1.FileName;
  Self.Caption := f;
  Memo1.Clear;
  Memo1.Visible:= true;
  Memo1.Lines.LoadFromFile(f);
  Save1MenuItem.Enabled := true;
  SaveAs1MenuItem.Enabled := true;
  Close1MenuItem.Enabled := true;
end;
и
Project Project1.exe rised exeption class EReadError with message "Invalid property value". Process stoped.
при
Код:
procedure TForm1.Open1Click(Sender: TObject);
begin
  //OpenDialog1.Execute;
  //f:= OpenDialog1.FileName;
  if not OpenDialog1.Execute then Exit;
  if not FileExists(OpenDialog1.FileName) then begin
    ShowMessage('Ôàéë ñ çàäàííûì èìåíåì íå íàéäåí. Äåéñòâèå îòìåíåíî.');
    Exit;
  end;
  f:= OpenDialog1.FileName;
  Self.Caption := f;
  Memo1.Clear;
  Memo1.Visible:= true;
  Memo1.Lines.LoadFromFile(f);
  //Save1MenuItem.Enabled := true;
  //SaveAs1MenuItem.Enabled := true;
  //Close1MenuItem.Enabled := true;
end;
Ответить с цитированием
  #5  
Старый 27.01.2011, 06:10
Doctor_Che Doctor_Che вне форума
Прохожий
 
Регистрация: 25.01.2011
Сообщения: 36
Репутация: 10
По умолчанию

Cпасибо всем. Проблема решена.
Ответить с цитированием
  #6  
Старый 27.01.2011, 08:13
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Вот только зачем вы еще это делаете?:
Код:
if not FileExists(OpenDialog1.FileName) then begin
    ShowMessage('Файл с заданным именем не найден. Действие отменено.');
    Exit;
  end;
Там-же идет проверка
Код:
if not OpenDialog1.Execute then Exit;
которая гарантирует, что файл выбран и соответственно существует.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #7  
Старый 27.01.2011, 09:20
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Страдалецъ, защита от дурака. Вдруг кто-то уж очень шустрый успеет удалить файл в тот момент, когда он уже выбран, но ещё не открыт в программе?
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #8  
Старый 27.01.2011, 09:31
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну тогда надо будет еще проверять на соответствие типа файла, а то вдруг кто-то еще более хитрый подсунул под тем-же именем другой файл.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 19:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025