Я делаю это так:
<% flash.each do |key, value| %>
<%= content_tag :div, value, class: "flash #{key}" %>
<% end %>
Здесь есть 2 разные идеи :
- Delphi запущена и работает
- Приложение работает под отладчиком
. Обычный способ проверить, работает ли Delphi , - это проверить наличие известных IDE Windows с определенным именем класса, например TAppBuilder или TPropertyInspector.
Эти 2 работают во всех версиях Delphi IIRC.
Если вы хотите знать, работает ли ваше приложение под отладчиком , то есть запускается в обычном режиме из среды IDE с помощью команды «Выполнить» (F9) или присоединено к отладчику, когда оно уже запущено, вам просто нужно проверить глобальная переменная DebugHook.
Обратите внимание, что «Отсоединить от программы» не удаляет значение DebugHook, но «Присоединить к процессу» устанавливает его.
function IsDelphiRunning: Boolean;
begin
Result := (FindWindow('TAppBuilder', nil) > 0) and
(FindWindow('TPropertyInspector', 'Object Inspector') > 0);
end;
function IsOrWasUnderDebugger: Boolean;
begin
Result := DebugHook <> 0;
end;
Если цель - ограничить использование пробной версии вашего компонента, когда приложение разрабатывается, оба имеют недостатки :
- Скрытые окна с правильным именем класса / заголовком могут быть включены в приложение
- DebugHook можно установить вручную в коде
Вы можете использовать DebugHook <> 0 из кода вашего компонента. DebugHook - это глобальная переменная (IIRC, она находится в модуле «Системы»), которая устанавливается IDE Delphi / RAD Studio и не может быть установлена из других источников.
Существуют и другие методы (например, FindWindow () для TAppBuilder ), но DebugHook берет на себя всю работу.
Это фрагмент кода из www.delphitricks.com/source-code/misc/check_if_delphi_is_running.html .
function WindowExists(AppWindowName, AppClassName: string): Boolean;
var
hwd: LongWord;
begin
hwd := 0;
hwd := FindWindow(PChar(AppWindowName), PChar(AppClassName));
Result := False;
if not (Hwd = 0) then {window was found if not nil}
Result := True;
end;
function DelphiLoaded: Boolean;
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;
procedure TForm1.Button1Click(Sender: TObject);
begin
if DelphiLoaded then
begin
ShowMessage('Delphi is running');
end;
end;
function DelphiIsRunning: Boolean;
begin
Result := DebugHook <> 0;
end;