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

Composants VCL Delphi Discussion :

Application en permance sur le bureau.


Sujet :

Composants VCL Delphi

  1. #1
    Membre à l'essai

    Inscrit en
    août 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 33
    Points : 22
    Points
    22
    Par défaut Application en permance sur le bureau.
    Bonjour a tous,

    Je suis en train de créer une application que je voudrais permanente sur le bureau donc elle doit répondre aux critères suivant :

    -Etre en permanence sur le bureau (même lorsque l'utilisateur clique sur le raccourcit bureau)
    -Ne pas s'afficher devant les autres applications : Mon programme doit être devant le bureau mais derrière toute les autres applications.

    En gros, si on parle en therme de calques, on doit toujours avoir ceci :

    Bureau
    Mon programme
    Programme autre 1
    Programme autre 2
    Programme autre ...

    En fait, il faudrait arrivé a savoir quand l'utilisateur se retrouve sur le bureau de façon a afficher mon logiciel.
    Est ce que quelqu'un a une idée de comment faire ça ?!?

    Merci.

    D.

  2. #2
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2004
    Messages : 4 517
    Points : 10 150
    Points
    10 150
    Par défaut
    Bienvenue sur Developpez, deetox.
    Malheureusement je pense que ton problème est insolvable.
    Il y a un truc pour qu'une fenêtre reste toujours au-dessus de toutes les autres.
    Mais faire devenir une fenêtre partie intégrante du bureau (c'est ça que cherche à faire, il me semble) ça doit relever de l'interfaçage de très bas niveau avec Windows, et encore...
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 199
    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 199
    Points : 5 358
    Points
    5 358
    Par défaut
    salut

    ce que tu veut faire c'est un bureau virtuel ?
    un peu comme sous linux ou tu peut avoir 4 ecrans

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  4. #4
    Membre actif Avatar de gibet_b
    Profil pro
    Inscrit en
    mars 2002
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 292
    Points : 296
    Points
    296
    Par défaut
    Si c'est le cas, il y a déjà pas mal de soft qui le font, au hasard : http://www.homere-software.com/desktop.htm
    Jean-Baptiste, vieux membre éclairé à la bougie
    -----
    www.e-jbb.net : Écriture et lecture numérique
    ---
    Citation du moment : "On abdique pas l'honneur d'être une cible" - Cyrano De Bergerac

  5. #5
    Membre à l'essai

    Inscrit en
    août 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    nan, j'suis en train de faire une sidebar genre longhorn... J'bidouille une interface avec Delphi...

    Ca serais possible de faire une simulation d'intégration à l'écran en détectant si l'utilisateur est sur le bureau ou non auquel cas ou affiche ou non le prog ! :) !

    Si quelqu'un savait comment faire ça, ca fonctionnerais sans blemes !

    mici a tous !

    D.

  6. #6
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2004
    Messages : 447
    Points : 591
    Points
    591
    Par défaut
    Ce que tu veux faire c'est un genre de stayOnBottom, regarde du coté d'active Desktop et les activeX pour incruster ton application dans le bureau, je pense que tu peux le faire avec cette méthode, bonne chance .
    ----------------------------------------------------
    Avant de poster, pensez à utiliser les différents outils à votre disposition:
    Google, la FAQ et le moteur de recherche.

  7. #7
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 199
    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 199
    Points : 5 358
    Points
    5 358
    Par défaut
    salut

    je comprend pas ce que tu veut ?
    tu veut faire une side bar
    voila un exemple non terminer

    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
    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
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    unit Utest;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      ShellAPI, Dialogs, StdCtrls;
    const
      wm_AppBarMessage = wm_User;
    type
      TFrmAppBar = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormClose(Sender: TObject; var Action: TCloseAction);
        procedure FormActivate(Sender: TObject);
        procedure FormShow(Sender: TObject);
      private
        { Déclarations privées }
        AppData: _AppBarData; //Appbars structure
        function GetRequestRect: TRect;
        procedure WMAppBarMessage(var Msg: TMessage); message wm_AppBarMessage;
        procedure WMWindowPosChanged(var Msg: TWMWindowPosMsg); message WM_WindowPosChanged;
        procedure WMMoving(var Msg: TMessage); message WM_Moving;
        procedure WMExitSizeMove(var Msg: TMessage); message WM_ExitSizeMove;
        property RequestRect: TRect read GetRequestRect;
      public
        { Déclarations publiques }
        procedure CreateParams(var Params: TCreateParams); override;
      end;
    var
      FrmAppBar : TFrmAppBar;
    implementation
    {$R *.dfm}
    procedure TFrmAppBar.FormCreate(Sender: TObject);
    var
      HndAppBar: hwnd;
    begin
      // fill the AppBarData data structure
      AppData.cbSize := sizeof(AppData);
      AppData.hWnd := Handle;
      AppData.uCallBackMessage := wm_AppBarMessage;
      // always start along bottom edge
      AppData.uEdge := ABE_BOTTOM;
      AppData.rc := RequestRect;
      AppData.lParam := 0;
      SHAppBarMessage(ABM_NEW, AppData);
    end;
    procedure TFrmAppBar.FormClose(Sender: TObject; var Action: TCloseAction);
    begin
      SHAppBarMessage(ABM_REMOVE,AppData); //Remove it on close
    end;
    procedure TFrmAppBar.FormActivate(Sender: TObject);
    begin
       SHAppBarMessage(ABM_ACTIVATE,AppData);
    end;
    procedure TFrmAppBar.FormShow(Sender: TObject);
    begin
      ShowWindow(Application.Handle, SW_HIDE);
      SHAppBarMessage(ABM_QUERYPOS, AppData);
      AppData.rc.Top := AppData.rc.Bottom - Height;
      SHAppBarMessage(ABM_SETPOS, AppData);
      SetBounds(AppData.rc.Left, AppData.rc.Top, AppData.rc.Right-AppData.rc.Left, AppData.rc.Bottom-AppData.rc.Top);
    end;
    procedure TFrmAppBar.CreateParams(var Params: TCreateParams);
    begin
      inherited CreateParams(Params);
      if Params.ExStyle and WS_EX_TOOLWINDOW = 0 then
        Params.ExStyle := Params.ExStyle + WS_EX_TOOLWINDOW;
    end;
    function TFrmAppBar.GetRequestRect: TRect;
    begin
      // set the requested Rect
      Result.Left := 0;
      Result.Top := Screen.Height - 50;
      Result.Right := Screen.Width;
      Result.Bottom := Screen.Height;
      case AppData.uEdge of
        ABE_TOP: begin
          Result.Left := 0;
          Result.Top := 0;
          Result.Right := Screen.Width;
          Result.Bottom := 50;
        end;
        ABE_LEFT: begin
          Result.Left := 0;
          Result.Top := 0;
          Result.Right := 50;
          Result.Bottom := Screen.Height;
        end;
        ABE_RIGHT: begin
          Result.Left := Screen.Width-50;
          Result.Top := 0;
          Result.Right := Screen.Width;
          Result.Bottom := Screen.Height;
        end;
      end;
    end;
    procedure TFrmAppBar.WMAppBarMessage(var Msg: TMessage);
    begin
      // hide when fullscreen apps are displayed
      if Msg.wParam = ABN_FULLSCREENAPP then
        if Msg.lParam <> 0 then Hide else Show;
      if Msg.wParam = ABN_POSCHANGED then
      begin
        // fill the AppBarData data structure
        AppData.rc &#58;= RequestRect;
        SHAppBarMessage&#40;ABM_QUERYPOS, AppData&#41;;
        case AppData.uEdge of
          ABE_TOP&#58; AppData.rc.Bottom &#58;= AppData.rc.Top + 50;
          ABE_LEFT&#58; AppData.rc.Right &#58;= AppData.rc.Left + 50;
          ABE_RIGHT&#58; AppData.rc.Left &#58;= AppData.rc.Right - 50;
          ABE_BOTTOM&#58; AppData.rc.Top &#58;= AppData.rc.Bottom - 50;
        end;
        SHAppBarMessage&#40;ABM_SETPOS, AppData&#41;;
        SetBounds&#40;AppData.rc.Left, AppData.rc.Top, AppData.rc.Right-AppData.rc.Left, AppData.rc.Bottom-AppData.rc.Top&#41;;
      end;
    end;
    procedure TFrmAppBar.WMWindowPosChanged&#40;var Msg&#58; TWMWindowPosMsg&#41;;
    begin
      // must send this message to maintain correct Z-order
      SHAppBarMessage&#40;ABM_WINDOWPOSCHANGED, AppData&#41;;
      inherited;
    end;
    procedure TFrmAppBar.WMMoving&#40;var Msg&#58; TMessage&#41;;
    var
      P&#58; TPoint;
    begin
      GetCursorPos&#40;P&#41;;
      if &#40;P.Y < Screen.Height/Screen.Width*P.X&#41; and &#40;P.Y < -&#40;Screen.Height/Screen.Width*P.X&#41;+Screen.Height&#41; then
      begin
        AppData.uEdge &#58;= ABE_TOP;
        AppData.rc &#58;= RequestRect;
        SHAppBarMessage&#40;ABM_QUERYPOS, AppData&#41;;
        AppData.rc.Bottom &#58;= AppData.rc.Top + 50;
        PRect&#40;Msg.lParam&#41;^ &#58;= AppData.rc;
      end;
      if &#40;P.Y >= Screen.Height/Screen.Width*P.X&#41; and &#40;P.Y < -&#40;Screen.Height/Screen.Width*P.X&#41;+Screen.Height&#41; then
      begin
        AppData.uEdge &#58;= ABE_LEFT;
        AppData.rc &#58;= RequestRect;
        SHAppBarMessage&#40;ABM_QUERYPOS, AppData&#41;;
        AppData.rc.Right &#58;= AppData.rc.Left + 50;
        PRect&#40;Msg.lParam&#41;^ &#58;= AppData.rc;
      end;
      if &#40;P.Y >= Screen.Height/Screen.Width*P.X&#41; and &#40;P.Y >= -&#40;Screen.Height/Screen.Width*P.X&#41;+Screen.Height&#41; then
      begin
        AppData.uEdge &#58;= ABE_BOTTOM;
        AppData.rc &#58;= RequestRect;
        SHAppBarMessage&#40;ABM_QUERYPOS, AppData&#41;;
        AppData.rc.Top &#58;= AppData.rc.Bottom - 50;
        PRect&#40;Msg.lParam&#41;^ &#58;= AppData.rc;
      end;
      if &#40;P.Y < Screen.Height/Screen.Width*P.X&#41; and    &#40;P.Y >= -&#40;Screen.Height/Screen.Width*P.X&#41;+Screen.Height&#41; then
      begin
        AppData.uEdge &#58;= ABE_RIGHT;
        AppData.rc &#58;= RequestRect;
        SHAppBarMessage&#40;ABM_QUERYPOS, AppData&#41;;
        AppData.rc.Left &#58;= AppData.rc.Right - 50;
        PRect&#40;Msg.lParam&#41;^ &#58;= AppData.rc;
      end;
      inherited;
    end;
    procedure TFrmAppBar.WMExitSizeMove&#40;var Msg&#58; TMessage&#41;;
    begin
      SetBounds&#40;AppData.rc.Left, AppData.rc.Top, AppData.rc.Right-AppData.rc.Left, AppData.rc.Bottom-AppData.rc.Top&#41;;
      SHAppBarMessage&#40;ABM_SETPOS, AppData&#41;;
      inherited;
    end;
    end.
    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  8. #8
    Membre à l'essai

    Inscrit en
    août 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 33
    Points : 22
    Points
    22
    Par défaut j'ai du mal m'exprimer
    Ca marche pô...

    J'ai trouvé ce genre de codes en faisant des recherches et j'ai déjà préparé le principe de ma sidebar... Il ne manque qu'une chose : Son affichage permanent !

    J'voudrais, comme dis lil_jam63 faire un truc du genre stayonbottom !

    J'ai trouvé également le moyen de le faire théoriquement mais je sais pas comment le faire en delphi ( et j'ai rien trouvé là dessus ) : Pour celà il suffierais de détecter quand l'utilisateur revient au bureau ( par le handle du bureau je pense ), et a ce moment là, activer un stayontop sur ma form !

    Le seul code qui me manque, c'est comment savoir si l'utilisateur est actuellement sur le bureau et non sur une autre application ?!?

    Mici

    D.

  9. #9
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    mai 2002
    Messages
    3 199
    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 199
    Points : 5 358
    Points
    5 358
    Par défaut
    salut

    je comprend vraiment pas
    la fenetre se met sur un des bord et les autre fenetre les recouvre pas

    je comprend vraiment pas ta demande
    tu as bien essayer le code que je t'ai fournit

    @+ Phil
    Nous souhaitons la vérité et nous trouvons qu'incertitude. [...]
    Nous sommes incapables de ne pas souhaiter la vérité et le bonheur, et sommes incapables ni de certitude ni de bonheur.
    Blaise Pascal
    PS : n'oubliez pas le tag

  10. #10
    Membre à l'essai

    Inscrit en
    août 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 33
    Points : 22
    Points
    22
    Par défaut
    Oui j'ai essayé ! Ca marche pour une side bar... J'avais déjà utilisé ce genre de codes avant... Mais je veux que mon application soint incrusté au bureau : On voit pas le bureau, on voit pas mon application ! On voit le bureau, on voit l'application ! :)

    En gros, lorsque le bureau est en "plein écran" et devant les autres applications (sur Xp, on peut le faire en cliquand sur l'icone de bureau), je veux que mon application RESTE devant le bureau !!! C'est pour ça qu'il faut que je détecte si le bureau est en cour d'utilisation ou en plein écran (j'avais essayé avec getforeground mais ca marche pô ! :-( ).

    Merci de m'aider...

    d.

  11. #11
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    décembre 2003
    Messages
    1 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2003
    Messages : 1 885
    Points : 2 712
    Points
    2 712
    Par défaut
    salut
    je pence que tu peu trouver quelque chose a coter des hook
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  12. #12
    Membre à l'essai

    Inscrit en
    août 2004
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : août 2004
    Messages : 33
    Points : 22
    Points
    22
    Par défaut LA solution !
    Ca y est ! J'ai potassé ca pendant de longues heures ( ca fais 2 jours que j'me prenait la tête) et j'ai trouvé... Pour info, j'vous le met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var
      S1&#58; String;
    begin
      SetLength &#40;S1, 100&#41;;
    if GetWindowText &#40;getforegroundwindow, PChar &#40;S1&#41;, Length &#40;S1&#41;&#41;=0 then
    begin
    form1.FormStyle &#58;= fsStayontop;
    end
    else
    form1.FormStyle &#58;= fsNormal;
    En fait, il détecte qu'aucune application n'est affichée donc il en déduit que c'est le bureau qui travaille ! Résultat, j'affiche ma form !!!

    MErci a tous de m'avoir aidé !

    D.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/03/2009, 11h38
  2. Réponses: 2
    Dernier message: 06/10/2008, 12h20
  3. Comment maintenir une application sur le bureau ?
    Par Philia dans le forum Composants VCL
    Réponses: 22
    Dernier message: 25/11/2007, 15h09
  4. application installant un raccourci sur le bureau
    Par ricotrutt dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 24/07/2006, 15h23
  5. application sur le bureau
    Par SQUAL dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 14/06/2004, 17h18

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