Juin
23
|
Lorsqu’une application se lance, par défaut, la fenêtre principale se retrouve automatiquement dans la barre des tâches depuis les dernières versions de Delphi. Si l’on migre un vieux projet, on peut ajouter une ligne dans le code source du projet de son application : Application.MainFormOnTaskbar := True;
Typiquement, si la prévisualisation ne fonctionne pas correctement sous Windows Vista, il y a de fortes chances que cette ligne soit manquante ou que la valeur soit à False
.
Au lancement de la fiche principale, je vais commencer par vérifier que l’on utilise bien Windows 7, puis initialiser les variables permettant d’accéder aux deux interfaces décrites dans la première page.
Déclaration de deux variables :
1 2 3 | private tbl : ITaskbarList; tbl3: ITaskbarList3; // Fournis de nombreuses fonctions supplémentaires |
Événement OnCreate
de la fiche :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | procedure TfrmMain.FormCreate(Sender: TObject); begin // Windows 7 if CheckWin32Version(6, 1) then begin // Création des objets nécessaires tbl := CreateComObject(CLSID_TaskbarList) as ITaskbarList; tbl.HrInit; // Initialisation Supports(tbl, IID_ITaskbarList3, tbl3); end else begin // On n'est pas sous Windows 7 MessageDlg('Ces exemples ne fonctionnent que sous Windows 7 !', mtInformation, [mbOK], 0); end; end; |
Ce code nécessite les unités suivantes :
1 2 | uses SysUtils, Dialogs, ComObj, ShlObj; |
Mise en œuvre des fonctions AddTab & DeleteTab
J’ai ajouté deux TButton
sur la fiche et un TSpeedButton
. J’ai également créé une autre fiche que j’ouvrirai lorsque l’on clique sur le TSpeedButton
.
J’ajoute le code suivant sur les événements OnClick
de ces 3 composants :
1 2 3 4 5 6 7 8 | procedure TfrmMain.btnDisplayTaskClick(Sender: TObject); begin // Affiche la prévisualisation et la tâche avec la fenêtre actuelle tbl.AddTab(Self.Handle); btnDisplayTask.Enabled := False; btnHideTask.Enabled := True; end; |
1 2 3 4 5 6 7 8 | procedure TfrmMain.btnHideTaskClick(Sender: TObject); begin // Suppression de la prévusialisation et de la tâche tbl.DeleteTab(Self.Handle); btnDisplayTask.Enabled := True; btnHideTask.Enabled := False; end; |
1 2 3 4 5 6 7 8 9 10 | if spbtnToolWindow.Down then begin // Affiche une seconde fenêtre frmToolWindow.Show; end else begin // On masque la fenêtre frmToolWindow.Close; end; |
Si l’on teste d’ores et déjà le code, on remarque que la tâche apparait et disparait comme prévu. Cependant, la seconde fiche apparait et disparait à l’écran, mais sa prévisualisation n’est jamais visible.
Pour cela, on va modifier la structure de cette fiche afin que la tâche ne soit pas masquée, ce qui est le comportement par défaut des autres fiches que la principale, lorsque l’on développe une application avec Delphi.
On modifie ainsi la fiche :
1 2 | uses Windows, Classes, Controls, Forms; |
1 2 | protected procedure CreateParams(var Params: TCreateParams); override; |
1 2 3 4 5 6 7 8 9 10 | // Surcharge de la méthode du parent pour que la tâche soit visible sur la barre des tâches procedure TfrmToolWindow.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); with Params do begin ExStyle := ExStyle or WS_EX_APPWINDOW; WndParent := GetDesktopwindow; end; end; |
Dorénavant, les prévisualisations de nos deux fiches sont visibles :
Mise en œuvre de la fonction SetThumbnailTooltip
On peut également ajouter une info-bulle sur chaque prévisualisation. Pour cela, il suffit d’utiliser une ligne de code comme celle-ci :
1 2 | // Affichage d'une info-bulle au-dessus de la prévisualisation tbl3.SetThumbnailTooltip(frmToolWindow.Handle, 'Jolie Belly !'); |
Sur la page suivante, nous allons voir comment ajouter une barre de progression à notre tâche en utilisant les couleurs disponibles…
Si vous cherchez encore plus d’informations, vous pourrez en trouver sur ces excellents articles :