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 :

Fenêtre invisible en affichant capture d'écran


Sujet :

Langage Delphi

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut Fenêtre invisible en affichant capture d'écran
    Bonjour à tous,

    Je développe un petit jeu dans lequel j'ai mis en place une touche boss. C'est-à-dire que quand on appuie sur espace par exemple, la fenêtre devient invisible, au cas où le patron arriverait à l'improviste.

    Au début, j'avais simplement changé l'attribut Visible de la TForm principale. Mais du coup, quand on appuie à nouveau sur espace, la fenêtre ne réapparait. On a alors perdu le contrôle du programme.

    J'ai donc ajouté une TImage recouvrant tout la TForm, initialement invisible. Cette image affiche un imprime-écran de ce qui figure en-dessous du programme, comme si on faisait un Minimize. Quand on appuie sur espace, l'image est chargée par la méthode BitBlt, les TObjects du jeu deviennent invisibles, et le BorderStyle de la fenêtre est attribué à bsNone.

    Dans le principe, ça se tient. Mais quand ceci est effectué, une bande horizontale en bas et une verticale à droite de la fenêtre, appartenant apparemment à l'image de capture, restent grises.

    Cette erreut vient sûrement des paramètres lors de l'appel à la fonction BitBlt. Mais j'ai trouvé très peu de documentation à ce sujet sur le net.

    Je vous copie le méthode que j'ai écrite, si vous avez des idées pour résoudre ce souci.


    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
    procedure
    TFormJeu.CacherJeu();
    var
      DesktopDC: HDC;
      ImageCapture: TBitmap;
    begin
      if imgMasque.Visible=False then // on cache le jeu
      begin
        ImageCapture := TBitmap.Create;
        ImageCapture.Width := ClientWidth;
        ImageCapture.Height := ClientHeight;
        DesktopDC:=GetDC(GetDesktopWindow);
        self.Visible := False;
        BitBlt(ImageCapture.Canvas.Handle, 0, 0, ClientWidth, ClientHeight, DesktopDc, Left, Top, SrcCopy);
        // aide: BitBlt(HDestDC, RelativeX, RelativeY, SourceWidth, SourceHeight, HSourceDC, 0, 0, SRCCOPY);
        self.Visible := True;
        ReleaseDC(GetDesktopWindow, DesktopDC);
        imgMasque.Picture.Bitmap.Assign(ImageCapture);
        ImageCapture.Free;
        imgMasque.Invalidate;
        pnlJeu.Visible := False;
        btnAnnuler.Visible := False;
        btnInitialiser.Visible := False;
        mmoTexte.Visible := False;
        self.BorderStyle := bsNone;
        imgMasque.Visible := True;
      end else // on restaure l'affichage du jeu
      begin
        imgMasque.Visible := False;
        self.BorderStyle := bsDialog;
        pnlJeu.Visible := True;
        btnAnnuler.Visible := True;
        btnInitialiser.Visible := True;
        mmoTexte.Visible := True;
      end; // else
    end; // procedure
    Bon week-end;

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 644
    Points : 1 975
    Points
    1 975
    Par défaut
    Citation Envoyé par kawasaki Voir le message
    Bonjour à tous,

    Je développe un petit jeu dans lequel j'ai mis en place une touche boss. C'est-à-dire que quand on appuie sur espace par exemple, la fenêtre devient invisible, au cas où le patron arriverait à l'improviste.

    Au début, j'avais simplement changé l'attribut Visible de la TForm principale. Mais du coup, quand on appuie à nouveau sur espace, la fenêtre ne réapparait. On a alors perdu le contrôle du programme.
    et si tu fais une bascule en utilisant alphablend...
    tu dois mettre tes boutons etc à enabled false quand tu rends transparent ta fiche et puis le tour est joué...( après tu remets les enabled de tes contrôles à true pour form non transparente)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if key=$20 then begin
    if bascule then alphablendvalue:=255 else alphablendvalue:=0;
    bascule:=not bascule;
    end;
    end;
    c'est une solution simple...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 19
    Points : 16
    Points
    16
    Par défaut
    Merci Archimède,

    Ta solution est parfaite. Presque trop facile d'ailleurs...
    Bonne journée.

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

Discussions similaires

  1. [Débutant] Afficher une fenêtre invisible
    Par Jarell dans le forum C#
    Réponses: 3
    Dernier message: 25/07/2014, 10h29
  2. Réponses: 1
    Dernier message: 05/11/2013, 18h07
  3. capture d'écran sur une portion de fenêtre
    Par CeCherPH dans le forum MATLAB
    Réponses: 1
    Dernier message: 20/08/2013, 12h27
  4. Afficher des captures d'écran générées toutes les n secondes automatiquement
    Par perloutta dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 13/05/2010, 20h18
  5. Réponses: 12
    Dernier message: 27/01/2006, 19h53

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