Работа с формами

[назад]


Создание окна программы и других компонентов средствами Windows Получить файл
Анимация: открытия-закрытия, минимизации-восстановления окна Получить файл
Скрыть-показать: форму, закладку в панели задач Получить файл
Не показывать окно по CTRL+ALT+DEL Получить файл
Своя команда в системном меню Получить файл
Поместить на форму рисунок Получить файл


Создание окна программы и других компонентов средствами Windows
Довольно нудный пример, так-что скачайте его и разберитесь дома.
И вообще , тем кто хочет так писать программы лучше заняться C++
Хотя иногда ну просто надо сделать что-нибудь типа этого.
К оглавлению

Анимация: открытия-закрытия, минимизации-восстановления окна

protected
//Для анимации минимизации и восстановления формы
procedure CreateParams(var p: TCreateParams); override;
procedure WMSysCommand(var m: TMessage); message WM_SYSCOMMAND;
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.CreateParams(var p: TCreateParams);
begin
inherited;
p.WndParent := 0;
end;

procedure TForm1.WMSysCommand(var m: TMessage);
begin
m.Result := DefWindowProc(Handle, m.Msg, m.wParam, m.lParam);
end;

procedure TForm1.FormShow(Sender: TObject);
var
A,B : TRect;
Cursor: TPoint;
begin
GetCursorPos(Cursor);
A:= rect(Cursor.x,Cursor.y,0,0);
B:= Form1.BoundsRect;
DrawAnimatedRects(Form1.Handle, 3, A,B);
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
A, B: TRect;
begin
Form1.Visible:=false;
A:= rect(Screen.Width,Screen.Height,0,0);
B:= Form1.BoundsRect;
DrawAnimatedRects(Form1.Handle, 3, B,A);
end;

end.

К оглавлению

Не показывать окно по CTRL+ALT+DEL

В этом примере также реализаван запуск программы без показывания окна
окно становиться видимым через 5 секунд после запуска

var
Form1: TForm1;
i:integer;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Application.ShowMainForm := False; //скрывает форму при старте
Form1.Timer1.Interval:=100;
Form1.Caption:='Форма становиьтся видимой через 5 секунд после запуска';
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
i:=i+1;
if i=50 then begin
Form1.Visible:=True;   // это наиболее короткий способ восстановления
        // видимости окна, но он не всегда может быть применен
        // в том случае если вы хотите заставить быть видимым окно
        // не своей программы то следует воспользоваться
        // методом пирведенным ниже и заключенным в { } на место Application.Handle
        // ставится Handle интересующего вас окна
{ ShowWindow(Application.Handle, SW_RESTORE);
ShowWindow(Application.MainForm.Handle, SW_RESTORE);
begin
for I := 0 to Application.MainForm.ComponentCount -1 do
if Application.MainForm.Components[I] is TWinControl then
with Application.MainForm.Components[I] as TWinControl do
if Visible then
begin
ShowWindow(Handle, SW_SHOWDEFAULT);
for J := 0 to ComponentCount -1 do
if Components[J] is TWinControl then
ShowWindow((Components[J] as TWinControl).Handle, SW_SHOWDEFAULT);
end;
end; }
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_HIDE); //Скрывает закладку в панели задач
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowWindow(Application.Handle, SW_RESTORE); //Восстанавливает закладку в панели задач
end;
end.
К оглавлению

Не показывать окно по CTRL+ALT+DEL

var
Form1: TForm1;
function RegisterServiceProcess(dwProcessID, dwType: Integer): Integer; stdcall; external 'KERNEL32.DLL';
implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
if not (csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID, 1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not (csDesigning in ComponentState) then
RegisterServiceProcess(GetCurrentProcessID, 0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Label1.Caption:='Жмакайте на CTRL ALT DEL и на кнопки на форме секите результат';
end;

end.
К оглавлению

Своя команда в системном меню

private
{ Private declarations }
procedure WMSysCommand(var Message: TWMSysCommand);
message wm_SysCommand;
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

const
cm_MyCommand = $00A0;

procedure TForm1.FormCreate(Sender: TObject);
var
MenuH: HMenu;
procedure AppendIt(MenuH: HMenu);
begin
AppendMenu(MenuH, mf_String, cm_MyCommand, 'моя команда...');
end;
begin
MenuH := GetSystemMenu(Handle, False);
AppendIt(MenuH);
MenuH := GetSystemMenu(Application.Handle, False);
AppendIt(MenuH);
end;

procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
case Message.CmdType of
cm_MyCommand: ShowMessage('Нажата!');
else
inherited;
end;
end;
К оглавлению

Поместить на форму рисунок

var
Form1: TForm1;
bmp: TBitMap;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
begin
bmp := TBitMap.Create;
Bmp.Width := form1.Width;
BMp.Height := form1.Height;
bmp.LoadFromFile('exempl.bmp');
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
{Рисуем}
Canvas.Draw(0,0, bmp)
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
bmp.Free;
end;
end.
К оглавлению