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 :

Épingler une application Delphi dans la barre des tâches de Windows


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Maintenance nucléaire
    Inscrit en
    Janvier 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maintenance nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 107
    Par défaut Épingler une application Delphi dans la barre des tâches de Windows
    Salut à tous,

    Je souhaiterais pouvoir épingler mes applications dans la barre des tâches de Windows 7.

    J'ai trouvé ce tutoriel très intéressant : http://fsoriano.developpez.com/artic...hi-2010/#LII-A

    J'ai traité le 1er chapitre II-A. Initialisation préalable sans trop de problème.

    En revanche, je n'ai pas trouvé d'informations concernant la possibilité d'épingler le programme dans la barre de tâches.

    En effet, le chapitre II-B-2. Epinglé, Fréquent, Récent évoque la possibilité d'épingler des documents associés à cette application dans la barre des tâches mais pas l'application elle-même.
    J'ai peut être mal vu.

    Comment puis-je m'y prendre ?

    Naga

    Édit : Je suis sur Delphi XE2

  2. #2
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 510
    Par défaut
    Bonjour,

    voici un exemple simple d'application réduite dans la barre de tâche :

    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
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    unit Main;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, ShellApi ;
     
      Const
       WM_ICONTRAY = WM_USER + 1  ;
     
    type
      TMainForm = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
     
      private
        { Déclarations privées }
        TrayIconData: TNotifyIconData;
      public
        { Déclarations publiques }
        procedure TrayMessage(var Msg: TMessage); message WM_ICONTRAY;  end;
     
    var
      MainForm: TMainForm;
     
    implementation
     
    {$R *.dfm}
     
    { ============================================================== }
    procedure TMainForm.FormCreate(Sender: TObject);
    begin
    with TrayIconData do
      begin
        cbSize := SizeOf(TrayIconData);
        Wnd := Handle;
        uID := 0;
        uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
        uCallbackMessage := WM_ICONTRAY;
        hIcon := Application.Icon.Handle;
        StrPCopy(szTip, Application.Title);
      end;
     
      Shell_NotifyIcon(NIM_ADD, @TrayIconData);
    end;
    { ============================================================== }
    procedure TMainForm.FormDestroy(Sender: TObject);
    begin
      Shell_NotifyIcon(NIM_DELETE, @TrayIconData);
    end;
    { ============================================================== }
    procedure TMainForm.TrayMessage(var Msg: TMessage);
    begin
      case Msg.lParam of
        WM_LBUTTONDOWN:
        begin
          ShowMessage('Afficher la fenêtre principale');
          MainForm.Show;
        end;
        WM_RBUTTONDOWN:
        begin
          ShowMessage('Cacher la fençetre principale');
          MainForm.Hide;
        end;
      end;
    end;
    { ============================================================== }
     
    end.
    pour réduire l'application au démarrage, dans le projet, il faut mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program Systray;
     
    uses
      Forms,
      Main in 'Main.pas' {MainForm};
     
    {$R *.res}
     
    begin
      Application.Initialize;
      Application.ShowMainForm := False;
      Application.CreateForm(TMainForm, MainForm);
      Application.Run;
    end.
    Ensuite reste à créer un menu pour gérer différentes action depuis le clic gauche ou droit

    A+ Charly

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Naga2 Voir le message
    En effet, le chapitre II-B-2. Epinglé, Fréquent, Récent évoque la possibilité d'épingler des documents associés à cette application dans la barre des tâches mais pas l'application elle-même.
    J'ai peut être mal vu.
    Je crois avoir lu un article ou tu donnais certaines extensions et effectivement c'était Windows qui gérait les "documents récents" quand tu fais un clic droit sur l'icône.

    Après comme indiqué par Charly910 tu peux utiliser le Tray menu pour la réduire, lors du clic droit tu peux ouvrir ce que tu veux.

  4. #4
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    Les raccourcis épinglés dans la barre des taches (ceux dont l'icone reste présente quand ton programme n'est pas démarré) se trouvent ici :
    %appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBarJe pense que tu peux simplement y ajouter le raccourci de ton appli pour l'y faire apparaître.

  5. #5
    Membre émérite
    Avatar de Cirec
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 467
    Par défaut
    Salut,

    Citation Envoyé par guillemouze Voir le message
    Les raccourcis épinglés dans la barre des taches (ceux dont l'icone reste présente quand ton programme n'est pas démarré) se trouvent ici :
    %appdata%\Microsoft\Internet Explorer\Quick Launch\User Pinned\TaskBarJe pense que tu peux simplement y ajouter le raccourci de ton appli pour l'y faire apparaître.
    les raccourcis sont effectivement placés dans ce répertoire mais c'est un petit peu plus "compliqué" que ça ... si tu y places ton raccourci il n'apparaitra pas dans la barre des tâches mais dans le menu démarrer
    en fait les raccourcis de programmes épinglés sont différent des "simples" raccourcis ils contiennent des informations supplémentaires ... j'ai pas approfondi la chose. J'ai juste comparé un simple raccourci à un raccourci épinglé (les deux créés par windows) ils sont totalement différents!

    je propose donc un code qui fonctionne chez moi (D7 et win7)
    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
    uses ComObj;
     ...
      {fonction servant à épingler ou retirer un programme à la barre des tâches}
    function PinToTaskbar(const aFileName: TFileName; const UnPin: Boolean = False):  Boolean;
    const
      Verbs: array[Boolean] of string = ('taskbarpin', 'taskbarunpin');
    var
      FDir, FName: string;
      FShellApp  : Variant;
    begin
      Result := False;
      if FileExists(aFileName) then try
        FDir := ExtractFileDir(aFileName);
        FName := ExtractFileName(aFileName);
        FShellApp := CreateOleObject('Shell.Application');
        try
          FShellApp.NameSpace(Variant(FDir)).Parsename(Variant(FName)).invokeverb(Variant(Verbs[UnPin]));
          Result := True;
        except on E: Exception do
          begin
            MessageDlg(Format('Une erreur %s avec le message : %s'#13#10'est survenue', [E.ClassName, E.Message]), mtINFORMATION,
              [mbOk], 0);
          end;
        end;
      finally
        FShellApp := Unassigned;
      end;
    end;
    utilisation pour épingler la calculatrice:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PinToTaskbar('c:\windows\system32\calc.exe')
    et pour la retirer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PinToTaskbar('c:\windows\system32\calc.exe', True)
    en espérant que ça aidera

    Cordialement,
    Cirec

  6. #6
    Membre confirmé
    Homme Profil pro
    Maintenance nucléaire
    Inscrit en
    Janvier 2007
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Maintenance nucléaire
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 107
    Par défaut
    Salut à tous,

    Déjà désolé de ne pas être venu vous répondre plutôt, j'ai eu une semaine un peu chargée.

    Je vais répondre à chacun de vos messages :

    @Charly910 :
    Je ne suis pas très sur d'avoir compris ton exemple.
    En fait il s'agirait d'une fonctionnalité intégrée dans le programme qui permettrait de le réduire dans les icônes systray (à coté de l'horloge) ?
    Ce n'est pas mon objectif (mais cela m’intéresse malgré tout).
    Je voudrais simplement, pour faire simple (lol), créer un raccourcis dans la barre des tâches de Windows en utilisant la fonction "Épingler à la barre des tâches" quant on fait un clic droit sur le petit bouton qui apparaît dans cette fameuse barre lorsque l'application est ouverte.

    @retwas :
    Mon programme ne gère pas de documents en tant que tel.
    En fait, il gère une micro base de données. Donc le fait de pouvoir épingler des documents favoris dans le programme ne m’intéresse pas (c'est justement le principal sujet du tutoriel que je vous ai donné).

    @guillemouze et @Cirec :

    J'ai effectivement pensé à cette solution, mais, comme indiqué dans la réponse de Cirec, ce n'est pas très simple.
    Microsoft, dans sa fichue habitude de faire des choses compliquées (pour ne pas dire usine à gaz), a codé ce type de raccourcis de façon un peu particulière.
    Je pourrais toujours décortiquer l'un de ces raccourcis pour voir comment il est écrit (en espérant qu'il ne soit pas parsé ou encodé).
    C'est une piste que je garde en mémoire.

    Merci pour vos retours, j'ai de quoi m'occuper.

    Naga

  7. #7
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 510
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 510
    Par défaut
    Bonjour,
    oui, j'avais mal compris. Je croyais que c'était dans le Systray .

    Sinon, j'ai essayé la solution de Cirec, mais sans succès sous W10 ?

    A+
    Charly

Discussions similaires

  1. Réponses: 0
    Dernier message: 04/07/2011, 19h39
  2. 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
  3. Réponses: 2
    Dernier message: 22/11/2006, 19h19
  4. Réponses: 6
    Dernier message: 15/05/2006, 11h50
  5. Réponses: 7
    Dernier message: 27/10/2005, 14h24

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