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 :

Problème de screenshot


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut Problème de screenshot
    Bonjours

    Je tente de capturer le contenu graphique d'un composant de ma fenêtre.
    J'ai commencé par chercher à faire une capture d'écran tout simple.
    J'ai trouvé plusieurs solutions sur le forum et ailleur, mais j'ai toujours le même problème.

    L'image résultante ne contient que les icones de la barre des tâches.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
      DCDesk: HDC;
      bmp: TBitmap;
    begin
      bmp := TBitmap.Create;
      bmp.SetSize(Screen.Width, Screen.Height);
      DCDesk := GetWindowDC(GetDesktopWindow);
      BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY);
      bmp.SaveToFile('ScreenShot.bmp');
      ReleaseDC(GetDesktopWindow, DCDesk);
      bmp.Free;

  2. #2
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Utilise un TCanvas.
    Tu lui affecte le handle d'un composant et/ou 0 pour l'ecran.
    Puis une copie ou un assign dans un TBitmap de bonne taille devrais faire l'affaire.

    A noter que l'on peut peut etre directement affecter le handle du canvas du bitmap ... a tester.
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    J'ai essayé de copier le contenu du canvas de mon composant avec la méthode Assign(). Je reçois une exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Canvas:= TControlCanvas.Create;
    Canvas.Assign( MyComponent.Canvas );

  4. #4
    Membre chevronné
    Avatar de Clorish
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 474
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 474
    Points : 2 158
    Points
    2 158
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Var Canvas : TCanvas;
    Canvas := TCanvas.Create;
    Canvas.Handle := MonControl.Handle;
    Eventuelement passer par un GetHDC ....
    On passe du temps a vous repondre, alors soyez sympas, passez du temps ..... a vous relire !
    --
    Pourquoi tant de haine pour cette pauvre aide Delphi ????
    Aiiimezzz laaaaa .... Si-Non-Cham-Pi-Gnon !!!
    --
    Pour plus de Renseignements : Venez me rejoindre sur Msn .... Promis je mords pas

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Merci.
    J'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    var
      Bitmap: TBitmap;
    begin
      Bitmap:= TBitmap.Create;
      Bitmap.SetSize(Fenetre.Editeur.Width, Fenetre.Editeur.Height);
      Bitmap.Handle:= Fenetre.Editeur.Handle;
      Bitmap.SaveToFile('Screenshot.bmp');
      Bitmap.ReleaseHandle();
      Bitmap.Free;
    ...j'obtient une image de zéro octes.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut screenshot d'un composant TEdit dans un TImage
    J'ai trouvé un example de Loupe en delphi qui ma permis de trouver ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
      Form1.Image1.Canvas.Handle:= getDC(Form1.Edit1.Handle);
      Form1.Image1.Canvas.CopyRect(
        Form1.Image1.ClientRect,
        Form1.Image1.Canvas,
        Form1.Edit1.ClientRect );
    end;
    merci @Clorish

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Voici le but de mon programe.
    J'utilise un dérivé de TEdit qui permet de maintenir plusieurs tampons (fichiers) ouverts. Je souhaite afficher des vignettes du contenu des ces tampons.

    Voila ce que je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    begin
    Image.Canvas.Handle:= getDC(Fenetre.Editeur.Handle);
    Image.Canvas.CopyRect(
      Image.ClientRect,
       Fenetre.Editeur.Canvas,
       Fenetre.Editeur.ClientRect );
    end;
    Image est un Timage créer dynamiquement.
    Editeur est un composant dérivé de TEdit.
    Fenetre est un TForm.

    1. Le contenu graphique capturé n'est pas toujours le contenu de Edit, mais de ce tout les autres composants qui rentre dans la zone ClientRect de Edit
    2. Le contenu est tout le temps mis à jour, a chaque appel de Paint() je suppose, je preférerais contôler les sceenshots.

    Je comprend donc que la resource DC n'est pas le contenu graphique de mon composant Edit mais plutot l'adresse mémoire graphique de Fenetre.

    Comment je peux cloner le contenu graphique et non pointer dessus.

  8. #8
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Tu as dans la JVCL un composant pour faire les captures d'écran avec un exemple (JvScreenCapture ?)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par philnext Voir le message
    Tu as dans la JVCL un composant pour faire les captures d'écran avec un exemple (JvScreenCapture ?)
    J'ai trouvé merci !

  10. #10
    Membre chevronné Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 552
    Points : 1 780
    Points
    1 780
    Par défaut
    Et du coup c'est résolu ou pas ??

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 60
    Points : 54
    Points
    54
    Par défaut
    Citation Envoyé par philnext Voir le message
    Et du coup c'est résolu ou pas ??
    Oui c'est résolu, merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var
      Bitmap: TBitmap;
    begin
      Bitmap := TBitmap.Create;
      ScreenShot(
        Bitmap,
        Fenetre.Editeur.Left,
        Fenetre.Editeur.Top,
        Fenetre.Editeur.Width,
        Fenetre.Editeur.Height,
        Fenetre.Handle);
      Image.Picture.Bitmap.Assign(Bitmap);
      Bitmap.Free;
    end;

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

Discussions similaires

  1. Problème ScreenShot C#
    Par Toto01100 dans le forum C#
    Réponses: 3
    Dernier message: 03/03/2014, 15h03
  2. Réponses: 0
    Dernier message: 16/09/2008, 20h03
  3. Réponses: 1
    Dernier message: 24/02/2008, 22h16
  4. screenshot problème d'affichage
    Par je®ome dans le forum Windows XP
    Réponses: 6
    Dernier message: 25/04/2007, 14h42
  5. Problème d'installation oracle 8.1.7 sous NT
    Par Anonymous dans le forum Installation
    Réponses: 7
    Dernier message: 02/08/2002, 14h18

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