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.
Bon week-end;
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
Partager