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

Langage Delphi Discussion :

Capture "écran" d'une grille


Sujet :

Langage Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Par défaut Capture "écran" d'une grille
    Bonjour,

    Je cherche à capturer une grille sur une feuille. Cette grille n'est pas entièrement visible, une partie est cachée et peut se dévoiler avec les ascenceurs d'un scrollbox. Comment faire pour avoir la capture de toute la grille en bmp (y compris la partie cachée)

    Pour l'instant mon code est le suivant

    ZColorStringGrid est un compo grille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    GridImage := TBitmap.Create;
    Try
      GridImage.width := ZColorStringGrid.Canvas.ClipRect.Right - ZColorStringGrid.Canvas.ClipRect.Left;
      GridImage.Height := ZColorStringGrid.Canvas.ClipRect.Bottom - ZColorStringGrid.Canvas.ClipRect.Top;
      GridImage.canvas.CopyRect(GridImage.canvas.ClipRect, ZColorStringGrid.Canvas, ZColorStringGrid.Canvas.ClipRect);
     
      Clipboard.Assign(GridImage);
      finally
        GridImage.Free;
      end;

  2. #2
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    GridImage := TBitmap.Create;
    Try
      GridImage.width := ZColorStringGrid.Canvas.ClipRect.Right - ZColorStringGrid.Canvas.ClipRect.Left;
      GridImage.Height := ZColorStringGrid.Canvas.ClipRect.Bottom - ZColorStringGrid.Canvas.ClipRect.Top;
      GridImage.canvas.CopyRect(ZColorStringGrid.clientrect,canvas,ZColorStringGrid.Clientrect);  
      Clipboard.Assign(GridImage);
      finally
        GridImage.Free;
      end;
    [/QUOTE]


    En ajoutant un simple copyrect, ce n'est pas bon ? (il faut que rien ne soit sur la grille...)


    a+

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2005
    Messages
    1 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Par défaut
    non, apparemment...
    déjà, il faurait copier sur le canvas de la grille et définir un rect qui soit de la dimension du total des colonnes et des lignes et faire peut-être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GridImage.canvas.CopyRect(monrect,ZColorStringGrid.canvas,monrect);
    avec monrect dont les dimensions soient: nb de colonnes x largeur et nb de lignes x hauteur de lignes.

    à voir...mais, j'en suis pas convaincu...lol (avec les barres de défilements....

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 101
    Par défaut
    Par définition un contrôle Windows ne dessine que la partie visible à l'écran !
    La méthode PaintTo du WinControl ne te donnera que ce qu'il y a d'afficher !

    Si tu souhaites imprimer une grille, utilise des composants de reporting que te permettront d'imprimer une grille sur plusieurs pages !

    tu peux encore dessiner toi même la grille, cela reste faisable !
    Si c'est pour imprimer, il faut jouer avec le conversion Pixel/Inch
    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

  5. #5
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Par définition un contrôle Windows ne dessine que la partie visible à l'écran !
    Il existe des outils comme snagit qui arrivent à faire une capture du contenu entier.
    Comment font-ils ?
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 101
    Par défaut
    Ces Outils doivent change le Device Context pour dire au WinControl qu'il peut dépasser de son rectangle de fenêtre !

    C'est un bon sujet de recherche !
    Il faudrait reprendre le code de "TWinControl.PaintTo(DC: HDC; X, Y: Integer)" et d'agrandir la taille du DC au lieu de se limiter au Rectangle de fenêtre
    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

  7. #7
    Membre chevronné Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    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
    procedure ControlToBitMap(aControl: TWinControl; var aBitmap: TBitmap;
      Ratio: integer = 2);
    var
      BmpControl             : TBitmap;
      //  BmpResult: TBitmap;
    begin
      try
        BmpControl := TBitmap.Create;
     
        BmpControl.Width := aControl.Width;
        BmpControl.Height := aControl.Height;
     
        BmpControl.Canvas.Lock;
        aControl.PaintTo(BmpControl.Canvas.Handle, 0, 0);
        BmpControl.Canvas.UnLock;
     
        aBitMap.Width := BmpControl.Width div Ratio;
        aBitMap.Height := BmpControl.Height div Ratio;
     
        SetStretchBltMode(aBitMap.Canvas.Handle, HalfTone);
        StretchBlt(aBitMap.Canvas.Handle, 0, 0, aBitMap.Width, aBitMap.Height,
          BmpControl.Canvas.Handle, 0, 0, BmpControl.Width, BmpControl.Height,
          SRCCOPY);
        //aBitMap.Canvas.StretchDraw(Rect(0, 0, aBitMap.Width, aBitMap.Height)
        //  , BmpControl);
      finally
        BmpControl.Free;
      end;
    end;

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

Discussions similaires

  1. Capture d'écran avec SDL à une résolution choisie
    Par shenron666 dans le forum OpenGL
    Réponses: 3
    Dernier message: 02/05/2006, 09h27

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