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

Как сделать форму активной, Форма находится в DLL

Delphi , Программа и Интерфейс , Формы

Code:
procedure ShowMainForm;
var
hWnd, hCurWnd, dwThreadID, dwCurThreadID: THandle;
OldTimeOut: DWORD;
AResult: Boolean;
begin
ShowWindow(Application.Handle, SW_RESTORE);
Application.MainForm.Visible := True;   // Показываем главную форму
 
// Ставим нашу форму впереди всех окон
hWnd := Application.Handle;
SystemParametersInfo(SPI_GETFOREGROUNDLOCKTIMEOUT, 0, @OldTimeOut, 0);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(0), 0);
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
hCurWnd := GetForegroundWindow;
AResult := False;
while not AResult do
begin
   dwThreadID := GetCurrentThreadId;
   dwCurThreadID := GetWindowThreadProcessId(hCurWnd);
   AttachThreadInput(dwThreadID, dwCurThreadID, True);
   AResult := SetForegroundWindow(hWnd);
   AttachThreadInput(dwThreadID, dwCurThreadID, False);
end;
SetWindowPos(hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
SystemParametersInfo(SPI_SETFOREGROUNDLOCKTIMEOUT, 0, Pointer(OldTimeOut), 0);
end;
Взято из http://forum.sources.ru

Автор: Rouse_

Код, который вы предоставили, написан на языке Delphi и appears to be responsible за отображение основного окна и его перемещение в передний план. Основное окно находится в DLL.

Вот что код делает:

  1. Он отображает основное окно, установив свойство Visible в True.
  2. Он устанавливает основное окно как topmost, поэтому оно всегда будет отображаться над другими окнами.
  3. Он использует системные функции для перемещения основного окна в передний план и его активации.
  4. Функция AttachThreadInput используется для временного переключения фокуса ввода из текущего потока в другой поток.
  5. После того, как основное окно было перемещено в передний план, оно возвращается к своему оригинальному положению (не topmost) и восстанавливается предыдущий таймаут.

Чтобы сделать форму активной, вы можете использовать следующие шаги:

  1. Установите свойство Enabled формы в True.
  2. Переместите форму в передний план с помощью ShowWindow или BringToFront.

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

Вот некоторые возможные альтернативы:

  1. Создайте очередь сообщений для DLL и отправьте сообщение для активации формы.
  2. Используйте интерфейсы COM для общения между основным приложением и DLL.
  3. Используйте механизм общения по разделяемой памяти или файловой системе для передачи информации между приложениями.

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

Если вы ищете более простое решение, вам может помочь использование встроенных функций Delphi для общения между формами и приложениями. Например, вы можете использовать метод TForm.ShowModal для отображения модального диалогового окна, которое будет блокировать основное приложение до тех пор, пока оно не будет закрыто.

Как сделать форму активной, если она находится в DLL и не является основной формой приложения.


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

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




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


:: Главная :: Формы ::


реклама


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

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:20:16/0.0033471584320068/0