Советы по Delphi

         

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


...если вы говорите о компонентах VCL, и вам необходимо их различное поведение взависимости от факта их работы под IDE или в конечной программе, то это совсем просто.

В секции implementation:

Const
InIDE: Boolean := False;

И в процедуре Register:



InIDE := True;

Теперь, когда вам необходимо проверить "запущенность" компонент в среде Delphi, просто проверьте данный флаг. [000604]


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

function DelphiIsRunning : boolean;varH1, H2, H3, H4 : Hwnd;constA1 : array[0..12] of char = 'TApplication'#0;A2 : array[0..15] of char = 'TAlignPalette'#0;A3 : array[0..18] of char = 'TPropertyInspector'#0;A4 : array[0..11] of char = 'TAppBuilder'#0;T1 : array[0..6] of char = 'Delphi'#0;beginH1 := FindWindow(A1, T1);H2 := FindWindow(A2, nil);H3 := FindWindow(A3, nil);H4 := FindWindow(A4, nil);Result := (H1 <> 0) and (H2 <> 0) and (H3 <> 0) and (H4 <> 0);end;

initializationif not DelphiIsRunning thenbeginAboutBox := TAboutBox.Create(nil);AboutBox.ShowModal;AboutBox.Free;Halt;end;end.

Самая большая каверза, которую я обнаружил в данном методе, заключается в том, что когда вы запускаете программу с данным кодом, она работает из-под Delphi (что, в прочем, нам необходимо), но она будет работать и в том случае, когда программа запущена не из-под Delphi, а Delphi также загружена и работает параллельно. [000748]



Содержание раздела