Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Вниззапустить приложение сразу в tray Найти похожие ветки
← →
Fly` (2006-09-05 03:30) [0]Господа, как сделать так, чтобы приложение при загрузке сразу "оказывалось" в tray? На форме я ставлю CheckBox "при загрузке не показывать", Checked запоминаю в INI. а на onFormShow пытаюсь спрятать окно - ругается. (при активном окне, убирать в трей могу FAQ прочитал ;-)
procedure TForm1.FormShow(Sender: TObject);
begin
if cb_min.Checked then begin Form1.Hide end;
end;
← →
Fay © (2006-09-05 07:02) [1]Application.ShowMainForm ?
← →
Elen © (2006-09-05 07:48) [2][1] +
with nidata do
begin
cbSize := SizeOf(TNotifylconData) ;
Wnd := Self.Handle;
uID := 1;
uFlags := NIF_ICON or NIF_MESSAGE or NIF_TIP;
uCallBackMessage := WM_USER + 123;
hlcon := Application.Icon.Handle;
szTip :="Подсказка";
end;
//и добавляем ее в Трей
Shell_NotifyIcon(NIM_ADD, @nidata);
Гдеnidata :TNotifylconData;
ГдеTNotifylconData = record
cbSize: DWORD;
Wnd: HWND;
uID: UINT;
uFlags: UINT;
uCallbackMessage: UINT;
hlcon: HICON;
szTip: array [0..63] of AnsiChar;
end;
← →
vodvorezlaya (2006-09-05 08:07) [3]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ShellApi, AppEvnts;
const
WM_ICONTRAY = WM_USER + 1;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
private
TrayIconData: TNotifyIconData;
{ Private declarations }
public
procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
with TrayIconData do
begin
cbSize := SizeOf(TrayIconData);
Wnd := Handle;
uID := 0;
uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
uCallbackMessage := WM_ICONTRAY;
hIcon := Application.Icon.Handle;
StrPCopy(szTip, Application.Title);
end;
Shell_NotifyIcon(NIM_ADD, @TrayIconData);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
end;
procedure TForm1.TrayMessage(var Msg: TMessage);
begin
case Msg.lParam of
WM_LBUTTONDOWN:
begin
ShowMessage("Left button clicked - let""s SHOW the Form!");
Form1.Show;
end;
WM_RBUTTONDOWN:
begin
ShowMessage("Right button clicked - let""s HIDE the Form!");
Form1.Hide;
end;
end;
end;
end.
А в файле Progect1.dpr
program Project1;
uses
Forms,
Unit1 in "Unit1.pas" {Form1};
{$R *.res}
begin
Application.Initialize;
Application.ShowMainForm := false;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Годится?
← →
Fly` (2006-09-05 13:54) [4]Гуд, только теперь мне надо прочитать значение чекбокса до создания формы. делаю так :
program Project1;
uses
Forms,
IniFiles,
Unit1 in "Unit1.pas" {Form1};
var
f:TIniFile;
fl:boolean;
{$R *.res}
begin
Application.Initialize;
f:=TIniFile.Create("folder.ini");
fl:=f.ReadBool("form","cb_Min_Checked", false);
Application.ShowMainForm:=not fl;
f.Destroy;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
Не читает :-( ставит всегда значение, которое по умолчанию. В чем глюк !
← →
Elen © (2006-09-05 14:01) [5]
> В чем глюк !
Подумай ЧекБокс на форме которой еше не существует. Сначала создай форму!
← →
Fly` (2006-09-05 14:15) [6]Значение ЧекБокса читается из INI и записывается в INI при создании и дестрое формы при помощи компонента TFormStorage из библиотеки RX. Значения пишутся в folder.ini, который по умолчанию помещен в c:\windows.
Соответственно, для установления значения Application.ShowMainForm мне надо прочитать ini до создания формы, что я и делаю.
← →
Elen © (2006-09-05 14:21) [7]
> Fly`
Ты уверен что в файл правильно все пишется?
← →
Fly` (2006-09-05 14:31) [8]
> Ты уверен что в файл правильно все пишется?
точно! TFormStorage записывает логическую переменную как строку. А я то её читаю не как строку )
Всем спасибо! Разобрался! Всё работает!
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.09.24;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.04 c