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 :

[Lazarus] Icones


Sujet :

Lazarus Pascal

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut [Lazarus] Icones
    J'ai installé le composant TTrayIcon sur un TForm, j'ai essayé avec les différents exemples que j'ai pu trouver sur le net : impossible d'afficher une icone systray. Connaissez-vous une méthode "infaillible" ?

    Idem pour l'ajout d'une icone à l'exe généré, je n'y arrive pas !

    Je suis sous Windows mais je ne veux pas utiliser l'API Windows. D'après ce que j'ai pu lire ici ou là, ce serait possible.

    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bonjour,

    Il faudra nécessairement passer par l'API Win32 à un moment ou un autre. Soit c'est vous qui y touchez, soit c'est un composant intermédiaire. Mais ne pas passer par elle est impossible.

    Votre programme est destiné à être portable ?

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Hdd34
    ...Il faudra nécessairement passer par l'API Win32 à un moment ou un autre. Soit c'est vous qui y touchez, soit c'est un composant intermédiaire. Mais ne pas passer par elle est impossible...
    Apparemment, il est possible de se passer de l'API si j'en crois cet extrait :
    TrayIcon is a multiplatform System Tray component. It currently works on the following widgetsets: win32, Gtk1, Gnome, Gtk2. In the future it will also work for Carbon ( Mac OS X ) and Qt 4. Two interfaces are supplied, a visual component and a non-visual object. The non-visual object is called SystrayIcon and it is compatible with Delphi. The visual component is called TTrayIcon and works only on Lazarus.(Extrait de ceci)
    J'aurais aimé avoir des retours d'expérience.
    Citation Envoyé par Hdd34
    ...Votre programme est destiné à être portable ?...
    Effectivement, je souhaite que mon programme soit porté sur d'autres plateformes. Actuellement, je développe sous Windows.

  4. #4
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Non non, c'est bien ce que je disais
    Soit on passe soi-même par l'API Win32, soit c'est le composant qui le fait. EN l'occurence, dans ce cas là, c'est le composant qui s'en charge (et c'est tant mieux ). Pour confirmation, voir dans l'install de Lazarus, components/trayicon/wswin32trayicon.pas.

    Je vais tester ce composant pour voir ce qu'il en est et s'il fonctionne chez moi.

    @++

  5. #5
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    J'ai essayé à l'occasion de ce post ce composant.

    Voici un bref résumé de son utilisation:

    1) Installation
    Pour installer ce composant, j'ai utilisé le menu composants >> configurer les paquets installés.
    Dans la fenêtre des paquets disponibles (de droite) j'ai choisi TrayIconLaz 0.2.
    Puis j'ai cliqué sur le bouton enregistrer et construire
    - Sous linux, le tout s'est compilé en quelques secondes
    - Sous Windows, la dernière version béta de lazarus n'a pas voulu se compiler directement et j'ai du modifier (mettre en commentaire) quelques lignes concernant des traduction d'interface dans d'autres langues...

    2) Essai sous Linux (Mandriva 2006 + KDE)
    J'ai créé un projet vierge sur lequel j'ai ajouté un ttrayicon, un popupmenu, deux boutons.
    J'ai assigné le popupmenu à mon TtrayIcon via l'inspecteur d'objet, j'y ai aussi defini l'icone et le hint, dès la conception...
    Le seul code source ajouté consiste à definir une action lorsque l'on clique sur le bouton 1 et sur le bouton deux.
    je les ai définis de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      TrayIcon1.show;
    end;
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      TrayIcon1.Hide;
    end;
    Le résultat fonctionne du premier coup !!!
    lorsque je clique sur le bouton1 le trayicon apparait et est fonctionnel,
    lorsque je clique sur le bouton 2 il disparait...

    3) Essai sous windows (XP + SP2)
    Je tente exactement le meme code source et là surprise : rien ne se passe...

    Je décide donc de tester la methode decrite par l'auteur du composant, sur cette page :
    http://wiki.lazarus.freepascal.org/i...tion_program_1

    Je crée donc avec le bloc note un fichier tray.rc contenant :
    J'enregistre ce dernier dans un dossier temporaire accompagné d'une icone portant le nom précedemment utilisé (icon1.ico).

    puis je compile ce fichier en tray.res à l'aide de l'outil en ligne de commande windres.exe inclus dans le dossier C:\lazarus\pp\bin\i386-win32 à l'aide de la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    C:\lazarus\pp\bin\i386-win32>windres -i "c:\temp\tray.rc" -o "c:\temp\tray.res"
    J'indique dans mon code source que je désire intégrer ce fichier à la compilation de mon executable final en ajoutant la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {$R 'c:\temp\tray.res'}
    Je compile Une première fois...
    Le resultat montre une chose importante : désormais l'icone de l'application (ou plus exactement du fichier executable sur ton disque dur)est l'icone que je viens de définir, ce qui répond (pour windows en tout cas) à ton problème numéro 2.

    Je vais donc utiliser cette icone incluse dans le programme pour mon composant trayicon.
    je modifie ainsi mon code pour le bouton 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button1Click(Sender: TObject);
    const
      IDI_ICON1         = 101;
    begin
    TrayIcon1.Icon.Handle := LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));
      TrayIcon1.show;
    end;
    Désormais le programme fonctionne correctement sous windows...

    4) Conclusion :
    Ce composant fonctionne de manière un peu différente sous linux et sous windows, mais permet, pour peu que l'on utilise des directives de compilation conditionnelles dans son code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    {$ifdef win32}
    //blablabla
    {$else}
    //blobloblo
    {$endif}
    de faire quelque chose de portable...
    PS : La transparence des .ico ne marche pas bien sous linux (j'ai utilisé un .xpm créé avec the gimp)

    Je garde ce composant sous le coude, je pense que je vai l'utiliser...


    Bon coding

    Clandestino

  6. #6
    Membre éclairé

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    Points : 773
    Points
    773
    Par défaut
    PS : problème numéro 2 ... suite
    Pour définir l'icone de la fenêtre de ton application il te suffit :

    sous windows :
    En partant du principe que tu as inséré ta ressource dans ton programme de la manière que je viens de décrire dans le post du dessus, d'ajouter le code suivant à ton programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TForm1.FormCreate(Sender: TObject);
    const
      IDI_ICON1         = 101;
    begin
      Form1.Icon.handle :=LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ICON1));;
    end;
    Sous linux : de définir une icone pour ta form1 dans l'inspecteur d'objet de lazarus ...

    Bon coding

    Clandestino

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Merci à toi Candestino. Tout fonctionne à merveille.
    L'idéal serait que ce composant fonctionne indifféremment sous Linux et sous Windows sans être obligé de développer du "spécifique" Windows non ? Affaire à suivre.

    Encore merci.

  8. #8
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Il y a manifestement un problème avec le code de Lazarus/FreePascal : TIcon.LoadFromFile ne fonctionne pas sous Windows. C'est plutôt gênant.

    Globalement, TIcon n'est pas performant du tout et pose problème. Par exemple, impossible de récupérer un TIcon depuis un TImage dans le code. Il faut que tu regardes le code de FreePascal pour l'améliorer

    @++

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Eric Sigoillot
    Il faut que tu regardes le code de FreePascal pour l'améliorer
    Merci du conseil .
    Plus sérieusement, je vais laissé cette tâche à des personnes plus compétentes que moi !
    Par contre, j'ai fais quelques tests avec les resources Lazarus (.lrs). Et là, je n'ai pas plus réussi . Je suis donc resté sur la solution de Clandestino.
    Si quelqu'un à déjà testé les ressources lazarus, je suis preneur.

  10. #10
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Pris en flagrant délit de baissage de bras !

    Plus sérieusement, le problème peut être mineur, mais pas encore corrigé par manque de temps. Donc regarder le code n'est pas forcément inutile. Même sans être un pro, on peut faire avancer des choses

    Pour les ressources, je ne sais pas, je n'ai pas encore eu le temps de prendre Lazarus en main.

    @++

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    Points : 80
    Points
    80
    Par défaut
    Citation Envoyé par Eric Sigoillot
    Plus sérieusement, le problème peut être mineur, mais pas encore corrigé par manque de temps. Donc regarder le code n'est pas forcément inutile. Même sans être un pro, on peut faire avancer des choses
    Tu as raison, je vais peut-être jeter un oeil. Mais pour l'instant je n'ai pas trop de temps (développement de mon prog + site web).

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

Discussions similaires

  1. [Lazarus] Icone dans Form
    Par lohot dans le forum Lazarus
    Réponses: 4
    Dernier message: 13/02/2007, 08h25
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 09h23
  3. Attribuer une icone à une application
    Par k_boy dans le forum x86 32-bits / 64-bits
    Réponses: 4
    Dernier message: 31/08/2002, 02h38
  4. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 09h32
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 10h43

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