Решение 1
Кто-нибудь знает как из Delphi-приложении получить значение флажка "Run Minimized" (прятать программу при запуске), размещенного в Группе Запуска в Windows 3.1 или 3.11? Я не знаю как из своего приложения проверить этот флажок и запустить приложение с соответствующим состоянием главного окна. Я хотел бы предоставить пользователю право самому определять начальное состояние окна, поскольку мое приложение выполняет чисто технические задачи и не требует частого обращения. В то же время во время первого запуска приложение должно быть развернуто, поскольку необходимо выставить первоначальные параметры. Это кажется простым, но я не знаю путей решения этой проблемы. Буду благодарен за любую предоставленную информацию.
Привет!
Используй модуль WinProcs и после создания формы добавь вызов ShowWindow.
Ты можешь использовать глобальные переменные HInstance, HPrevInst, CmdShow и CmdLine.
program Project1; uses WinProcs, {*** используем WinProcs} Forms, Unit1 in 'UNIT1.PAS' {Form1}; {$R *.RES} begin Application.CreateForm(TForm1, Form1); ShowWindow(Form1.handle, CmdShow); Application.Run; end. |
Решение 2
Вот еще один пример, источник информации:
Rubenking, Neil (1996). _Delphi Programming Problem Solver_. Foster City, CA: IDG Books. ISBN:1-56884-795-5.
unit Unit1; interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } ShowHow : word ; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.FormCreate(Sender: TObject); var SUI : TStartupInfo ; begin if CmdShow = SW_SHOWDEFAULT then begin GetStartupInfo( SUI ) ; ShowHow := SUI.wShowWindow ; end else ShowHow := CmdShow ; if ShowHow = SW_SHOWMAXIMIZED then WindowState := wsMaximized ; end; procedure TForm1.FormActivate(Sender: TObject); begin case ShowHow of SW_SHOWMINIMIZED, SW_MINIMIZE, SW_SHOWMINNOACTIVE : Application.Minimize ; end ; end; end. |
Решение 3
Это работает с NT 4 и Delphi 2.01. Все очень просто: Сделайте примерно так:
begin Application.Initialize; Application.CreateForm(TForm1, Form1); Form1.Show; Application.Minimize; Application.Run; end. |
В этом случае в обработчиках событий OnCreate и OnShow не должно быть процедур, изменяющих статус окна.
Решение 4
Когда в Program Manager я выбираю опцию "Run Minimized", чтобы заставить мое Delphi приложение стартовать в свернутом состоянии, то, похоже, мое приложение просто игнорирует сей флаг и запускается в нормальном режиме. Почему так и как это исправить?
Объект Delphi Application создает скрытое "application window," и это окно, а не ваша главная форма, отдает команду на показ приложения в свернутом состоянии. Для того, чтобы это обойти, создайте примерно такой обработчик события главной формы OnCreate:
procedure TForm1.FormCreate(Sender: TObject); {$IFDEF WIN32} { Delphi 2-X.0 (32-бит) } var MyInfo: TStartUpInfo; {$ENDIF} begin {$IFDEF WIN32} { Delphi 2-X.0 (32-бит) } GetStartUpInfo(MyInfo); ShowWindow(Handle, MyInfo.wShowWindow); {$ENDIF} {$IFDEF WINDOWS} { Delphi 1.0 (16-бит) } ShowWindow(Handle, cmdShow); {$ENDIF} end; |
Другими словами, для 16-бит достаточно флага cmdShow в ShowWindow. Для 32-бит необходимо получить "StartUp"-информацию вызовом процедуры GetStartUpInfo, которая заполняет запись TStartUpInfo, и затем передать TStartUpInfo.wShowWindow в ShowWindow.
[000270]