Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Определение работы в Delphi IDE

Delphi , Программа и Интерфейс , IDE и Компилятор

Определение работы в Delphi IDE


function DelphiLoaded: boolean;
{ Определение работающей Delphi. Во всяком случае, дает
правильный результат если Delphi минимизирован, или имеет о
ткрытый проект. Также, правильный результат получается,
если вызывающее приложение автономно, или запущено из-под
IDE. Код написан на основе идей Wade Tatman
wtatman@onramp.net - Mike O'Hanlon, The Pascal Factory,
найденных в Delphi-Talk List. }

  function WindowExists(ClassName, WindowName: string): boolean;
    { Проверяем наличие определенного окна Window, используя
    для этого паскалевские строки вместо PChars. }

  var
    PClassName, PWindowName: PChar;
    AClassName, AWindowName: array[0..63] of char;
  begin
    if ClassName = '' then
      PClassName := nil
    else
      PClassName := StrPCopy(@AClassName[0], ClassName);
    if WindowName = '' then
      PWindowName := nil
    else
      PWindowName := StrPCopy(@AWindowName[0], WindowName);
    if FindWindow(PClassName, PWindowName) <> 0 then
      WindowExists := true
    else
      WindowExists := false;
  end; {WindowExists}

begin {DelphiLoaded}
  DelphiLoaded := false;
  if WindowExists('TPropertyInspector', 'Object Inspector') then
    if WindowExists('TMenuBuilder', 'Menu Designer') then
      if WindowExists('TApplication', 'Delphi') then
        if WindowExists('TAlignPalette', 'Align') then
          if WindowExists('TAppBuilder', '') then
            DelphiLoaded := true;
end; {DelphiLoaded}

Следующая программа возвращает TRUE при запуске в Delphi IDE (ПРИМЕЧАНИЕ: это _не_ сработает, если подпрограмма в DLL).


function InIDE: Boolean;
begin
  Result := Bool(PrefixSeg) and
    Bool(PWordArray(MemL[DSeg:36])^[8]));
end;  { InIDE }

Вот перевод текста на русский язык:

Это фрагмент кода на Delphi, который проверяет, запущен ли программный продукт в инстанции Delphi IDE или нет.

Первая функция DelphiLoaded проверяет наличие нескольких конкретных окон и компонентов, типичных для сессии Delphi IDE, включая:

  1. 'Объектный инспектор'
  2. 'Дизайнер меню'
  3. 'Delphi' (предположительно, относящийся к основному окну приложения)
  4. 'Выравнивание' (палетка или инструментальное окно)
  5. 'AppBuilder' (внутренний компонент для создания приложений)

Если все эти окна и компоненты найдены, DelphiLoaded возвращает True, указывая, что программа запущена в сессии Delphi IDE.

Вторая функция InIDE использует другой подход для определения, запущен ли программный продукт в инстанции Delphi IDE. Она проверяет два условия:

  1. Наличие переменной PrefixSeg, которая обычно определяется при компиляции для Delphi.
  2. Специфический шаблон памяти по адресу MemL[DSeg:36]^[8], который appears to be a pointer to an array of words.

Если оба условия выполнены, InIDE возвращает True, указывая, что программа запущена в сессии Delphi IDE.

Эти функции могут быть полезны для обнаружения и обработки ситуаций, когда ваше приложение должно поведать differently в зависимости от того, запущено ли оно в IDE или standalone.

Данная статья описывает функции, которые помогают определить, запущен ли Delphi IDE и находится ли приложение в этом окружении.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: IDE и Компилятор ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-24 20:00:05/0.0036089420318604/0