IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Delphi Discussion :

Maitriser l'infobulle de windows dans la barre des taches


Sujet :

Delphi

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut Maitriser l'infobulle de windows dans la barre des taches
    Bonjour,

    J'aimerais afficher un message d'alerte windows (les jaunes, ceux du style: "Il vous reste 10 jours pour activer windows").

    Je sais qu'il existe un composant dans la jdvc mais j'aimerais passer outre.

    Y a t-il un autre moyen que de créer une form qui y ressemble ?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    voir le post


    et voila un code que j'ai fournie il ya quelque temps
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    uses
       Commctrl;
     
    procedure ShowBalloonTip(hWnd: THandle; Icon: integer; Title: pchar; Text: PWideChar;
    BackCL, TextCL: TColor;dwDuration : DWORD;Itime : longint =0);
    const
      TOOLTIPS_CLASS = 'tooltips_class32';
      TTS_ALWAYSTIP = $01;
      TTS_NOPREFIX = $02;
      TTS_BALLOON = $40;
      TTF_SUBCLASS = $0010;
      TTF_TRANSPARENT = $0100;
      TTF_CENTERTIP = $0002;
      TTM_ADDTOOL = $0400 + 50;
      TTM_SETTITLE = (WM_USER + 32);
      ICC_WIN95_CLASSES = $000000FF;
    type
      TOOLINFO = packed record
        cbSize: Integer;
        uFlags: Integer;
        hwnd: THandle;
        uId: Integer;
        rect: TRect;
        hinst: THandle;
        lpszText: PWideChar;
        lParam: Integer;
      end;
    var
      hWndTip: THandle;
      ti: TOOLINFO;
     
    begin
      hWndTip := CreateWindow(TOOLTIPS_CLASS, nil,
        WS_POPUP or TTS_NOPREFIX or TTS_BALLOON or TTS_ALWAYSTIP,
        0, 0, 0, 0, hWnd, 0, HInstance, nil);
      if hWndTip <> 0 then
      begin
        SetWindowPos(hWndTip, HWND_TOPMOST, 0, 0, 0, 0,
          SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
        ti.cbSize := SizeOf(ti);
        ti.uFlags := TTF_CENTERTIP or TTF_TRANSPARENT or TTF_SUBCLASS;
        ti.hwnd := hWnd;
        ti.lpszText := Text;
        Windows.GetClientRect(hWnd, ti.rect);
        SendMessage(hWndTip, TTM_SETTIPBKCOLOR, BackCL, 0);
        SendMessage(hWndTip, TTM_SETTIPTEXTCOLOR, TextCL, 0);
        SendMessage(hWndTip, TTM_ADDTOOL, 1, Integer(@ti));
        SendMessage(hWndTip, TTM_SETTITLE, Icon mod 4, Integer(Title));
        SendMessage(hWndTip, TTM_SETDELAYTIME,dwDuration,Itime);
      end;
    end;
    @+ Phil

  3. #3
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour anapurna,

    De quel post parles tu ?

    J'ai fait des recherches (vant de poster bien sur), et je n'ai vu que ça:
    http://www.developpez.net/forums/sho...obulle+windows

    Seulement, il n'y a pas la réponse que je cherche.

  4. #4
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je n'arrive pas à le faire marcher:

    ShowBalloonTip(self.Handle, 0,'test','Bonjour',clYellow,clBlack,2);

    Je l'ai mise dans une unité, pour les uses:
    Commctrl, Graphics, Types, Windows, Messages;

  5. #5
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    il faut faire une recherche avec le mot hint
    et tu trouve ceci

    http://www.developpez.net/forums/sho...highlight=hint

    et pour mon post c'est avec tooltips

    @+ Phil
    [edit]
    qu'est ce qui marche pas

    sinon voila le code fournie par m$oft
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    hwndToolTips = CreateWindow(TOOLTIPS_CLASS,
                                NULL,
                                WS_POPUP | TTS_NOPREFIX | TTS_BALLOON,
                                0, 0,
                                0, 0,
                                NULL, NULL,
                                g_hinst,
                                NULL);
    if (hwndTooltip)
    {
    // Do the standard ToolTip coding. 
        TOOLINFO ti;
     
        ti.cbSize = sizeof(ti);
        ti.uFlags = TTF_TRANSPARENT | TTF_CENTERTIP;
        ti.hwnd = hwnd;
        ti.uId = 0;
        ti.hinst = NULL;
        ti.lpszText = LPSTR_TEXTCALLBACK;
     
        GetClientRect(hwnd, &ti.rect);
        SendMessage(hwndToolTips, TTM_ADDTOOL, 0, (LPARAM) &ti );
    }
    [/edit]

  6. #6
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Ok, j'ai vu ton post...
    Seulement, ça ne m'aide pas à le faire marcher:
    hWnd: THandle; attend quoi ? Un nouveau handle ou celui qui le lance ?

    et Icon: integer, c'est quoi exactement ? l'icone qui s'affichera dedans ?

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 435
    Points : 5 848
    Points
    5 848
    Par défaut
    salut

    hwnd = l'handle de trayIconbarre de windows
    icone = l'handle de l'icone si je me souvient bien
    mais bon tu n'est pas obliger de te servir de la fonction tels quel

    le message le plus important etant celui-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SendMessage(hwndToolTips, TTM_ADDTOOL,...

    @+ Phil

  8. #8
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Aie,

    En fait, je ne passe pas par un composant pour afficher mon icone... Je fait comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    procedure TfrmMain.AjouteIcone;
    var i: integer;
      Info: TNotifyIconData;
    begin // If faut tout d'abord remplir la structure Info avec ce que l'on veut faire
      For i:=0 to 5 Do LesIcones[i]:=ExtractIcon(Application.Handle,PChar(Application.exename),i);
      IconeEnCours:=0; // L'icone est ajoutée dans la barre des taches
      Info.cbSize := SizeOf(Info); // cbSize doit contenir la taille de la structure
      Info.Wnd := Handle; // Wnd doit contenir le Handle de la fenêtre qui recevra les messages de notification d'évènement de la souris
      // uID Numéro d'icone, c'est utile si plusieurs icones sont affichées en
      // simultannées dans la barre des taches. Car c'est ce numéro qui permettra ensuite de modifier celle que l'on veut.
      Info.uID := 1;
      Info.szTip := 'GT_1504'; // szTip contient le texte de l'info bulle affiché au dessus de l'icone
      Info.hIcon  := LesIcones[IconeEnCours]; // hIcon contient le handle de l'icone qui doit être affichée
      // uCallBackMessage contient le message qui sera retourné à la fenêtre donnée par Wnd quand un évènement de souris apparait sur l'icone
      Info.uCallbackMessage := WM_MONICONE;
      // uFlags doit contenir le liste des champs utilisés dans la structure parmis les champs szTip,hIcon et uCallBackMessage
      Info.uFlags := NIF_TIP Or NIF_ICON Or NIF_MESSAGE;
      Shell_NotifyIcon(NIM_ADD,@Info); // Appel de la fonction API ajoutant l'icone
    end;
    Je n'ai donc pas de handle mais simplement:
    LesIcones :Array[0..5]Of HICON; // Ce tableau regroupe est Handles des icones extraites du fichier
    IconeEnCours :Integer; // Numero dans le tableau ci-dessus de l'icone actuellement affichée

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bon, j'ai réussi à faire marcher ton code sur un bouton (et non sur l'icone comme désiré), seulement, le comportement n'est pas celui désiré.

    En effet, une fois le script lancé, le popup ne s'affiche pas automatiquement mais seulement lors de l'evenement onMouseOver.

    Je voudrais (tout comme le popup windows) que quand j'ai un message à dire, le popup s'affiche tant de temps ou jusqu'à ce que l'utililsateur clique dessus par exemple.

    Comment changer ce comportement ?

Discussions similaires

  1. [Windows 7] Changer l'icône dans la barre des taches ?
    Par Darel dans le forum Général Python
    Réponses: 1
    Dernier message: 19/08/2011, 18h53
  2. Réponses: 5
    Dernier message: 10/11/2009, 13h32
  3. Afficher une variable dynamique dans la barre des taches de windows
    Par mustang-ffw02 dans le forum Windows Forms
    Réponses: 16
    Dernier message: 27/05/2007, 23h24
  4. Réponses: 4
    Dernier message: 26/02/2007, 13h20
  5. empecher affichage du programme dans la barre des tache windows
    Par Jérémy Lefevre dans le forum wxWidgets
    Réponses: 3
    Dernier message: 31/01/2007, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo