Вопрос по Delphi

akula

New Member
Всем привет. Помогите пожалуйста новичку.
Сейчас пишу программу Блокнот( как в Windows). Проблема в том, что OpenDialog не хочет открывать больше двух раз! Помогитеееееее.
Код:
procedure TForm1.N7Click(Sender: TObject);
var MyMsgDialog:TForm;
    i:integer;
    FullProgPath: PChar;
begin
   if Memo1.Text<>'' then
   begin
// Создаем диалог
      MyMsgDialog:=CreateMessageDialog('Âû õîòèòå ñîõðàíèòü èçìåíåíèÿ â ôàéëå ?',mtConfirmation,[mbYes,mbNo,mbCancel]);
// Создаем компоненты
      with MyMsgDialog do
      begin
// Русифицируем кнопки
         for i := 0 to MyMsgDialog.ComponentCount-1 do
            if MyMsgDialog.Components[i] is TButton then
            if (MyMsgDialog.Components[i] as TButton).Caption='&Yes' then
            (MyMsgDialog.Components[i] as TButton).Caption:='Äà'
            else
            if (MyMsgDialog.Components[i] as TButton).Caption='&No' then
            (MyMsgDialog.Components[i] as TButton).Caption:='Íåò'
            else
            if (MyMsgDialog.Components[i] as TButton).Caption='Cancel' then
            (MyMsgDialog.Components[i] as TButton).Caption:='Îòìåíà';
         try
            Caption:='Áëîêíîò';
            Height:=130;
            case ShowModal of
// Обрабатываем кнопки
               ID_YES:begin
                            Memo1.Lines.SaveToFile(SaveDialog1.FileName + '.txt');
                      end;
               ID_NO:begin
                        FullProgPath:=PChar(Application.ExeName);
                        WinExec(FullProgPath,SW_SHOW);
                        Application.Terminate;
                        Close;
                     end;
               ID_CANCEL:begin
                            MyMsgDialog.Close;
                            Memo1.SelStart:=0;
                         end;
            end;
         finally
// Освобождаем переменные
            Free;
            OpenDialog1.Free;
         end;
      end;
   end else
   begin
      if not OpenDialog1.Execute then Exit else
//Если файла не существует
      begin
         if not FileExists(OpenDialog1.FileName) then
         begin
            fname:=ExtractFileName(OpenDialog1.FileName);
            MyMsgDialog:=CreateMessageDialog(fname+chr(13)+'Ôàéë íå íàéäåí.'+chr(13)+'Ïðîâåðüòå ïðàâèëüíîòü èìåíè ôàéëà è ïîâòîðèòå ïîïûòêó.',mtWarning,[mbOk]);
// Создаем компоненты
            with MyMsgDialog do
            begin
               try
                  Caption:='Îòêðûòü';
                  Height:=140;
// Обрабатываем кнопки
                  case ShowModal of
                     ID_OK:OpenDialog1.Execute;
                  end;
               finally
// Освобождаем переменные
                  Free;
                  OpenDialog1.Free;
               end;
            end;
         end else
         begin
            OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
            fname:=ExtractFileName(OpenDialog1.FileName);
            Form1.Caption:=fname+' - Áëîêíîò';
            Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
            Memo1.SelStart:=0;
            OpenDialog1.Free;
         end;
      end;
   end;
end;
 

Tom d`Cat

Кот. Просто кот.
Модератор
Смотри, где ты описываешь OpenDialog1.
По OpenDialog1.Free он уничтожается. Обычно такие невизуальные компоненты так и болтаются Кощеями Бессмертными всё время существования программы. Но если экономить память (уничтожать лишние), то перед OpenDialog1.Execute ещё некоторые настройки бывают полезны. Например:

OpenDialog1.Title := 'Открыть файл';
OpenDialog1.FileName:=sPthLast+'\*.htm';
OpenDialog1.InitialDir:=sPthLast; // Последний посещённый каталог.
OpenDialog1.Filter:='HTM|*.htm|TXT|*.txt|HTML|*.html|все файлы|*.*';
OpenDialog1.FilterIndex:=1;
OpenDialog1.DefaultExt:='htm';


Вообще-то, в Options можно выбрать ofAllowMultiSelect, но чего-то мне кажется, что в редакторе это нафик нужно...
 
Останнє редагування:

akula

New Member
Смотри, где ты описываешь OpenDialog1.
По OpenDialog1.Free он уничтожается. Обычно такие невизуальные компоненты так и болтаются Кощеями Бессмертными всё время существования программы. Но если экономить память (уничтожать лишние), то перед OpenDialog1.Execute ещё некоторые настройки бывают полезны. Например:

OpenDialog1.Title := 'Открыть файл';
OpenDialog1.FileName:=sPthLast+'\*.htm';
OpenDialog1.InitialDir:=sPthLast; // Последний посещённый каталог.
OpenDialog1.Filter:='HTM|*.htm|TXT|*.txt|HTML|*.html|все файлы|*.*';
OpenDialog1.FilterIndex:=1;
OpenDialog1.DefaultExt:='htm';


Вообще-то, в Options можно выбрать ofAllowMultiSelect, но чего-то мне кажется, что в редакторе это нафик нужно...
это ты что-то вообще не о том, эти все настройки я знал уже давно!
вот запусти прогу посмотри в чем проблема, так понятней будет
http://rghost.ru/31769451
 

Tom d`Cat

Кот. Просто кот.
Модератор
Гм... Переборщил я с бонусом. Смысл в том, что в коде присутствует OpenDialog1.Free, а OpenDialog1.Create а не вижу.
Если OpenDialog1 просто торчит на форме, то OpenDialog1.Free не нужен.
 

Storm_10

Member
всем здравствуйте, кто может подкинуть на русском литературы для Делфи 7 и хэлп для х64, потому как у меня не запускается, посмотрел по пути файла справки, его просто нету, буду рад если выставите
 

[mAd_cAt]

Забанен
всем здравствуйте, кто может подкинуть на русском литературы для Делфи 7 и хэлп для х64, потому как у меня не запускается, посмотрел по пути файла справки, его просто нету, буду рад если выставите
Скачай себе Delphi XE2 под 64 битную ос... Delphi 7 имеет 32-x разрядный компилятор!
 

Storm_10

Member
Скачай себе Delphi XE2 под 64 битную ос... Delphi 7 имеет 32-x разрядный компилятор!
не вариант, именно этот нужен, работает нормально, кроме 1-го: после сохранения проекта файл справки запрашивает с директории этого проекта или так и надо!?
 

[mAd_cAt]

Забанен
не вариант, именно этот нужен, работает нормально, кроме 1-го: после сохранения проекта файл справки запрашивает с директории этого проекта или так и надо!?
Что именно запрашивает файл справки??? Такого не должно быть...
 
Зверху