Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2012, 01:42   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию сделать форму активной

У меня форма сворачиваетса в трей:
Код:
  procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin
   TrayIcon1.Visible := True;
  Application.MainForm.Hide;


end;
потом я хочу развернуть её:
Код:

procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
  TrayIcon1.Visible := False;
  Application.MainForm.Show;


end;
Но тут появляетса проблема: окно программы показываетса за активным окном на рабочем столе, как сделать так, чтоб окно моей программы было активным?
Pein95 вне форума Ответить с цитированием
Старый 20.07.2012, 03:08   #2
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Попробуйте добавить после вызова метода Show
Код:
SetForegroundWindow(handle)
Где handle указывается окна, которое необходимо поместить на передний план.
kangreon вне форума Ответить с цитированием
Старый 20.07.2012, 04:03   #3
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

не помогло
Pein95 вне форума Ответить с цитированием
Старый 20.07.2012, 07:26   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Application.BringToFront;

Радикальное решение:
Код:
procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
  TrayIcon1.Visible := False;
  Application.MainForm.Show;
 FormStyle:=fsStayOnTop;
 FormStyle:=fsNormal;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2012, 10:01   #5
volvo877
Форумчанин
 
Аватар для volvo877
 
Регистрация: 01.06.2009
Сообщений: 108
По умолчанию

Pein95,
Код:
  TrayIcon1.Visible := False;
  Application.Restore;
  Application.BringToFront;
должно отработать
volvo877 вне форума Ответить с цитированием
Старый 20.07.2012, 14:47   #6
BparHapoga
Пользователь
 
Аватар для BparHapoga
 
Регистрация: 13.07.2012
Сообщений: 11
По умолчанию

Так вроде бы у формы есть свойство "поверх всех окон".
BparHapoga вне форума Ответить с цитированием
Старый 20.07.2012, 17:15   #7
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию

volvo877спасибо помогли)
Но вот новая проблема: после того как я свернул програму в трей, потом развернул и опять хочу её свернуть она не сворачиваетса...
вот исходник:
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls,DateUtils, AppEvnts,REgistry,IniFiles;

type
  TForm1 = class(TForm)
    TrayIcon1: TTrayIcon;
    ApplicationEvents1: TApplicationEvents;
    CheckBox1: TCheckBox;
    Label1: TLabel;
    Edit1: TEdit;
    Timer1: TTimer;

    procedure TrayIcon1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure ApplicationEvents1Minimize(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Edit1Change(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);




  private
    procedure AppIdle(Sender: TObject; var Done: Boolean);


    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  IniFile:Tinifile;
  Reg:Tregistry;
  path:string;

implementation

{$R *.dfm}

procedure TForm1.AppIdle(Sender: TObject; var Done: Boolean);
var
bmp: TBitmap;
DC: HDC;
str:string;
begin
  if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
  begin
    bmp:=TBitmap.Create;

    bmp.Height:=Screen.Height;
    bmp.Width:=Screen.Width;

    DC:=GetDC(0);

    bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    DC, 0, 0, SRCCOPY);
    Str := FormatDateTime('hh_mm_ss', GetTime);

    bmp.SaveToFile(path+datetostr(date)+str+'.png');

    ReleaseDC(0, DC);

    bmp.Free;
  end;
  Done := True;
end;


procedure TForm1.ApplicationEvents1Minimize(Sender: TObject);
begin


   TrayIcon1.Visible := True;

   Application.MainForm.Hide;

end;



procedure TForm1.Edit1Change(Sender: TObject);
begin
   path:=edit1.Text;

end;

procedure TForm1.FormCreate(Sender: TObject);
var
s:string;
b:boolean;
begin


  IniFile:=TiniFile.Create(extractfilepath(Application.ExeName)+'Ini.ini');
  b:=Inifile.ReadBool('Autorun','bool',false);
  if b = true then
    checkbox1.Checked:=true
  else
    checkbox1.Checked:=false;
  edit1.Text:=IniFile.ReadString('path','path','C:/');
  //Application.OnIdle := AppIdle;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  Reg := TRegistry.Create();
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  Reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false);

 if CheckBox1.Checked = true then
 begin
    IniFile.WriteBool('Autorun','bool',true);
    if Reg.ValueExists(ExtractFileName(Application.ExeName))=false then
     Reg.WriteString(ExtractFileName(Application.ExeName),extractfilepath(Application.ExeName)+Application.ExeName);

 end
 else
 begin
    IniFile.WriteBool('Autorun','bool',false);
    Reg.DeleteValue(ExtractFileName(Application.ExeName));
 end;
 IniFile.WriteString('path','path',path);
 IniFile.Free;

end;



procedure TForm1.Timer1Timer(Sender: TObject);
var
bmp: TBitmap;
DC: HDC;
str:string;
done:boolean;
begin
  if GetAsyncKeyState(VK_SNAPSHOT) <> 0 then
  begin
    bmp:=TBitmap.Create;

    bmp.Height:=Screen.Height;
    bmp.Width:=Screen.Width;

    DC:=GetDC(0);

    bitblt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height,
    DC, 0, 0, SRCCOPY);
    Str := FormatDateTime('hh_mm_ss', GetTime);

    bmp.SaveToFile(path+datetostr(date)+str+'.png');

    ReleaseDC(0, DC);

    bmp.Free;
  end;
  Done := True;

end;

procedure TForm1.TrayIcon1Click(Sender: TObject);
begin
  TrayIcon1.Visible := False;
  Application.Restore;
  Application.BringToFront;

end;




end.

Последний раз редактировалось Pein95; 20.07.2012 в 23:00.
Pein95 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать ячейку активной / неактивной по условию Cluster Microsoft Office Excel 10 31.07.2015 09:50
Как сделать активной ячейку? Jrcfyf БД в Delphi 0 20.02.2012 13:10
Сделать неглавную форму активной. Airou C++ Builder 2 09.11.2011 16:54
Как сделать активной новую Книгу? Sergey112233 Microsoft Office Excel 10 24.07.2011 16:00
Как сделать форму всегда активной? londoner Общие вопросы Delphi 3 04.03.2007 14:44