Mar
23
|
Ce code permet de :
- récupérer la dimension et la position de l’écran principal
- afficher une barre de progression sur le bouton de l’application dans la barre des tâches
Je l’ai implémenté afin de pouvoir appeler ses fonctions quelque soit la plateforme sans avoir à faire des {$IFDEF plateforme}...{$ENDIF}
dans le code principal de l’application (d’où les méthodes vides).
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 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 | unit uWindowsOnly; interface {$IFDEF MSWINDOWS} uses Winapi.Windows, System.SysUtils, FMX.Dialogs, System.Win.ComObj, Winapi.ShlObj, FMX.Platform.Win; {$ENDIF} const TBPF_NOPROGRESS = 0; TBPF_INDETERMINATE = $1; TBPF_NORMAL = $2; TBPF_ERROR = $4; TBPF_PAUSED = $8; type TTaskButton = class private {$IFDEF MSWINDOWS} tbl : ITaskbarList; tbl3: ITaskbarList3; // Fournis de nombreuses fonctions supplémentaires {$ENDIF} public constructor Create; procedure SetProgressState(handle: NativeUInt; state: SmallInt); procedure SetProgressValue(handle: NativeUInt; value, max: Integer); end; function PrimaryScreenLeft : Integer; function PrimaryScreenWidth : Integer; function PrimaryScreenTop : Integer; function PrimaryScreenHeight: Integer; implementation {$region 'Taille du moniteur principal'} function PrimaryScreenLeft: Integer; begin Result := 0; end; function PrimaryScreenTop: Integer; begin Result := 0; end; {$IFDEF MSWINDOWS} function PrimaryScreenWidth: Integer; begin Result := GetSystemMetrics(SM_CXSCREEN); end; function PrimaryScreenHeight: Integer; begin Result := GetSystemMetrics(SM_CYVIRTUALSCREEN); end; {$ELSE} function PrimaryScreenWidth: Integer; begin Result := 0; end; function PrimaryScreenHeight: Integer; begin Result := 0; end; {$ENDIF} {$endregion} { TTaskButton } constructor TTaskButton.Create; begin {$IFDEF MSWINDOWS} // Windows 7 or 8 if CheckWin32Version(6, 1) or CheckWin32Version(6, 2) then begin // Création des objets nécessaires tbl := CreateComObject(CLSID_TaskbarList) as ITaskbarList; tbl.HrInit; // Initialisation Supports(tbl, IID_ITaskbarList3, tbl3); end; {$ENDIF} end; procedure TTaskButton.SetProgressState(handle: NativeUInt; state: SmallInt); begin {$IFDEF MSWINDOWS} if Assigned(tbl3) then begin tbl3.SetProgressState(FmxHandleToHWND(handle), state); end; {$ENDIF} end; procedure TTaskButton.SetProgressValue(handle: NativeUInt; value, max: Integer); begin {$IFDEF MSWINDOWS} if Assigned(tbl3) then begin tbl3.SetProgressValue(FmxHandleToHWND(handle), value, max); end; {$ENDIF} end; end. |
J’avais déjà rédigé un article concernant l’utilisation des fonctionnalités liées à la barre des tâches de Windows 7.
Dans le code ci-dessus, il n’y a que deux différences notables :
- En plus de Windows 7, on teste également Windows 8 :
CheckWin32Version(6, 2)
- Le Handle à utiliser pour les appels aux différentes procédures n’est plus directement
Self.Handle
maisFmxHandleToHWND(Self.Handle)
puisque le développement est basé sur le framework FireMonkey.
Si vous avez des questions concernant le développement, l’implémentation, n’hésitez pas en laissant un commentaire !
Pages : 1 2
Version 1.0.1.1 :
Version 1.0.2.4 :
Version 1.1.0.6 :
Menu contextuel
Générer une image
Version 1.1.1.7 :
Version 1.1.2.9 :
Progression de la génération des frames
modifié/traduit par Whiler
Politique de confidentialité