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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2009, 07:58   #1
dardreams
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 20
Лампочка Вопрос про TrayIcon

Код:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, CoolTrayIcon,syncobjs, StdCtrls,ShellApi;

type
  TfmMain = class(TForm)
    Tray: TCoolTrayIcon;
    lbProcess: TListBox;
    procedure FormCreate(Sender: TObject);
    procedure TrayBalloonHintClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure TrayBalloonHintHide(Sender: TObject);
    procedure TrayBalloonHintTimeout(Sender: TObject);
    procedure TrayMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure TrayClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  fmMain: TfmMain;
  CheckEvent: TEvent;
  d:String;

implementation

{$R *.dfm}


Procedure Restart;
begin
  ShellExecute(Application.Handle,'open', PChar(Application.ExeName), nil, nil, SW_SHOWNOACTIVATE) ;
  Application.Terminate;
end;

function Parameters: string;
var
  P: PChar;
begin
  P := GetCommandLine;
  if P^ = '"' then
  begin
    Inc(P);
    P := StrPos(P, '"');
    Inc(P);
  end
  else
    P := StrPos(P, ' ');
  Inc(P);
  Result := P;
end;

procedure TfmMain.FormCreate(Sender: TObject);
var x,y,z,w,s:byte;
    n,c,b,t:string;
begin
 WinExec('tskill baloon.exe',0); // Это просто убивает процесс, а иконка в трее продолжает висеть, как сделать что бы эта иконка тоже убивалась ?
z := Pos('@',Parameters)+1;
s := Pos('~',Parameters)+1;
x := Pos('%',Parameters)+1;
y := Pos('$',Parameters)+1;
w := Pos('#',Parameters)+1;

b := copy(Parameters,z,s-z-1);
c := copy(Parameters,s,x-1-4);
n := copy(Parameters,x,y-1-length(b)-Length(c)-4);
d := copy(Parameters,y,w-length(b)-length(c)-length(n)-6);
t := copy(Parameters,w,Length(b)+1);

if b='w' then Tray.ShowBalloonHint(c,n,bitWarning,StrToInt(t));
if b='i' then Tray.ShowBalloonHint(c,n,bitInfo,StrToInt(t));
if b='e' then Tray.ShowBalloonHint(c,n,bitError,StrToInt(t));
if b='n' then Tray.ShowBalloonHint(c,n,bitNone,StrToInt(t));
//ShowMessage(b+#13+c+#13+n+#13+d+#13+t);
end;

procedure TfmMain.TrayBalloonHintClick(Sender: TObject);
begin
WinExec(Pchar(d),1);
Tray.IconVisible:=false;
fmMain.Close;
end;

procedure TfmMain.FormShow(Sender: TObject);
begin
ShowWindow(Application.Handle,0);
ShowWindow(Handle, SW_SHOWNOACTIVATE);
end;

end.
Как видно из исходного текста это программа берет параметр командной строки и показывает сообщения определенного типа, но когда вызываются 2 и более раза возникает слишком много значков в трее,
Как закрыть иконку пред идущего приложения ?
dardreams вне форума Ответить с цитированием
Старый 16.04.2009, 10:26   #2
Олвин
Экспериментатор
Форумчанин
 
Аватар для Олвин
 
Регистрация: 16.04.2008
Сообщений: 218
По умолчанию

Можно в событии OnDestroy иконку удалять, только как делается это удаление, я не помню.
Для создания сложных вещей не нужны сложные интерфейсы. (с) Линус Торвальдс
Олвин вне форума Ответить с цитированием
Старый 16.04.2009, 10:28   #3
dardreams
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Олвин Посмотреть сообщение
Можно в событии OnDestroy иконку удалять, только как делается это удаление, я не помню.
Была у меня такая мысль, но OnDestroy не отлавливает после WineExec('tskill baloon',0);
dardreams вне форума Ответить с цитированием
Старый 16.04.2009, 11:55   #4
dardreams
Пользователь
 
Регистрация: 19.02.2009
Сообщений: 20
Подмигивание РЕШЕНО!

Вопрос снят, я нашел выход довольно хитрым и возможно некрасивым, но главное рабочим способом.
кому интересно вот этот код вставил в начале события OnCreate:
Код:
try
Reg:=TRegistry.Create;
reg.RootKey:=HKEY_LOCAL_MACHINE;
reg.OpenKey('\software\program\baloon\',true);
pid:=reg.ReadString('Handle');
h:=FindWindow(nil,'Baloon');
reg.WriteString('Handle',IntToStr(h));
reg.CloseKey;
SendMessage(StrToInt(pid),WM_CLOSE,0,0);
except
end;
dardreams вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос про WM_CTLCOLORSTATIC yngwie Win Api 0 01.03.2009 14:34
Вопрос наверное про функции, а так точно даже не знаю про что. (Вопрос начинющего #6) Albert2008 Общие вопросы Delphi 4 21.08.2008 15:33
вопрос про IP ЧИЖ Работа с сетью в Delphi 1 23.06.2008 13:53
У меня вопрос про базы данных,а точнее про таблицы!!! Alexij Общие вопросы Delphi 1 13.04.2008 23:24