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 :

Image de fond dans un TPanel [Lazarus]


Sujet :

Lazarus Pascal

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Points : 15
    Points
    15
    Par défaut Image de fond dans un TPanel
    Bonjour,
    Je souhaiterais afficher une image de fond dans un tPanel sans passer par une image dont la propriété Align est réglée sur AlClient. (Cela fais ramer mon programme).

    J'y parviens pour ma fiche avec ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas.StretchDraw(ClientRect, Bitmap);
    Mais impossible pour moi de l'adapter à un panel, cela est-il faisable ?

  2. #2
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par zaaryy Voir le message
    J'y parviens pour ma fiche avec ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Canvas.StretchDraw(ClientRect, Bitmap);
    Mais impossible pour moi de l'adapter à un panel, cela est-il faisable ?
    Bonjour,

    La plupart du temps, il suffit de passer par le gestionnaire d'événement OnPaint du composant dans lequel on veut dessiner.
    Dans l'exemple suivant, j'ai une image (en fait, n'importe quel bitmap convient) et je la reproduis dans le panneau :

    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
    unit Unit1;
     
    {$mode objfpc}{$H+}
     
    interface
     
    uses
      Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls;
     
    type
     
      { TForm1 }
     
      TForm1 = class(TForm)
        Image1: TImage;
        Panel1: TPanel;
        procedure Panel1Paint(Sender: TObject);
      private
        { private declarations }
      public
        { public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.lfm}
     
    { TForm1 }
     
    procedure TForm1.Panel1Paint(Sender: TObject);
    begin
      with Panel1 do
        Canvas.StretchDraw(ClientRect, Image1.Picture.Bitmap);
    end;
    Le tout fonctionne très bien, à condition évidemment d'avoir une image chargée dans TImage1 .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 14
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup, cela fonctionne parfaitement.

    Je pensais que la liste d'évènements fournie par l'inspecteur d'objet était exhaustive, et n'y voyant pas de OnPaint pour les TPanel je ne savais pas quand appeler mon bout de code...

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 410
    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 410
    Points : 5 801
    Points
    5 801
    Par défaut
    Bonjour,

    si je peux me permettre de modifier un petit peu le code ; pour des raisons obscures que je ne connais pas, les gens ne se servent jamais du sender qui, pourtant, évite bien des erreurs lorsque l'on renomme des composants :
    Citation Envoyé par gvasseur58 Voir le message
    Bonjour,
    ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    unit Unit1;
    
    ...
    procedure TForm1.Panel1Paint(Sender: TObject);
    begin
      with Panel1 do
      with Sender as TPANEL do
        Canvas.StretchDraw(ClientRect, Image1.Picture.Bitmap);
    end;
    ...
    Voilà mes deux cents.
    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

  5. #5
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par anapurna Voir le message
    Bonjour,

    si je peux me permettre de modifier un petit peu le code ; pour des raisons obscures que je ne connais pas, les gens ne se servent jamais du sender qui, pourtant, évite bien des erreurs lorsque l'on renomme des composants :


    Voilà mes deux cents.
    Bonjour,

    Pour deux cents supplémentaires, si je puis me permettre d'apporter moi-même un petit rectificatif, l'argument avancé ne tient qu'avec Delphi, mais pas avec Lazarus qui renomme automatiquement toutes les occurrences d'un composant dans l'ensemble des sources d'un projet. Cela dit, la méthode étant plus générale, elle est plus élégante !
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

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

    et pour deux cents de plus
    non ce n'est pas valable que pour Delphi

    si tu crées un événement dynamiquement attaché à plusieurs panels
    ou que tu attaches visuellement un même événement à différents panels
    pour lequel tu veux les même actions
    j’espère que Lazarus ne te modifie pas le nom du panel à l’intérieur sinon tu n'es pas bien du tout

    qu'il change le nom de l’événement créé dynamiquement je le comprends mais qu'il se permette de modifier du code inscrit dans un événement c'est assez dangereux

    mes deux cents
    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

  7. #7
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 062
    Points : 15 353
    Points
    15 353
    Billets dans le blog
    9
    Par défaut
    Bonsoir ! Cette discussion est très intéressante. Mais j'avoue que pour moi la notion de sender reste assez floue.
    Mon site personnel consacré à MSEide+MSEgui : msegui.net

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

    le sender c'est l'appelant

    donc en règle général le sender est le composant ayant généré l’événement
    pas très compliqué en faite
    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

  9. #9
    Responsable Lazarus & Pascal

    Avatar de gvasseur58
    Homme Profil pro
    Cultivateur de code (bio)
    Inscrit en
    Février 2013
    Messages
    1 436
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Cultivateur de code (bio)
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 1 436
    Points : 20 855
    Points
    20 855
    Billets dans le blog
    84
    Par défaut
    Citation Envoyé par anapurna Voir le message
    si tu crées un événement dynamiquement attaché à plusieurs panels
    ou que tu attaches visuellement un même événement à différents panels
    pour lequel tu veux les même actions
    j’espère que Lazarus ne te modifie pas le nom du panel à l’intérieur sinon tu n'es pas bien du tout
    Salut,

    Oui, ce sont des cas intéressants où les changements ne se font pas et où il est indispensable d'utiliser Sender. Je ne les avais pas en tête dans la simple illustration de l'affichage : c'était la politique du moindre effort pour un cas très simple .
    Accès à mon site et à mon blog. Actualités, cours et ressources Delphi, Lazarus et Pascal.
    Pensez à la balise - Quelqu'un vous a aidé ou vous appréciez une intervention ? Pensez au

  10. #10
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Petit déterrage...

    Bonjour, mais mauvaise nouvelle,

    Citation Envoyé par gvasseur58 Voir le message
    Le tout fonctionne très bien, à condition évidemment d'avoir une image chargée dans TImage1 .
    Et pas du tout sous Linux 32 bits / Gtk2 / FPC 2.6.2 / Laz 1.4 : le panel reste désespérément vide...


    Et je suis sûr que le TImage est chargé car je pars d'un vieux projet où il est bien rempli, je me contente de rajouter le TPanel par-dessus (ne jamais modifier irréversiblement du code qui fonctionne ) et de jouer avec sa propriété Visible :
    • False, je vois bien la belle image chargée dans le TImage ;
    • True, bouhhh qu'il est moche ce TPanel tout gris avec sa Caption au milieu et c'est tout...

    Voilà, quoi.
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  11. #11
    Membre chevronné

    Homme Profil pro
    au repos
    Inscrit en
    Février 2014
    Messages
    429
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : au repos

    Informations forums :
    Inscription : Février 2014
    Messages : 429
    Points : 1 884
    Points
    1 884
    Par défaut
    Salut JP.

    Dans ta version Lazarus, l'événement OnPaint du panel est-il effectif ?
    Si mes souvenirs sont bons, dans d'anciennes versions (et aussi en Delphi7), l'événement n'était pas implémenté.

    Amicalement
    Thierry

  12. #12
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 700
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 700
    Points : 15 043
    Points
    15 043
    Par défaut
    Citation Envoyé par ThWilliam Voir le message
    Salut JP.

    Dans ta version Lazarus, l'événement OnPaint du panel est-il effectif ?
    Si mes souvenirs sont bons, dans d'anciennes versions (et aussi en Delphi7), l'événement n'était pas implémenté.

    Amicalement
    Thierry
    Bien vu !

    Solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Panel1.OnPaint:=@Panel1Paint;
    Merci et bonne journée,
    (On peut surcocher ? )
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  13. #13
    Expert confirmé
    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
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Jipété Voir le message
    Bien vu !

    Solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      Panel1.OnPaint:=@Panel1Paint;
    Merci et bonne journée,
    (On peut surcocher ? )
    C'est bon à savoir une petit tour par la FAQ ThWilliam ?
    • "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: 6
    Dernier message: 21/09/2006, 18h33
  2. Réponses: 5
    Dernier message: 27/09/2005, 10h18
  3. image de fond dans treeview
    Par chancourt dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2005, 17h11
  4. Etirer une image de fond dans une cellule
    Par dreamanoir dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/07/2005, 15h39
  5. Réponses: 4
    Dernier message: 03/05/2005, 10h03

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