• Earth’s Geomagnetic Pole Reversal

  • Самая полная коллекция исторической статистики России-СССР.


  • Переменные с директивой absolute (2009.10.24).

    Вот по работе узнал, что в среде Delphi 7 есть возможность объявлять переменные в разделе var с директивой absolute. (для справки см. помощь) в общем, можно использовать как механизм масок. вроде возможно указывать адрес не объявленной переменной, а пришедшего параметра метода.

    Работа с Single (2009.11.26).

    Возникла надобность указать переменной типа Single ее верхнюю границу, равную максимальному значения данного типа.
    Заведем для этого константу CONST_SINGLE_BOUND_MAX.
    Не хотелось писать CONST_SINGLE_BOUND_MAX = $FFFFFFFF;

    Оказалось, что можно написать так: CONST_SINGLE_BOUND_MAX = 3.4E38;
    И вот еще ссылка на эту тему.

    Реализация интерфейсов делегированием (2009.12.15).

    Начались проблемы с использованием интерфейсов. При работе с классами, унаследованными не от TInterfacedObject, а от TFrame и реализующие какой-либо интерфейс есть недопонимание с моей стороны. Такое ощущение, что при этом объекты все равно автоматически уничтожаются. так вот, полез разбираться и узнал новое! Оказалось, что существует очень красивый механизм, называемый делегированием реализации интерфейса.

    Прочитал я это здесь раздел "Реализация интерфейсов делегированием".

    Исключения (2010.01.03).

    Почитал я справку Delphi 7. И вот что, я для себя запомнил.

    Полный синтаксис оператора raise.
    In general, the form of a raise statement is:

    raise object at address
    When an address is specified, it can be any expression that evaluates to a pointer type, but is usually a pointer to a procedure or function.

    For example:

    raise Exception.Create('Missing parameter') at @MyFunction;
    Use this option to raise the exception from an earlier point in the stack than the one where the error actually occurred."

    О проблемах при очередности подключения модуля SysUtils.
    Raising an exception in the initialization section of a unit may not produce the intended result. Normal exception support comes from the SysUtils unit, which must be initialized before such support is available. If an exception occurs during initialization, all initialized units--including SysUtils--are finalized and the exception is re-raised. Then the exception is caught and handled, usually by interrupting the program. Similarly, raising an exception in the finalization section of a unit may not lead to the intended result if SysUtils has already been finalized when the exception has been raised."

    Re-raising exceptions.
    When the reserved word raise occurs in an exception block without an object reference following it, it raises whatever exception is handled by the block. This allows an exception handler to respond to an error in a limited way and then re-raise the exception. Re-raising is useful when a procedure or function has to clean up after an exception occurs but cannot fully handle the exception.

    function GetFileList(const Path: string): TStringList;
    begin
      Result := TStringList.Create;
      try
       ...
      except
        Result.Free;
        raise;
      end;
    end;

    Учебник по Delphi 7 (2010.03.19)

    Нечаянно натолкнулся на учебник по Delphi 7 на RSDN. Прочитал часть про интерфейсы (глава 6). Оценивая учебник по этой статье, можно сказать, что он для программистов уже уровня не новичка. Очень интересное и полное изложение и профессиональный подход к использованию Delphi. Именно поэтому и акцентирую внимание на этом учебника. Очень понравился подход с доступам к объектам из dll-ки через интерфейсные ссылки.  Рассказ о среде ведется в контексте создания конкретного приложения.

    Ссылки на учебник:
    Глава 1. Основы визуального программирования
    Глава 2. Основы языка Delphi
    Глава 3. Объектно-ориентированное программирование (ООП)

    Глава 4. Исключительные ситуации и надежное программирование

    Глава 5. Динамически загружаемые библиотеки

    Глава 6. Интерфейсы

    Глава 7. Проект приложения

    Глава 8. Меню, строка состояния и панель инструментов

    Глава 9. Окна диалога

    Проекты bat-файлов (2010.04.02)

    Оказалось, что Delphi поддерживает создание проектов bat-файлов.
    Эти создаваемые bat-файлы возможно запускать напрямую из IDE в окне Project Manager.
    Данную возможность я считаю удобно использовать для создания инсталляций проекта и выкладывания их на файловый сервер не выходя их IDE Delphi - просто добавляем скрипты в ProjectGroup нашего проекта и запускаем их, когда доделан новый релиз.

    Запись в записи (2010.06.08)

    Сейчас ради интереса просматривал код коллеги и обнаружил вот такую запись

    TResursReceiveData = record
      Head: TResursHead;
      Data: record
      case Byte of
        0: (DeviceInfo: TDeviceInfo);
        1: (CTModeData: TCTModeDataStruct);
        2: (VTModeData: TVTModeDataStruct);
      end;
      Crc: Byte;
    end
    ;

    Просто офигеть! И как я раньше об этом не знал. Один раз у меня точно была необходимость использования такой конструкции!

    Платформеннозависимые модули (2010.12.13)

    Хотел использовать функцию SelectDirectory из модуля FileCtrl и при компиляции проекта увидел следующее сообщение:
    Unit 'FileCtrl' is specific to a platform.

    Оказалось, что этот модуль объявлен следующим образом:
    unit FileCtrl platform;

    Интересная, однако, возможность! Теперь подключаю этот модуль так, ибо проект только под MS Windows:
    uses
    {$WARN UNIT_PLATFORM OFF}
      FileCtrl,
    {$WARN UNIT_PLATFORM ON}
      SysUtils;














































  • Earth’s Geomagnetic Pole Reversal

  • Самая полная коллекция исторической статистики России-СССР.