Идёт загрузка страницы...

htp://aptem.net.ru





Чтение флажка "Run Minimized"

Решение 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]