На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> настройка компилятора - не показывать ошибки
    юзаю try except... запускаю прогу в компиляторе - всеравно выдает ошибку
    компилирую и запускаю сам ексешник - ошибок нет,все норм.

    Собственно как отключить эту штуку в компиляторе что бы спокойно можно было из компилятора запускать??
    подскажите плиз
    Сообщение отредактировано: 8ka -
      Tools/Options/Debugger/Stop on exceptions.
        Цитата 8ka @
        Собственно как отключить эту штуку в компиляторе что бы спокойно можно было из компилятора запускать??
        подскажите плиз

        Не надо это делать!
        Тем самым вы сами себе "серпом по фабержам"!
        Спокойно "запускать" под встроенном отладчиком (а не "из компилятора", как вы сказали) вам ничего не мешает. Он (отладчик) вам только всегда напоминает об ошибках. И только если вы уверены на 100%, что вы "грамотно" обработали все ошибки, вы можете выключить опцию "Stop on exceptions".
        Хотя я не понимаю для чего это нужно!
          Цитата northener @
          Хотя я не понимаю для чего это нужно!
          Было нужно. Поиск файлов-дубликатов на диске - здесь я обрабатываю неудачное открытие файла одним оператором continue, но таких файлов много, поэтому было напряжно каждый раз закрывать окошко ошибки.
            Цитата Alexander N @
            Было нужно. Поиск файлов-дубликатов на диске - здесь я обрабатываю неудачное открытие файла одним оператором continue, но таких файлов много

            Если "таких файлов много", то это уже не исключительная ситуация, а вполне штатная, поэтому логичнее было бы просто (локально) отключить генерацию исключений при открытии файлов по {$I-} и проверять успешность по IOResult
              Цитата leo @
              Если "таких файлов много", то это уже не исключительная ситуация, а вполне штатная, поэтому логичнее было бы просто (локально) отключить генерацию исключений при открытии файлов по {$I-} и проверять успешность по IOResult
              Как? Я же через TFileStream работал?
              Сообщение отредактировано: Alexander N -
                Цитата Alexander N @
                Как? Я же через TFileStream работал?

                Еще лучше - значит нужно было работать через THandleStream + FileOpen\FileClose без всяких IOResult ;)
                По любому, как ни крути, а исключение должно быть не правилом, а исключением из правил :)
                  Цитата leo @
                  Еще лучше - значит нужно было работать через THandleStream + FileOpen\FileClose без всяких IOResult
                  А как позицию хранить? Блоками читать?
                    Цитата Alexander N @
                    А как позицию хранить? Блоками читать?

                    О чем это ты ? TFileStream это совершенно куций фантик для THandleStream, и делает он всего две элементарные вещи:
                    1) в конструкторе вызывает inherited Create(FileOpen(FileName, Mode)) + проверяет хэндл файла и генерит исключение при FHandle < 0
                    2) в деструкторе закрывает файл по if FHandle >= 0 then FileClose(FHandle);
                    Спрашивается, что изменится, если открытие и закрытие файла вынести наружу и юзать THandleStream в "чистом виде" ?

                    Добавлено
                    ExpandedWrap disabled
                      var
                        h:integer;
                        strm:THandleStream;
                      begin
                        ...
                        h:=FileOpen(FName,Mode);
                        if h >= 0 then
                        begin
                          strm:=THandleStream.Create(h);
                          try
                            ...
                          finally
                            strm.Free;
                            FileClose(h);  
                          end;
                        end
                        else
                          ... //ошибка открытия файла GetLastError
                      end;
                    Сообщение отредактировано: leo -
                      А у меня массив из TFileStream - как его заменить?

                      Добавлено
                      Переменной длины
                        Цитата Alexander N @
                        А у меня массив из TFileStream - как его заменить?

                        Час от часу не легче ;)
                        Ну определи тогда свой класс, который будет закрывать файл в деструкторе
                        ExpandedWrap disabled
                          type
                             TMyFileStream = class(THandleStream)
                               destructor Destroy;override;
                             end;
                          destructor TMyFileStream.Destroy;
                          begin
                             if Handle >= 0 then FileClose(Handle);
                             inherited;
                          end;
                           
                          var
                             files:array of TMyFileStream;
                             h:integer;
                          begin
                             ...
                             h:=FileOpen(FName,Mode);
                             if h >= 0 then
                             begin
                               SetLength(files,Length(files)+1);
                               files[Length(files)-1]:=TMyFileStream.Create(h);
                               ...
                             end
                             else
                               ... //GetLastError
                          end;
                          Цитата leo @
                          Ну определи тогда свой класс, который будет закрывать файл в деструкторе
                          Ну а зачем, если уже есть TFileStream и его хватает с лихвой? :)
                            Цитата Alexander N @
                            Ну а зачем, если уже есть TFileStream и его хватает с лихвой?

                            Ага с очень большой лихвой, упомянутой тобой в #4 ;)
                            Реализация TFileStream предполагает, что ошибка открытия файла, это маловероятная = исключительная ситуация, поэтому "безобидно"\"безболезненную" проверку на Handle < 0 превращает в исключительную raise EFOpenError, "ставя на уши" не только саму прогу, но и всю систему в целом - не зря же отладчик "вопит" при каждом исключении ;)
                            Сообщение отредактировано: leo -
                              Цитата leo @
                              но и всю систему в целом
                              Каким образом?
                                Установка флага Tools/Options/Debugger/Stop on Delphi exceptions в "on" нужна в очень редких случаях (таких даже не припомню).

                                Используется только для отладки.

                                Обработка исключений - необходимая и нормальная вещь внутри программы.
                                Получать же при отладке одно и то же исключение 2 раза - вовсе бессмысленно.

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


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0653 ]   [ 16 queries used ]   [ Generated: 25.07.25, 14:15 GMT ]