Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Balón de texto de Windows. (https://www.clubdelphi.com/foros/showthread.php?t=38586)

fide 19-12-2006 21:54:06

Balón de texto de Windows.
 
Hola, en realidad lo que necesito es como mostrar un balón de texto de los que muestra Windows pero mediante una aplicación en delphi. Si me pueden enviar un ejemplo a fide1988man@yahoo.es o decirme donde puedo encontrar un ejemplo se los agradecería.

Gracias de nuevo amigos.

seoane 19-12-2006 22:18:10

Cita:

Empezado por fide
Si me pueden enviar un ejemplo a fide1988man@yahoo.es

Por favor, respeta la guia de estilo y no pidas que te envíen la información a tu email. Piensa que la razón de ser de un foro es el de compartir las respuestas con todos los usuarios.

Y volviendo al tema de tu pregunta, ¿Que versión de delphi utilizas?. Porque según la versión que utilices, puede que tengas que implementar tu todo el código, que ya dispongas de un componente para mostrar el icono en la barra de tareas, e incluso en la ultimas versiones, el mismo componente se encarga de mostrar los globos.

fide 24-12-2006 12:46:38

Respondiendo
 
Hola, y disculpas por lo del email. El problema es que no había leido la guía de estilos.

Volviendo al balon, uso delphi 5.

fide 24-12-2006 12:50:17

Respondiendo 2
 
Ha, y si pueden decirme como encontrar un componente que haga eso o ayudarme a crear uno se los agradecería.

Gracias a todos de antemano amigos.

dec 24-12-2006 13:04:26

Hola,

¿Te refieres a los "balones" que se muestran en los iconos de la Bandeja del Sistema o te refieres a los que aparecen en distintos controles de los formularios de las aplicaciones? En todo caso busca en Torry's.

seoane 24-12-2006 13:15:41

Hola fide, según creo la versión de delphi que utilizas no cuenta con ningún componente como el que necesitamos, aunque no estoy seguro porque nunca he trabajado con esa versión. De todas formas si es un componente lo que buscas, seguro que en esta pagina encontraras varios http://www.torry.net/

Ahora bien, si lo quieres crear por código, no resulta muy difícil:
Código Delphi [-]
// Lo primero es añadir ShellApi a las uses
uses ShellApi;

// Y el tipo TNOTIFYICONDATA que ne versiones anteriores no esta completo
type
  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;

//Para crearalo
procedure TForm1.FormCreate(Sender: TObject);
var
  Data: TNOTIFYICONDATA;
begin
  FillChar(Data,Sizeof(Data),0);
  with Data do
  begin
    cbSize:= Sizeof(Data);
    Wnd:= Handle;
    uID:= 100;
    uFlags:= NIF_ICON;
    hIcon:= Application.Icon.Handle;
  end;
  Shell_NotifyIcon(NIM_ADD,@Data);
end;

// Para destruirlo
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var
  Data: TNOTIFYICONDATA;
begin
  FillChar(Data,Sizeof(Data),0);
  with Data do
  begin
    cbSize:= Sizeof(Data);
    Wnd:= Handle;
    uID:= 100;
  end;
  Shell_NotifyIcon(NIM_DELETE, @Data);
end;

// Para mostrar un mensaje
procedure TForm1.MostrarBalon(Titulo, Texto: String);
var
  Data: TNOTIFYICONDATA;
begin
  FillChar(Data,Sizeof(Data),0);
  with Data do
  begin
    cbSize:= Sizeof(Data);
    Wnd:= Handle;
    uID:= 100;
    uFlags:= NIF_ICON or NIF_INFO;
    hIcon:= Application.Icon.Handle;
    StrLCopy(szInfoTitle,PChar(Titulo),Sizeof(szInfoTitle)-1);
    StrLCopy(szInfo,PChar(Texto),Sizeof(szInfo)-1);
    dwInfoFlags:= NIIF_INFO;
  end;
  Shell_NotifyIcon(NIM_MODIFY,@Data);
end;

// Por ejemplo
MostrarBalon('Titulo','Hola mundo');

fide 24-12-2006 13:56:08

Balon de texto.
 
Hola seoane, tu siempre ayudando man. Muchas gracias. Todo me fue de marabillas. El unico detalle es que en la función que me disate no me mostraba los icono. Alberto me ayudo en eso y me dio todas las constantes apara los íconos de los balones. Muchas gracias de nuevo y

== Felíz Año Nuevo man y suerte ==

Alcolea 28-12-2006 03:26:31

Cita:

Empezado por fide
Hola seoane, tu siempre ayudando man. Muchas gracias. Todo me fue de marabillas. El unico detalle es que en la función que me disate no me mostraba los icono. Alberto me ayudo en eso y me dio todas las constantes apara los íconos de los balones. Muchas gracias de nuevo y

== Felíz Año Nuevo man y suerte ==

Amigo fide, como a ti me sucede que hay problemas con los iconos, ¿
cuales son esas constantes, por favor?

seoane 28-12-2006 03:54:15

:confused: No comprendo, cuando decís que no muestra los iconos ¿de que iconos estáis hablando?. Solo es curiosidad, porque a mi el código que puse me funciona perfectamente.

roman 28-12-2006 05:31:30

Al parecer en Delphi7- no sólo la estructura TNotifyIcon está incompleta para la versión más reciente del shell, sino que también se omiten algunas constantes que usas en tu código. Supongo que es a lo que se refieren e imagino que fide olvidó compartirlo ("regaño" suave para fide :p).

Estas son las constantes:

Código Delphi [-]
const
  NIF_INFO = $10;

  NIIF_NONE = $0;
  NIIF_INFO = $1;
  NIIF_WARNING = $2;
  NIIF_ERROR = $3;
  NIIF_USER = $4;
  NIIF_NOSOUND = $10;

// Saludos

Alcolea 28-12-2006 05:38:41

Debe faltar algo que no he puesto, pero no me funciona lo del balón con el ejemplo que pusiste, más bajé los componentes que sujeriste y es con esto con lo que puedo hacer lo del balón. (no sale el balón pero si el icono)

Seguiré intentando, gracias por la ayuda.

Alcolea 28-12-2006 05:59:54

Un último consejo sobre esto del balón, ¿en que evento aconsejaría usarlo, por ejemplo, para un Edit ? lo he probado con OnMouseMove, OnMouseDown y otros, y todos me resultan molestos ya que al menos estos dos que menciono se repiten constantemente cada ves que se trata de acceder al control por el usuario.

seoane 28-12-2006 11:56:20

Cita:

Empezado por roman
Al parecer en Delphi7- no sólo la estructura TNotifyIcon está incompleta para la versión más reciente del shell, sino que también se omiten algunas constantes que usas en tu código.

:p Es verdad, no me acorde de incluir las constantes. Y eso que un tema anterior, si que me acordaba de incluirlas.

Lepe 28-12-2006 12:37:58

Dependerá del componente, hay algunos que pueden suplantar el OnHint de delphi, quizás sea el mejor momento para mostrarlo.

Por código, suelo usarlo para mostrar errores / información / aviso a los usuarios, olvidando el MessageBox y el ShowMessage.

Saludos

roman 28-12-2006 19:29:22

No sé por qué, pero a mi me da la impresión de que en este hilo se ha estado hablando de dos cosas distintas. Por un lado están los iconos en la bandeja del sistema con un hint en forma de balón, que es de lo que trata el código de seoane, y por otro están los balones que funcionen como hint sobre algún otro control. Que yo sepa no es lo mismo, ¿o sí?

// Saludos

Lepe 29-12-2006 11:16:03

Tienes toda la razón roman, no había visto el código de seoane para el mostrar el balon.

Yo uso el de la JVCL para mostrarlo sobre cualquier control, con posibilidad de sustituir al Hint.

Saludos

fide 31-12-2006 20:52:29

Confusión
 
Bueno, bueno, en este hilo lo que yo pretendía desarrollar es el balón de texto que se imprime cuando por ejemplo, Windows no tiene antivirus o el Firewall no está activo.

[Puede que se equipo esté en riesgo, se a cuerdan????]

O sea, es mismo que me explico seoane y que solo funciona en Windows 2000 o XP.

Aunque me interesa eso de mostrar ese mismo balón sobre los controles de las ventanas.

¿Cómo lo hacen?

Lepe 01-01-2007 04:27:19

En mi caso, tienes que instalar la JVCL (más de 600 controles para delphi), aunque también lo podrás en torrys.net buscando por Balloon o BalloonHint

Saludos

fide 09-01-2007 12:27:09

Comp
 
Amigos, gracias a la ayuda que me han brindado he logrado desarrollar un componente bello para imprimir el dichoso balón de texto. Le he puesto como nombre de la clase TNotifyBalloon y contiene las propiedades
  • Title
  • Text
  • Icon

Quiero seguir mejorándolo para incluirle incluso nuevos eventos y cosas buenas. Dentro de poco les pongo la Unit para que la analicen y me ayuden a mejorarlo.

Ha, importante. Si alguien sabe como hacer que el baloncito se pueda notificar también sobre cualquier control del formulario nos lo puede comunicar a mi y a todos los de este foro para mejorar el componente.

Y ya que fue gracias a Seoane y Roman principalmente que hice este componente en el About ellos tendrán su buen lugar. Jeje je.

fide 18-01-2007 10:33:26

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


La franja horaria es GMT +2. Ahora son las 05:13:43.

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