Bonjour à tous,

Jje développe une application pour récupérer les extensions présentes sur l'ordinateur. Je souhaite récupérer chaque extension et son image. J'ai créé le code suivant pour la création dynamique sur TScrollBox :

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
 
 
  ...
  with TImage.Create(Self) do
  begin
     Parent   := ScrollBox;
     Name     := 'IconeType' + IntToStr(Co);
     Top      := PosTop;
     Left     := PosLeftI + 60;
     Width    := 40;
     Height   := 40;
     AutoSize := True;
     Visible  := True;
     //Recherche de l'image du fichier
     StrpCopy(Fichier, Prog);
     H := ExtractIcon(handle, Fichier, 0);
     Picture.Icon.ReleaseHandle;
     Picture.Icon.Handle := H;
  end; //TImage.Create(Self) do
Le résultat est correct : chaque image de fichier est affichée dans le ScrollBox. Voici maintenant la procédure que j'ai créé pour imprimer dans une boucle pour lire tous les composants TImages du ScrllBox parent :

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
 
 
var
  ...
  Zone : TRect;
  ...
 
begin
  Try
    with Printer do
    begin
       BeginDoc;
       ....
       Zone := Rect(20, 
                         PosLigne, 
                         TImage(Components[i]).Picture.Bitmap.Width + 50                         ,TImage(Components[i]).picture.Width + 50);
        PrintBitmap(Canvas, 
                        Zone, 
                        TImage(Components[i]).Picture.Bitmap);
        ...
       end;
    end;
Voici la procédure PrintBitmap :

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
 
 
{______________________________________________________________}
procedure TForm1.PrintBitmap(Canvas: TCanvas; DestRect: TRect; Bitmap: TBitmap);
 
var
  Header, Bits: Pointer;
  HeaderSize: DWORD;
  BitsSize: DWORD;
 
begin
  GetDIBSizes(Bitmap.Handle, HeaderSize, BitsSize);
  Header := AllocMem(HeaderSize);
  Bits   := AllocMem(BitsSize);
  Try
    GetDIB(Bitmap.Handle, Bitmap.Palette, Header^, Bits^);
    StretchDIBits(Canvas.Handle,
                  DestRect.Left,
                  DestRect.Top,
                  DestRect.Right,
                  DestRect.Bottom,
                  0,
                  0,
                  Bitmap.Width,
                  Bitmap.Height,
                  Bits,
                  TBitmapInfo(Header^),
                  DIB_RGB_COLORS, SRCCOPY);
  Finally
    FreeMem(Header, HeaderSize);
    FreeMem(Bits, BitsSize);
  end;
end; 
 
Mai aucune image n'est imprimée, aves-vous une suggestion, une remarque pour m'aider ? Merci d'avance.