Ir para conteúdo
Fórum Script Brasil
  • 0

System Tray No Delphi 7


Guest danker

Pergunta

ola pessoal estou fazendo um aplicativo que dentre seus procedimentos, ele tambem esconderiaseu icone na system-tray! Consegui este codigo que teóricamente faria isso porem no meu delphi 7 ele não funciona na parte em que se refere ao clicar do mouse no icone quando esta na system-tray ele informa:

[Error] Unit1.pas(16): Undeclared identifier: 'WM_TRAYICON'

[Error] Unit1.pas(16): Illegal message method index

[Error] Unit1.pas(22): Identifier redeclared: 'WM_TRAYICON'

[Error] Unit1.pas(39): Statement expected but 'VAR' found

[Error] Unit1.pas(44): Undeclared identifier: 'Self'

este é o código...

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, shellapi;

type

TForm1 = class(TForm)

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure IdTrivialFTP1Status(ASender: TObject;

const AStatus: TIdStatus; const AStatusText: String);

private

{ Private declarations }

procedure WMTrayIcon(var Msg : TMessage); message WM_TRAYICON;

public

{ Public declarations }

end;

Const

WM_TRAYICON = WM_USER+1;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

begin

Action := caNone;

Hide;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

var NotifyIconData : TNotifyIconData;

begin

Application.ShowMainForm := False;

with NotifyIconData do begin

cbSize := sizeof(TNotifyIconData);

Wnd := Self.Handle;

uId := 0;

uCallBackMessage := WM_TRAYICON;

uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;

hIcon := Application.Icon.Handle;

szTip := 'Teste de TryIcon';

end;

Shell_NotifyIcon(NIM_ADD,@NotifyIconData);

end;

end;

procedure TForm1.FormDestroy(Sender: TObject);

var

NotifyIconData : TNotifyIconData;

begin

with NotifyIconData do begin

cbSize := sizeof(TNotifyIconData);

Wnd := Self.Handle;

uId := 0;

uFlags := 0;

end;

Shell_NotifyIcon(NIM_DELETE,@NotifyIconData);

end;

procedure TForm1.WMTrayIcon(var Msg: TMessage);

var

Pt : TPoint;

begin

if Msg.lParam = WM_RBUTTONDOWN then begin

GetCursorPos(Pt);

PopupMenu1.Popup(Pt.X,Pt.Y);

end

else if Msg.lParam = WM_LBUTTONDBLCLK then

Form1.Show;

end;

caso algue possa me ajudar?...

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Opa

O correto seria

unit Unit1;

interface

uses
  Windows,
  Forms,
  Messages,
  ShellAPI;

Const
  WM_TRAYICON = WM_USER + 1;

type
  TForm1 = class(TForm)
    procedure FormDestroy(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    procedure WMTrayIcon(var Msg: TMessage); message WM_TRAYICON;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Action := caNone;
  Hide;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  NotifyIconData: TNotifyIconData;
begin
  Application.ShowMainForm := False;
  with NotifyIconData do
  begin
    cbSize := sizeof(TNotifyIconData);
    Wnd := Self.Handle;
    uId := 0;
    uCallBackMessage := WM_TRAYICON;
    uFlags := NIF_ICON or NIF_TIP or NIF_MESSAGE;
    hIcon := Application.Icon.Handle;
    szTip := 'Teste de TryIcon';
  end;
  Shell_NotifyIcon(NIM_ADD,@NotifyIconData);
end;

procedure TForm1.FormDestroy(Sender: TObject);
var
  NotifyIconData: TNotifyIconData;
begin
  with NotifyIconData do
  begin
    cbSize := sizeof(TNotifyIconData);
    Wnd := Self.Handle;
    uId := 0;
    uFlags := 0;
  end;
  Shell_NotifyIcon(NIM_DELETE,@NotifyIconData);
end;

procedure TForm1.WMTrayIcon(var Msg: TMessage);
var
  Pt: TPoint;
begin
  if Msg.lParam = WM_RBUTTONDOWN then
  begin
    GetCursorPos(Pt);
    PopupMenu1.Popup(Pt.X,Pt.Y);
  end
  else
  if Msg.lParam = WM_LBUTTONDBLCLK then
  Form1.Show;
end;
Quanto aos erros que apareceu pra voce... [Error] Unit1.pas(16): Undeclared identifier: 'WM_TRAYICON' É porque em private estava chamando essa constante e a mesma estava declarada abaixo então ele não a encontrava... coloquei acima de type... [Error] Unit1.pas(39): Statement expected but 'VAR' found
procedure TForm1.FormCreate(Sender: TObject);
begin // <-- Erro
var NotifyIconData : TNotifyIconData;
begin

Qualquer variavel declarada deve estar acima de begin e você estava declarando

abaixo de um begin e chamando outro...

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Guest danilo ms

VALEU DESSA VEZ FUNCIONO!

EM RELAÇÃO AOS ERROS DO BEGIN É POR QUE COPIEI E COLEI NO RELAXO ! RSRSRS

MAS SOBRE A CONSTANTE VIR ANTES DO TYPE EU NÃO SABIA, OBRIGADO!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...