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 :

Représentation BMP d'un TComponnent [FAQ]


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Par défaut Représentation BMP d'un TComponnent
    Bonjour à tous,
    J'aimerai capturer la représentation graphique qu'un TComponnent sous un format d'image.
    En gros, il s'agit d'une " capture d'écran " limité à la zone ou le TComponnent est affiché, puis d'une sauvegarde de cette "capture d'écran".
    Merci d'avance

  2. #2
    Membre chevronné Avatar de blonde
    Femme Profil pro
    Développeur Delphi
    Inscrit en
    Septembre 2003
    Messages
    278
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Delphi

    Informations forums :
    Inscription : Septembre 2003
    Messages : 278
    Par défaut
    je ne comprends pas ta question.

    Tu veux récupérer l'image qu'il a dans la palette des composants,
    ou bien son affichage à l'écran lors de l'exécution?

    Un TComponent n'est pas forcément visuel..

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Par défaut
    c est pour l'aspect visuel, lorsqu'il en a un, du compossant en runtime.

  4. #4
    Membre Expert
    Avatar de Merlin
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2002
    Messages
    524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information

    Informations forums :
    Inscription : Mars 2002
    Messages : 524
    Par défaut
    c'est pas clair... c'est le glyph du composant dans la palette que tu veux copier ?
    explique un peu ce que tu veux faire et dans quel but qu'on comprenne..

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Par défaut
    Dsl de ne pas etre clair,
    j'ai un peu de mal.
    Mais bon g reussit faire ce que je veux.
    tout est basé sur ce code a l'orignie:

    http://www.developpez.com/delphi/faq...ur#printscreen

    Voici le code:
    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
     
    var
      bitmap: TBitmap;
      desktopHandle: THandle;
      deviceContext: HDC;
      Filename : String;
      X,Y :Integer;
     
    begin
     
        desktopHandle:= GetDesktopWindow; // Récupération du handle du bureau
        deviceContext:= GetDC(desktopHandle); // Récupération du contexte de périphérique du bureau
     
     
        try
        bitmap.Width:= Compo.Width; // Ajustement de la taille de l'image
        bitmap.Height:= Compo.Height; // pour qu'elle corresponde à celle du composant
     
        X :=  Form1.Left+Compo.Left+form1.Width-form1.ClientWidth-3;
        Y :=   Form1.Top+Compo.Top+form1.Height-form1.ClientHeight-3;
     
        BitBlt(bitmap.Canvas.Handle, 0, 0, bitmap.Width, bitmap.Height,
          deviceContext, X, Y, SRCCOPY); // Copie du TComponent dans l'image bitmap
     
        bitmap.SaveToFile(Filename); // Sauvegarde de l'image dans un fichier bmp
      finally
        bitmap.Free; // Libération de l'image
        ReleaseDC(desktopHandle, deviceContext); // Libération du contexte de périphérique
      end;

    Bon voila, sinon pourquoi -3 c t pour les bordures de mon compo.

  6. #6
    Membre Expert
    Avatar de LadyWasky
    Femme Profil pro
    Inscrit en
    Juin 2004
    Messages
    2 932
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 55
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 932
    Par défaut
    [QR à rédiger pour la FAQ ]

    En fait, tu as deux types de composants qui restituent une image, tu as les TWinControl et les TGraphicControl

    Pour les TWinControl, tu as la méthode PainTo() à ta disposition, par exemple ce code copie un TPanel et son contenu dans un Bitmap :
    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
    procedure WinControl_to_Bitmap(AWinControl:TWinControl;ABitmap:TBitmap);
    begin
      ABitmap.Width:=AWinControl.Width;
      ABitmap.Height:=AWinControl.Height;
      AWinControl.PaintTo(ABitmap.Canvas,0,0);
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    var ABitmap:TBitmap;
    begin
      ABitmap:=TBitmap.Create;
      WinControl_to_Bitmap(Panel1,ABitmap);
      //...
      Form1.Canvas.Draw(0,0,ABitmap);
      ABitmap.Free;
    end;
    Pour les TGraphicControl, tu peux tirer partie du fait qu'ils possède un Canvas (propriété protégée) en utilisant TonBitMap.Canvas.CopyRect() comme ceci :
    (ce code copie un TShape dans un Bitmap)
    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
     
    type
      //Pour rendre la propriété canva publique voir FAQ 
      //Comment acceder aux Méthodes "Protected" d'une classe ?
      //ici : http://delphi.developpez.com/faq/?page=langage#protectedhack
      //La métthode décrite dans la FAQ fonctionne aussi avec les propriétés
      TPublicGraphicControl=class(TGraphicControl);
     
    procedure GraphicControl_to_Bitmap(AGraphicControl:TGraphicControl;ABitmap:TBitmap);
    begin
      ABitmap.Width:=AGraphicControl.Width;
      ABitmap.Height:=AGraphicControl.Height;
      ABitmap.Canvas.CopyRect(ABitmap.Canvas.ClipRect,TPublicGraphicControl(AGraphicControl).Canvas,AGraphicControl.ClientRect);
    end;
     
    procedure TForm1.Button3Click(Sender: TObject);
    var ABitmap:TBitmap;
    begin
      ABitmap:=TBitmap.Create;
      GraphicControl_to_Bitmap(Shape1,ABitmap);
      //...
      Form1.Canvas.Draw(0,0,ABitmap);
      ABitmap.Free;
    end;
    A partir de là, tu peux combiner les deux dans une procedure un peu plus générique en sachant que TWinControl et TGraphicControl dérivent toutes les deux de la classe TControl :

    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
    procedure Control_to_Bitmap(AControl:TControl;ABitmap:TBitmap);
    begin
      if (AControl is TWinControl) then WinControl_to_Bitmap((AControl as TWinControl),ABitmap);
      if (AControl is TGraphicControl) then GraphicControl_to_Bitmap((AControl as TGraphicControl),ABitmap);
    end;
     
    procedure TForm1.Button4Click(Sender: TObject);
    var ABitmap:TBitmap;
    begin
      ABitmap:=TBitmap.Create;
      Control_to_Bitmap(Panel1,ABitmap);
      //...
      Form1.Canvas.Draw(0,0,ABitmap);
      //...
      Control_to_Bitmap(Shape1,ABitmap);
      //...
      Form1.Canvas.Draw(0,0,ABitmap);
      ABitmap.Free;
    end;
    Bon dev

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2006
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 4
    Par défaut
    merci
    ca va nettement mieux marché maintenant

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

Discussions similaires

  1. Bmp pour boutons
    Par Fizgig dans le forum Outils
    Réponses: 5
    Dernier message: 22/08/2002, 11h56
  2. Impression d'image bmp
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 18/07/2002, 10h38
  3. [TP]Charger un fichier bmp
    Par flavien tetart dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 30/06/2002, 20h04
  4. Réponses: 2
    Dernier message: 30/05/2002, 11h19
  5. Création image BMP
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h04

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