![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Необходимо:
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
|
||||
|
||||
|
Несколько неверная обработка событий:
Вместо: Код:
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
|
|||
|
|||
|
Когда делал примерно так - то всё работало.
Проблема в том, что Цитата:
|
|
#4
|
|||
|
|||
|
И выдаёт такие ошибки:
[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
|
|||
|
|||
|
Cпасибо всем. Проблема решена.
|
|
#6
|
||||
|
||||
|
Вот только зачем вы еще это делаете?:
Код:
if not FileExists(OpenDialog1.FileName) then begin
ShowMessage('Файл с заданным именем не найден. Действие отменено.');
Exit;
end;Код:
if not OpenDialog1.Execute then Exit; |
|
#7
|
||||
|
||||
|
Страдалецъ, защита от дурака. Вдруг кто-то уж очень шустрый успеет удалить файл в тот момент, когда он уже выбран, но ещё не открыт в программе?
![]() |
|
#8
|
||||
|
||||
|
Ну тогда надо будет еще проверять на соответствие типа файла, а то вдруг кто-то еще более хитрый подсунул под тем-же именем другой файл.
![]() |