Afficher un Bitmap dans la zone cliente d'une Fiche Parente MDI



télécharger le projet exemple (6.10 ko)

Si vous avez déjà essayé d'afficher une image de fond sur une fiche princiaple MDI avec Delphi 3 ou 4, vous aurez remarqué que cela ne fonctionne pas.

Créez un nouveau Projet et définissez les propriétés suivantes pour la fiche:

Fiche

FormStylefsMDIForm



Placez un composant TImage (Page Supplément) sur la fiche, et assignez lui une image Bitmap (Propriété Picture). Trouvez le commentaire { Déclarations Privées } dans la déclatation de la fiche
Ajoutez ces lignes juste en Dessous:


Lignes à ajouter

{ Déclarations Privées }
FClientInstance : TFarProc;
FPrevClientProc : TFarProc;
procedure ClientWndProc(var Message: TMessage);



Trouvez la ligne "implementation" et la ligne {$R *.DFM} qui la suit. Après cette ligne, ajoutez ce code:


ClientWndProc

{$R *.DFM}

implementation

procedure TForm1.ClientWndProc(var Message: TMessage);
var
  Dc : hDC;
  Row : Integer;
  Col : Integer;
begin
  with Message do
    case Msg of
      WM_ERASEBKGND:
      begin
        Dc := TWMEraseBkGnd(Message).Dc;
        for Row := 0 to ClientHeight div Image1.Picture.Height do
          for Col := 0 to ClientWidth div Image1.Picture.Width do
            BitBlt(Dc,
               Col * Image1.Picture.Width,
               Row * Image1.Picture.Height,
               Image1.Picture.Width,
               Image1.Picture.Height,
               Image1.Picture.Bitmap.Canvas.Handle,
               0,
               0,
               SRCCOPY);
          Result := 1;
      end;
      else
        Result := CallWindowProc(FPrevClientProc,
                                 ClientHandle,
                                 Msg,
                                 wParam,
                                 lParam);
  end;
end;



Dans la méthode OnCreate de la fiche, entrez les lignes de code suivantes:


OnCreate

FClientInstance := MakeObjectInstance(ClientWndProc);
FPrevClientProc := Pointer(GetWindowLong(ClientHandle,
                           GWL_WNDPROC));
SetWindowLong(ClientHandle,
              GWL_WNDPROC, LongInt(FClientInstance));



Ajoutez une nouvelle fiche à votre projet et mettez sa propriété FormStyle sur fsMDIChild. Vous avez maintenant un projet MDI fonctionnel avec un Papier-Peint qui couvre la zone cliente de la fiche MDI.


3 requête(s) SQL executée(s) en 0.008 Secs - Temps total de génération de la page : 0.013 Secs