Impression de form

bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008 - 25 juin 2006 à 10:24
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008 - 26 juin 2006 à 17:39
Savez-vous comment faire pour imprimer une form en entière, car elle dépasse de l'écran, en format paysage ?

J'ai déjà essayé form.print et ceci :

// PrintScale : type de mise à l'échelle de la form à imprimer
  // Valeurs possibles : aucune (poNone) [par défaut], proportionnelle
  // (poProportional) ou ajustée à la page (poPrintToFit)
  PrintScale := poProportional;
  // Printer.Orientation : disposition en portrait (poPortrait)
  // ou paysage (poLandscape)
  Printer.Orientation := poLandscape;
  // Imprime un aperçu de la form
  Print;

sans success.

Merci de votre réponse.

[:)]

11 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
25 juin 2006 à 12:55
Salut,
tu peux essayer de passer par un Bitmap :

pour tester tu mets un bouton et un TImage sur une form (TImage : AutoSize à False et Stretch à True et de taille plus petite que la Form) et tu complètes comme ceci :

Procedure FormShot(bmp: TBitMap);
var
  c: TCanvas;
  r: TRect;
begin
  c:= TCanvas.Create;
  c.Handle:= GetWindowDC (Form1.Handle);
  try              
    r: = Rect(0,0,Form1.width,Form1.height);
    bmp.Width:= Form1.Width;
    bmp.Height:=Form1.Height;
    bmp.Canvas.CopyRect(r, c, r);
  finally
    ReleaseDC(0, c.handle);
    c.Free;
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
Var Bm : TBitmap;
begin
  Bm : = TBitmap.Create;
  FormShot(Bm);
  Image1.Picture.Bitmap.Assign(Bm);
  Bm.Free;
end;

ensuite tu peux imprimer le bmp très facilement

Il existe peut être une autre solution mais celle-ci fonctionne

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
25 juin 2006 à 14:04
Il serait plus simple d'utiliser GetFormImage, non?

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
25 juin 2006 à 15:36
Merci, je vais tester.

[:)]
0
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
25 juin 2006 à 15:59
Merci, mais comment imprimer l'image générée ?

[:)]
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
25 juin 2006 à 18:57
Désolé mais le code que tu m'a donné c'est comme si je faisais FORM1.PRINT

Je ne veux pas de cela, car ma form est plus grande que l'écran.

Je veux que ce qui dépasse de l'écran soit imprimé aussi.

Merci de votre aide

[:)]
0
Utilisateur anonyme
25 juin 2006 à 19:02
Salut,

D'après ce que je vois la méthode de Cirec consiste à faire un sorte de scren shot de ta forme et d'afficher dans un TImage. Il te reste alors à imprimer le contenu de ton TImage.

De ce fait la méthode de Cirec doit fonctionner.
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
25 juin 2006 à 19:52
non, je conteste bdgta, mon code adapte la taille de l'image à la taille de la page.
Pour voir cela, il suffit de lire tout le contenu du thread de discussion.

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
26 juin 2006 à 00:25
@Nico, la différence entre ma méthode et GetFormImage c'est que
GetFormImage renvoie une image du ClientRect et pas de toute la Form, avec l'autre méthode tu obtiens la Form complète avec le cadre (c'est une vraie impression de Form)

Tiens d'ailleurs à propos d'impression, voici un exemple :

cette exemple est des plus simples, il imprime la Form en mode paysage et il stretch l'image a la taille de la feuille sans tenir compte des proportions

procedure TForm1.Button2Click(Sender: TObject);
Var MargeX,MargeY:Integer;
begin
    with Printer do
    begin
      Orientation := poLandscape;
      MargeX:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETX);
      MargeY:=GetDeviceCaps(Printer.Handle, PHYSICALOFFSETY);
      BeginDoc;
      StretchBlt(Canvas.Handle, MargeX, MargeY, PageWidth - MargeX * 2
                , PageHeight - MargeY * 2, GetWindowDC(Form1.Handle), 0, 0, Width
                , Height, srcCopy);
      EndDoc;
    end;
end;

@+
Cirec
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
26 juin 2006 à 01:05
ok cirec
par contre, je pense que les proportions sont importantes non ?

@+
Nico {www.ni69.info}


N'oubliez pas de cliquer sur Réponse Acceptée lorsque la réponse vous convient !
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
26 juin 2006 à 13:12
oui absolument les proportions sont importantes mais on a souvent tendence à chercher la complication la ou il n'y en a pas

@+
Cirec
0
bdgta Messages postés 63 Date d'inscription jeudi 2 janvier 2003 Statut Membre Dernière intervention 8 septembre 2008
26 juin 2006 à 17:39
Je repose ma question, comment faire pour imprimer une form qui depasse de lecran vers le bas.

Les exemples que vous mavez donne avec gentilesse ne font que prendre l'image affiche sur lecran et non pas la form en entiere. A moins que je n'arrive pas a comprendre le procede.


 


merci de votre aide 

[:)]
0
Rejoignez-nous