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

Lazarus Pascal Discussion :

Quelle unité déclarer pour avoir l'interface IActiveDesktop ? [Lazarus]


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 759
    Par défaut Quelle unité déclarer pour avoir l'interface IActiveDesktop ?
    Bonjour à toutes et tous,

    Je cherche un moyen simple de changer le fond d'écran par programmation.
    J'ai trouvé un exemple sous Delphi, mais je n'arrive pas à le porter sous Lazarus car je ne sais pas dans quelle unité est déclarée IActiveDesktop.

    Voici le source
    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
     
    Procedure P_changefondecran(Const Stp_image : String; Wp_style : Dword);
    const
      GUID: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
    var
      ComObj       : IUnknown;
      Buffer       : PWideChar;
      WallPaperOpt : TWallPaperOpt;
    begin
      if not FileExists(Stp_image) then Exit;
      Buffer := AllocMem(MAX_PATH);
      StringToWideChar(Stp_image, Buffer, MAX_PATH);
      WallPaperOpt.dwStyle := wp_Style;
      WallPaperOpt.dwSize := SizeOf(WallPaperOpt);
      ComObj := CreateComObject(GUID);
      with ComObj as IActiveDesktop do
      begin
        SetWallpaperOptions(WallPaperOpt, 0);
        SetWallpaper(Buffer, 0);
        ApplyChanges(AD_APPLY_ALL); //(AD_APPLY_ALL or AD_APPLY_FORCE);
      end;
      FreeMem(Buffer);
    End;
    J'ai mis les unites shlobj, comobj, et shellapi.
    Dans ShellApi, j'ai trouvé ces lignes
    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
    ////////////////////////////////////////////
    // Flags for IActiveDesktop::ApplyChanges()
        AD_APPLY_SAVE             = $00000001;
        AD_APPLY_HTMLGEN          = $00000002;
        AD_APPLY_REFRESH          = $00000004;
        AD_APPLY_ALL              = (AD_APPLY_SAVE or AD_APPLY_HTMLGEN  or  AD_APPLY_REFRESH);
        AD_APPLY_FORCE            = $00000008;
        AD_APPLY_BUFFERED_REFRESH = $00000010;
        AD_APPLY_DYNAMICREFRESH   = $00000020;
     
    ////////////////////////////////////////////
    // Flags for IActiveDesktop::GetWallpaperOptions()
    //           IActiveDesktop::SetWallpaperOptions()
        WPSTYLE_CENTER      = 0;
        WPSTYLE_TILE        = 1;
        WPSTYLE_STRETCH     = 2;
        WPSTYLE_MAX         = 3;
    Je me dis donc, que IActiveDesktop doit bien être déclaré quelque part... mais impossible de trouver où !

    Quelqu'un a déjà utilisé ça ?

    Merci d'avance

    JS

  2. #2
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut essayes JwaShlGuid, faudras peut-être rajouté JwaWinBase aussi et ou Win32Extra mais cette dernière est optionnelle je pense.

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Membre chevronné

    Homme Profil pro
    Autre
    Inscrit en
    Novembre 2015
    Messages
    145
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Novembre 2015
    Messages : 145
    Par défaut
    Apparemment, il en manque plusieurs morceaux (même dans les unités Jedi, sauf erreur de ma part).

    Voici une conversion rapide (non testée) récupérée et modifiée à partir d'une vielle déclaration Delphi:

    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
    uses
      Windows, ShlObj;
     
    const
      // (CLSID_ActiveDesktop different in ShlObj for Free Pascal/Lazarus ?)
      SID_IActiveDesktop     = '{F490EB00-1240-11D1-9888-006097DEACF9}';
     
    type
      IActiveDesktop = interface(IUnknown)
        [SID_IActiveDesktop]
        function ApplyChanges(dwFlags: DWORD): HResult; stdcall;
        function GetWallpaper(pwszWallpaper: PWideChar; cchWallpaper: UINT; dwReserved: DWORD): HResult; stdcall;
        function SetWallpaper(pwszWallpaper: PWideChar; dwReserved: DWORD): HResult; stdcall;
        function GetWallpaperOptions(var pwpo: TWallPaperOpt; dwReserved: DWORD): HResult; stdcall;
        function SetWallpaperOptions(var pwpo: TWallPaperOpt; dwReserved: DWORD): HResult; stdcall;
        function GetPattern(pwszPattern: PWideChar; cchPattern: UINT; dwReserved: DWORD): HResult; stdcall;
        function SetPattern(pwszPattern: PWideChar; dwReserved: DWORD): HResult; stdcall;
        function GetDesktopItemOptions(var pco: TComponentsOpt; dwReserved: DWORD): HResult; stdcall;
        function SetDesktopItemOptions(var pco: TComponentsOpt; dwReserved: DWORD): HResult; stdcall;
        // (TShComponent renamed in TIE4Component for Free Pascal/Lazarus)
        function AddDesktopItem(var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function AddDesktopItemWithUI(hwnd: HWND; var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function ModifyDesktopItem(var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function RemoveDesktopItem(var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function GetDesktopItemCount(var lpiCount: Integer; dwReserved: DWORD): HResult; stdcall;
        function GetDesktopItem(nComponent: Integer; var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function GetDesktopItemByID(dwID: DWORD; var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function GenerateDesktopItemHtml(pwszFileName: PWideChar; var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
        function AddUrl(hwnd: HWND; pszSource: PWideChar; var pcomp: TIE4Component; dwFlags: DWORD): HResult; stdcall;
        function GetDesktopItemBySource(pwszSource: PWideChar; var pcomp: TIE4Component; dwReserved: DWORD): HResult; stdcall;
      end;

  4. #4
    Membre prolifique Avatar de Jon Shannow
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2011
    Messages
    4 759
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2011
    Messages : 4 759
    Par défaut
    @BeanzMaster, les unités que tu m'as dit d'ajouter n'ont rien changé...

    Par contre la solution de FChrisF a parfaitement fonctionné.

    Merci à vous deux.

    JS

  5. #5
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par FChrisF Voir le message
    Apparemment, il en manque plusieurs morceaux (même dans les unités Jedi, sauf erreur de ma part).
    Bon à savoir faudrait envoyer ton code à la team FPC
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/02/2011, 21h33
  2. Quelles sont les compétences à avoir pour devenir un bon graphiste ?
    Par sidahmed dans le forum Webdesign & Ergonomie
    Réponses: 6
    Dernier message: 05/10/2007, 10h31
  3. Réponses: 9
    Dernier message: 25/09/2007, 15h43
  4. Réponses: 3
    Dernier message: 14/08/2007, 22h58
  5. [C# 2.0] Quelle référence ajouter pour avoir SqlClient ?
    Par jimboo dans le forum Accès aux données
    Réponses: 4
    Dernier message: 28/09/2006, 16h54

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