Перейти к содержанию
Fire Monkey от А до Я
  • 0

Есть ли аналог TCreateParams ?


Вадим Смоленский

Вопрос

В своем VCL-проекте я использовал оригинальный способ застраховаться от повторного запуска приложения. Обычно это делают через Mutex. Но умные люди на experts-exchange.com много лет назад посоветовали мне следующее:

// в главном окне:
protected
  procedure CreateParams(var Params: TCreateParams); override;

procedure TMyApp.CreateParams(var Params: TCreateParams);
begin
 inherited CreateParams(Params);
 Params.WinClassName:='MyAPP String ID';  
end;

// В файле .dpr:
var AWnd, A1Wnd: HWND;

AWnd:=FindWindow('MyApp String ID',nil);
if IsWindow(AWnd) then
   begin
    A1Wnd := GetWindow(AWnd, GW_OWNER);
    if IsWindow(A1Wnd) then AWnd := A1Wnd;
    ShowWindow(AWnd, SW_RESTORE);
    SetForegroundWindow(AWnd);
  end else
begin
  Application.Initialize;
  .......
end

Способ хорош тем, что он не просто блокирует повторный запуск, а выводит уже запущенное приложение на передний план, тычет юзера в него носом. Но при переходе на FireMonkey возникла закавыка: компилятору не нравится TCreateParams. Говорит: undeclared identifier. Чем бы его заменить?

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
  • Администраторы

Нет, аналога нет. Так как кода должен одинаково работать на всех платформах, а CreateParams сугубо виндовая вещь.

Ссылка на комментарий
  • 0

Ну хорошо. Должен одинаково на всех платформах. Но ведь не зря существуют фишки вроде {$IFDEF MSWINDOWS}. Разве нельзя добиться, чтобы это или что-то похожее работало хотя бы только под Windows?

Ссылка на комментарий
  • 0

Вопрос снят! Я попробовал еще один вариант, тоже порекомендованный мне одним экспертом 13 лет назад, и он отлично работает - по крайней мере, под Windows. При попытке повторного запуска приложение выводится на передний план.

Там много кода, я не буду его здесь воспроизводить. Если кому-то интересно, то вот ссылка на обсуждение (советует эксперт SaLz):

https://www.experts-exchange.com/questions/21225893/Disabling-second-run.html#a12728730

Ссылка на комментарий
  • 0

Искать по класс нейму окно, и утверждать, что оно ваше - это 5 балов. Особенно по стандартному названию, как из примера.

Кросс платформенного решения быть не может, потому что запущенность приложения под тем-же андроидом вещь сильно условная.

В остальном vcl = firemonkey с некоторыми оговорками через ifdef. Поэтому нет проблемы код из vcl проекта использовать под firemonkey и наоборот. Если нужно win api - пара слов в uses, и всё что надо доступно. Нужен android api - тоже самое.
 

Ссылка на комментарий
  • 0

Который из вариантов вызвал ваш сарказм: процитированный в исходном посте или доступный по ссылке в последнем комментарии?

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...