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 37 38 39 40 41 42 43
   |  
var                                         // mes variables globales
        ShowPageHandle: hWnd;           // handle de la page créée
        ShowCanvasHandle: HDC;          // DC du canvas du picture sur la page créé
 
 
function Test(const funct: integer): integer; stdcall; export;
var
        FDialog: TForm;
        Image: TImage;
        hnd: hWnd;
begin
        hnd := FindWindow(nil,'TestWindow');                // je cherche si ma fenêtre existe
        if hnd=0 then begin                                         // si non: cas normal: je la crée
               FDialog := TForm.Create(nil);                // création de la fenêtre
               ShowPageHandle := FDialog.Handle;       // mémoriser son handle
               FDialog.Caption := 'TestWindow';           // installer son titre
               Image := TImage.Create(FDialog);          // créer une image
               Image.Parent :=  FDialog;                     // la placer sur ma fenêtre
               Image.Height := printer.PageHeight/4;    // forcer les dimensions
               Image.Width := printer.PageWidth/4;
               ShowCanvasHandle := Image.Canvas.Handle;  // mémoriser de DC de l'image
        showmessage(format('A: handle=%x',[ShowCanvasHandle]));
                        // les fonctions suivantes marchent parfaitement:
               Image.Canvas.Font.Name := 'Arial';
               Image.Canvas.Font.Size := 12;
               Image.Canvas.Pen.Color := clBlack;
               Image.Canvas.TextOut(0,0,format('Page %d',[PageNumber]));
               Image.Canvas.Rectangle(100,100,900,900);
                         // les fonctions suivantes NE MARCHENT PAS:
               ShowCanvasHandle := Image.Canvas.Handle;  // mémoriser de DC de l'image à nouveau
        showmessage(format('B: handle=%x',[ShowCanvasHandle]));
               SetBkMode(ShowCanvasHandle, TRANSPARENT);
               TextOut(ShowCanvasHandle,50,50,'Ligne 2',7);
                         // les fonctions suivantes marchent parfaitement:
               TextOut(image.Canvas.Handle,75,75,'Ligne 3',7);
               Image.Canvas.TextOut(50,100,'Ligne 4');
               FDialog.Update;
               FDialog.Show;
        end else begin
               showmessage('La fenêtre est déjà ouverte !');
        end;
end; | 
Partager