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 :

Petite form positionnée avec label dans la TrayIcon !


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut Petite form positionnée avec label dans la TrayIcon !
    Bonjour à toutes et à tous,

    J'avais réalisé en Delphi 3 une petite application qui me permettait de positionner une Form (TrayForm) directement sur la position de l'heure dans la TrayIcon afin de personnaliser le mode heure.


    Avec Windows 10, elle apparait au démarrage et puis disparait tout en étant présente puisque elle se trouve dans les paramètres Processus actif de Windows.


    Y a t'il une erreur dans mon code qui se trouve sur la 1ère form et qui lance la seconde soit (TrayForm) ?


    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
     
    {$R *.DFM}
     
     
    function donne_Trayform: integer;
    var
      hdle: integer;
    begin
      hdle := FindWindow('Shell_TrayWnd', nil);
      Hdle := FindWindowEx(hdle, 0, 'TrayNotifyWnd', nil);
      result := FindWindowEx(hdle, 0, 'TTrayForm', nil);
    end;
     
    function donne_Hdle_Clock: integer;
    var
      hdle: integer;
    begin
      hdle := FindWindow('Shell_TrayWnd', nil);
      Hdle := FindWindowEx(hdle, 0, 'TrayNotifyWnd', nil);
      result := FindWindowEx(hdle, 0, 'TrayClockWClass', nil);
    end;
     
    function TrayIconWindowHandle: HWnd;
    var
      trayHWnd: HWnd;
    begin
      trayHWnd := FindWindow('Shell_TrayWnd', nil);
      result := FindWindowEx(trayHWnd, 0, 'TrayNotifyWnd', nil);
    end;
     
    procedure TFMain.creation_control;
    var
      Tray_taille, taille2: Trect;
      larg, haut: integer;
    begin
     GetWindowRect(donne_Hdle_Clock, Tray_taille);
      GetWindowRect(TrayIconWindowHandle, taille2);
      if donne_Trayform = 0 then
      try
        Trayform := TTrayform.CreateParented(TrayIconWindowHandle);
        Trayform.ParentWindow := TrayIconWindowHandle;
        Trayform.show;
      except; end;
      larg := Tray_taille.right - Tray_taille.left;
      haut := Tray_taille.bottom - Tray_taille.top - 2;
      MoveWindow(Trayform.handle, Tray_taille.left - taille2.left + 1,
        Tray_taille.top - taille2.top + 1, larg,
        haut, true);
    end;
     
    procedure TFMain.FormCreate(Sender: TObject);
    begin
      creation_control; 
    end;
     
    end.
    A votre meilleure convenance si vous estimez qu'il y a un problème dans mon code.


    @+,


    cincap















    ray Icon

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Faudrait vérifier si les classes n'ont pas changé entre un Windows 95 (époque de D3) et un Windows 10

    Je l'ai fait sur Windows 7 et Windows 10 (de ma collègue) avec un Exe en XE2, j'ai juste créé une bête TForm et ça affiche bien et ça reste au dessus de l'heure
    Surement un soucis de BorderStyle

    Par contre, je l'ai fait depuis le OnClick d'un TButton d'une MainForm visible
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ ShaiLeTroll, bonjour et merci pour ton message.

    Je penserai plutôt à cause du Thème de Windows 10 qui se modifie car dès que l'on change la barre de tâche à droite, haut, gauche, la 2ième forme disparait.

    C'est comme le son au démarrage qui n'est plus actif à moins de changer la valeur de la Dll.

    Je ne vais pas trop me tracasser d'autant que j'ai du aussi modifier la valeur de la position pour que le label soit positionné sur l'heure.


    @+,


    cincap

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    Je reviens vers vous pour vous dire qu'après des essais c'est que ma deuxième forme perd le focus lorsqu'elle est affichée et que l'on clique sur un autre icone de la TrayIcon.

    Elle fonctionne en arrière plan puisqu'elle me donne l'heure vocalement.

    J'ai utilisé tout ce qui correspond à garder le focus comme :

    //Application.BringToFront();

    ou

    //SetWindowPos(Handle, HWND_TOPMOST, Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
    Rien y fait, sur Seven et Xp je n'avais pas ce problème.


    @+,


    cincap

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    Bonjour à toutes et à tous,

    Personne n'a un bout de code pour afficher un Tpanel dans la TrayIcon sur l'emplacement de l'heure qui ne perd pas le focus pas quand on clique sur un icône de cette TrayIcon.

    Mon code fonctionne à l'exécution mais si je clique sur l'icone de Norton par exemple, le Tpanel devient Hide.


    Merci si une solution.


    @+,


    cincap

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 693
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 693
    Points : 13 128
    Points
    13 128
    Par défaut
    Change simplement ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function TrayIconWindowHandle: HWnd;
    //var
    //  trayHWnd: HWnd;
    begin
      result := FindWindow('Shell_TrayWnd', nil);
     
    //  trayHWnd := FindWindow('Shell_TrayWnd', nil);
    //  result := FindWindowEx(trayHWnd, 0, 'TrayNotifyWnd', nil);
    end;

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 425
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 425
    Points : 1 326
    Points
    1 326
    Par défaut
    @ Andnotor,

    Merci de ton intervention Maître, cela fonctionne au niveau de rester tout le temps au premier plan.

    Ce que j'ai du modifier en plus de ta solution pour superposer la place de l'heure par défaut :

    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
     
    procedure TFMain.creation_control;
    var
      Tray_taille, taille2: Trect;
      larg, haut: integer;
    begin
     GetWindowRect(donne_Hdle_Clock, Tray_taille);
      GetWindowRect(TrayIconWindowHandle, taille2);
      if donne_Trayform = 0 then
      try
        Trayform := TTrayform.CreateParented(TrayIconWindowHandle);
        Trayform.ParentWindow := TrayIconWindowHandle;
        Trayform.show;
      except; 
    end;
     
      //Windows 10 - Andnotor
      larg := Tray_taille.right - Tray_taille.left;
      haut := Tray_taille.bottom - Tray_taille.top; // - 2;
      MoveWindow(Trayform.handle, Tray_taille.left - taille2.left + 365,
        Tray_taille.top - taille2.top + 4, larg,
        haut, true);
     
        //Ok sous Seven et Xp
     {larg := Tray_taille.right - Tray_taille.left;
      haut := Tray_taille.bottom - Tray_taille.top - 2;
      MoveWindow(Trayform.handle, Tray_taille.left - taille2.left + 1,
        Tray_taille.top - taille2.top + 1, larg,
        haut, true); }
    end;

    Et sur la 2ième forme (Trayform.show) qui affiche le Tlabel :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TTrayform.Timer1Timer(Sender: TObject);
    begin
    panel1.caption := Formatdatetime('t', now);
      panel1.hint:= Formatdatetime('"Nous sommes le" dddd dd/mm/yyyy"', now);
    
      //fmain.creation_control;
    end;

    Ma résolution d'écran 1920 x 1080 !


    Belle avancée.

    @+,


    cincap

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

Discussions similaires

  1. [XL-2010] Insérer une forme géométrique avec texte dans une cellule excel
    Par stephJP dans le forum Excel
    Réponses: 2
    Dernier message: 23/05/2014, 09h31
  2. [AC-2007] Mise en forme conditionnelle avec image dans sous formulaire
    Par lio33 dans le forum IHM
    Réponses: 2
    Dernier message: 15/01/2013, 18h42
  3. Réponses: 2
    Dernier message: 27/06/2007, 14h18
  4. [Forms 6i] Positionnement du curseur dans une liste
    Par Veve44 dans le forum Oracle
    Réponses: 2
    Dernier message: 13/12/2005, 16h28
  5. Nouvelle form avec bouton dans barre taches
    Par DarkChamallo dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 17/05/2004, 20h44

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