![]() |
|
|
Регистрация | << Правила форума >> | 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
|
||||
|
||||
![]() Страдалецъ, защита от дурака. Вдруг кто-то уж очень шустрый успеет удалить файл в тот момент, когда он уже выбран, но ещё не открыт в программе?
![]() Оставайтесь хорошими людьми... VK id2634397, ds [at] phoenix [dot] dj |
#8
|
||||
|
||||
![]() Ну тогда надо будет еще проверять на соответствие типа файла, а то вдруг кто-то еще более хитрый подсунул под тем-же именем другой файл.
![]() Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |