Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > API de Windows
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 18/01/2007
fide fide is offline
Miembro
 
Join Date: Oct 2006
Posts: 331
Poder: 20
fide Va por buen camino
Post Componente

Código Delphi [-]
 
  // Sepan que no estoy muy diestro en la creación de componentes pero me  atreví a hacer este con la ayuda de unos amigos una tarde de aurrimiento.
  

   
  //---------------------------------------------------------
   
  unit NotifyBalloon;
   
  interface
   
  uses
    SysUtils,Windows, Classes, ShellApi,Forms,Dialogs;
   
   
  const
     NIF_INFO = $10;
   
   
  type
    TNotifyIcons = (NIIF_NONE , NIIF_INFO ,NIIF_WARNING ,NIIF_ERROR ,NIIF_USER );
   
    TNOTIFYICONDATA = record
      cbSize: DWORD;
      Wnd: HWND;
      uID: UINT;
      uFlags: UINT;
      uCallbackMessage: UINT;
      hIcon: HICON;
      szTip: array [0..127] of AnsiChar;
      dwState: DWORD;
      dwStateMask: DWORD;
      szInfo: array [0..255] of AnsiChar;
      uTimeout: UINT;
      szInfoTitle: array [0..63] of AnsiChar;
      dwInfoFlags: DWORD;
    end;
    TNotifyBalloon = class(TComponent)
   
    private
      FTitle: String;
      FText: String;
      NIcon : Integer;
   
    protected
      { Protected declarations }
       FIcon:  TNotifyIcons;
       Data: TNOTIFYICONDATA;
       procedure SetIcon;
   
    public
      { Public declarations }
       ClientHandle : HWND;
       IconHandle : HWND;
       constructor Create(AOwner: Tcomponent); override;
       procedure ShowNotifyBalloon;
       procedure NotifyIcon;
       procedure DeleteIcon;
    published
      { Published declarations }
       property Icon : TNotifyIcons read FIcon write FIcon;
       property Title : String read FTitle write FTitle ;
       property Text : String read FText write FText ;
   
    end;
   
  procedure Register;
   
  implementation
  {*.res}
  constructor TNotifyBalloon.Create(AOwner : TComponent);
  begin
     inherited Create(AOwner);
     FIcon := NIIF_NONE;
  end;
  procedure TNotifyBalloon.NotifyIcon;
  begin
    FillChar(Data,Sizeof(Data),0);
    with Data do
    begin
      cbSize:= Sizeof(Data);
      Wnd:= ClientHandle;
      uID:= 100;
      uFlags:= NIF_ICON;
      hIcon:= IconHandle;
    end;
   
    Shell_NotifyIcon(NIM_ADD,@Data);
   
  end;
   
  procedure TNotifyBalloon.DeleteIcon;
  begin
    FillChar(Data,Sizeof(Data),0);
    with Data do
    begin
      cbSize:= Sizeof(Data);
      Wnd:= ClientHandle;
      uID:= 100;
      hIcon:= IconHandle;
    end;
    Shell_NotifyIcon(NIM_DELETE, @Data);
   
  end;
   
  procedure TNotifyBalloon.SetIcon ;
  begin
     if FIcon = NIIF_NONE then NIcon := $0;
     if FIcon = NIIF_INFO then NIcon := $1;
     if FIcon = NIIF_WARNING then NIcon := $2;
     if FIcon = NIIF_ERROR then NIcon := $3;
     if FIcon = NIIF_USER then NIcon := $4;
   
  end;
   
  procedure TNotifyBalloon.ShowNotifyBalloon;
  begin
    FillChar(Data,Sizeof(Data),0);
    with Data do
      begin
          cbSize:= Sizeof(Data);
          Wnd:= ClientHandle;
          uID:= 100;
          uFlags := NIF_ICON or NIF_INFO;
          hIcon:= Application.Icon.Handle;
          StrLCopy(szInfoTitle,PChar(FTitle),Sizeof(szInfoTitle)-1);
          StrLCopy(szInfo,PChar(FText),Sizeof(szInfo)-1);
          SetIcon;
          dwInfoFlags := NIcon;
      end;
   
    Shell_NotifyIcon(NIM_MODIFY,@data);
   
  end;
  procedure Register;
  begin
    RegisterComponents('Win32', [TNotifyBalloon]);
  end;
   
   
  end.
   
   
  //---------------------------------------------------------
   
  //Instalar el componente.
   
  //Un ejemplo de llamada
  

procedure TForm1.FormCreate(Sender: TObject);
begin

  with NotifyBalloon do
    begin
      IconHandle := Application.Icon.Handle;
      ClientHandle := Handle;
      NotifyIcon;
    end;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin

 NotifyBalloon.DeleteIcon;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin

 with NotifyBalloon do
  begin
    Icon := NIIF_INFO;
    Title := 'Sugerencia';
    Text := 'Visite http://www.clubdelphi.com para que aprenda el arte de la programación en Delphi.' + #13 +
    'Exponga dudas y sugerencias a todos los foreros del sitio.';
    ShowNotifyBalloon;
  end;

end;


//Si tiene algo que se pueda mejorar díganselo a Roman o a Seoane
Reply With Quote
  #2  
Old 13/02/2007
gtellezv gtellezv is offline
Registrado
 
Join Date: Aug 2006
Posts: 1
Poder: 0
gtellezv Va por buen camino
No me funciona

Hola, use tu codigo instalando el componente y pegando la llamada en un formulario y no me funciona, estoy con delphi 7 y winxp. Te habra faltado algo por ahi?. Gracias y salu2
Reply With Quote
  #3  
Old 31/03/2014
FENIXadr FENIXadr is offline
Miembro
 
Join Date: May 2010
Location: Córdoba - Cba. - Argentina
Posts: 104
Poder: 17
FENIXadr Va por buen camino
Tiempo del Globo

Hola gente estoy utilizando los globos con unos procedimientos que encontré dando vueltas en la red que básicamente son muy parecidos a los que mostró seoane y el inconveniente que tengo es que no puedo hacer que estén "encendidos" indefinidamente, tiene una variable rara con un "TimeOut" pero por mas que le pongas "Infinite" o algún numero grande, el globo se desvanece igual de rápido.. alguna idea??, uso delphi 7

Este es el código...
Está en crudo así que hay constantes que no se usan.. pero no las quité..

desde ya muchas gracias.


Código Delphi [-]

const
  WM_MYMEMO_ENTER = WM_USER + 500;
  WM_ICONTRAY  =    WM_USER + 1;

  NIF_INFO = $10;
  NIF_MESSAGE = 1;
  NIF_ICON = 2;
  NOTIFYICON_VERSION = 3;
  NIF_TIP = 4;
  NIM_SETVERSION = $00000004;
  NIM_SETFOCUS = $00000003;
  NIIF_INFO = $00000001;
  NIIF_WARNING = $00000002;
  NIIF_ERROR = $00000003;

  NIN_BALLOONSHOW = WM_USER + 2;
  NIN_BALLOONHIDE = WM_USER + 3;
  NIN_BALLOONTIMEOUT = WM_USER + 4;
  NIN_BALLOONUSERCLICK = WM_USER + 5;
  NIN_SELECT = WM_USER + 0;
  NINF_KEY = $1;
  NIN_KEYSELECT = NIN_SELECT or NINF_KEY;



  TNewNotifyIconData = record
    cbSize: DWORD;
    Wnd: HWND;
    uID: UINT;
    uFlags: UINT;
    uCallbackMessage: UINT;
    hIcon: HICON;
   //Version 5.0 is 128 chars, old ver is 64 chars
    szTip: array [0..127] of Char;
    dwState: DWORD; //Version 5.0
    dwStateMask: DWORD; //Version 5.0
    szInfo: array [0..255] of Char; //Version 5.0
    DUMMYUNIONNAME: TDUMMYUNIONNAME;
    szInfoTitle: array [0..63] of Char; //Version 5.0
    dwInfoFlags: DWORD;   //Version 5.0
  end;


{ShowBalloonTips procedure carry out the new feature: Balloon Tips}
procedure TForm1.ShowBalloonTips;
var
  TipInfo, TipTitle: string;
begin
  IconData.cbSize := SizeOf(IconData);
  IconData.uFlags := NIF_INFO;
  TipInfo := 'Esto es una prueba del texto que se puede poner en el globo emergente: http://www.ajpdsoft.com';
  strPLCopy(IconData.szInfo, TipInfo, SizeOf(IconData.szInfo) - 1);
  IconData.DUMMYUNIONNAME.uTimeout := 30000;
  TipTitle := 'Este sería el título del globo';
  strPLCopy(IconData.szInfoTitle, TipTitle, SizeOf(IconData.szInfoTitle) - 1);
  IconData.dwInfoFlags := NIIF_INFO;     //NIIF_ERROR;  //NIIF_WARNING;
  Shell_NotifyIcon(NIM_MODIFY, @IconData);
  {in my testing, the following code has no use}
  IconData.DUMMYUNIONNAME.uVersion := NOTIFYICON_VERSION;
  if not Shell_NotifyIcon(NIM_SETVERSION, @IconData) then
    ShowMessage('Ha fallado la creación del icono en la barra de notificación.');
end;
Reply With Quote
  #4  
Old 04/04/2014
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
No tengo la respuesta, pero si haces ese programa, yo seré uno de los que te maldiga eternamente . ¿Por qué quieres que sea indefinido? Ese es el área de notificación y su forma de funcionar es exactamente esa (que se oculte pasado un tiempo). Si necesitas que el usuario pulse para dar conformidad a algo, pon un diálogo ShowModal.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #5  
Old 04/04/2014
FENIXadr FENIXadr is offline
Miembro
 
Join Date: May 2010
Location: Córdoba - Cba. - Argentina
Posts: 104
Poder: 17
FENIXadr Va por buen camino
.... no me odies Lepe.. .. no... la cosa es la siguiente.. me hice una pequeña herramienta que me avisa de los cambios en el registro y me parecio muy prolijo y esteticamente agradable el hecho de mostrar en los globos de la barra de tareas los cambios que se produzcan en el registro de windows, el inconveniente es que si en ese momento no estas presente o por algun motivo no ves el globo, se desvanecera y no te daras cuenta del cambio hasta que decidas ver por tu cuenta la herramienta.. aunque parezca molesto me parece justificado el hecho de mostrar un globo y que hasta que no lo cierres este alertandote del problema.. por el momento voy a implementar un Timer que te avise cada 5 o 10 minutos (no se bien el tiempo aun) de alguna alerta que no hayas corroborado...

saludos.
Reply With Quote
  #6  
Old 05/04/2014
Lepe's Avatar
[Lepe] Lepe is offline
Miembro Premium
 
Join Date: May 2003
Posts: 7,424
Poder: 31
Lepe Va por buen camino
¿Ves? Eso ya me gusta más

También podrías mostrar una pila de avisos (si el usuario no lo ha cerrado o pulsado un botón como que se ha enterado), pones varios avisos unos sobre otros y un botón "leído todos los avisos" o algo así.

De todas formas creo ese programa debe tener un log con todos los avisos que ha detectado. Aunque supongo ya has pensado en ello también.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Reply With Quote
  #7  
Old 05/04/2014
FENIXadr FENIXadr is offline
Miembro
 
Join Date: May 2010
Location: Córdoba - Cba. - Argentina
Posts: 104
Poder: 17
FENIXadr Va por buen camino
si si ... en realidad el globo sería para el último aviso detectado porque va quedando justamente un log con todo el historial de cambios, además el icono de la barra de tareas cambia de color segun el estado..

Saludos.
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Compartir recursos entre Windows Nt Server y Windows 98 fer21unmsm Windows 1 18/07/2006 22:05
Como puedo grabar texto en un Archivo de Texto sin Sobreescribir???? AGAG4 Varios 12 08/11/2005 22:53
Problemas con Windows XP y Windows 98 Aprendiendo Varios 1 20/05/2005 17:28
Generar fichero de texto (Formato MS-DOS vs WINDOWS) apicito Varios 2 05/04/2005 09:47
Poco más de 28000 € por un balón!! __cadetill Noticias 8 24/07/2004 10:05


All times are GMT +2. The time now is 10:20.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi