Чтение онлайн

ЖАНРЫ

Советы по Delphi. Версия 1.4.3 от 1.1.2001

Озеров Валентин

Шрифт:

 Result := Bool(PrefixSeg) and Bool(PWordArray(MemL[DSeg:36])^[8]));

end; { InIDE }

Работа с IDE из программы

Вот три подпрограммы, работающие у меня в связке D1 и Win 3.1x:

function LaunchedFromDelphiIDE: Boolean;

{----------------------------------------------------------------}

{ Осуществляем проверку запущенности приложения из-под Delphi }

{ IDE.
Идея взята из сообщения в Delphi-Talk от Ed Salgado }

{ из Eminent Domain Software. }

{----------------------------------------------------------------}

begin

 LaunchedFromDelphiIDE := Bool(PrefixSeg) {т.е. не DLL}

and Bool(PWordArray(MemL[DSeg:36])^[8]);

end; {LaunchedFromDelphiIDE}

function DelphiLoaded: Boolean;

{----------------------------------------------------------------}

{ Проверяем, загружена ли Delphi. Дает правильные результаты }

{ - если вызывающее приложение запущено отдельно, или из-под IDE}

{ - если Delphi имеет открытый проект }

{ - если Delphi минимизирована. }

{ Автор идеи Wade Tatman (wtatman@onramp.net). }

{----------------------------------------------------------------}

begin

DelphiLoaded := false;

 if WindowExists('TPropertyInspector', 'Object Inspector') then

if WindowExists('TMenuBuilder', 'Menu Designer') then

if WindowExists('TAppBuilder', '(AnyName)') then

if WindowExists('TApplication', 'Delphi') then

if WindowExists('TAlignPalette', 'Align') then

DelphiLoaded := true;

end; {DelphiLoaded}

function DelphiInstalled: Boolean;

{----------------------------------------------------------------}

{ Проверяем наличие Delphi.ini, ищем в нем путь к Библиотеке }

{ Компонентов, после чего проверяем ее наличие по этому пути. }

{----------------------------------------------------------------}

var IniFile: string;

begin

 DelphiInstalled := false;

 IniFile := WindowsDirectory + '\Delphi.ini';

 if FileExists(IniFile) then

if FileExists(GetIni(IniFile, 'Library', 'ComponentLibrary')) then

DelphiInstalled := true;

end; {DelphiInstalled}

Я

уверен, что один из приведенных выше методов вам поможет. Последние две подпрограммы используют некоторые другие инкапсуляции Windows API и классов Delphi, и они определены следующим образом:

function WindowExists (WindowClass, WindowName: string): Boolean;

{----------------------------------------------------------------}

{ С помощью паскалевских строк проверяем наличие определенного }

{ окна. Для поиска только имени окна (WindowName), используем }

{ WindowClass '(AnyClass)'; для поиска только класса окна }

{ (WindowClass), используем WindowName '(AnyName)'. }

{----------------------------------------------------------------}

var

 PWindowClass, PWindowName: PChar;

 AWindowClass, AWindowName: array[0..63] of Char;

begin

 if WindowClass = '(AnyClass)' then PWindowClass := nil

 else PWindowClass := StrPCopy(PChar(@AWindowClass), WindowClass);

 if WindowName = '(AnyName)' then PWindowName := nil

 else PWindowName := StrPCopy(PChar(@AWindowName), WindowName);

 if FindWindow(PWindowClass, PWindowName) <> 0 then WindowExists := true

 else WindowExists := false;

end; {WindowExists}

function WindowsDirectory: string;

{----------------------------------------------------------------}

{ Возвращаем путь к каталогу Windows (без обратной косой черты) }

{----------------------------------------------------------------}

const BufferSize = 144;

var ABuffer: array[0..BufferSize] of Char;

begin

 if GetWindowsDirectory(PChar(@ABuffer), BufferSize) = 0 then WindowsDirectory := ''

Поделиться с друзьями: