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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    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
    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 confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    102
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2005
    Messages : 102
    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
    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 chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    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 chevronné

    Inscrit en
    Avril 2003
    Messages
    284
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 284
    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

+ 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, 07h25
  2. Main icon (16 bits)
    Par DR dans le forum C++Builder
    Réponses: 2
    Dernier message: 02/09/2002, 08h23
  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, 01h38
  4. [FORMS] Chemin des icones (intégré FAQ 150 QR)
    Par jerome62 dans le forum Forms
    Réponses: 2
    Dernier message: 30/07/2002, 08h32
  5. [Kylix] icone associée à un programme
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h43

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