cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 2009
-
11 sept. 2007 à 18:40
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 2009
-
12 sept. 2007 à 12:21
Bonsoir à toutes et à tous,
Je dispose de deux fiche, sur la 1ère (formvisu) je charge une photo dans un Timage et j'ai un Tprintersetupdialog, sur la seconde je réalise un aperçu avant d'imprimer avec un TprintDialog, un Timage et un Tscrollbox.
Je vérifie en affichant ma fiche 2 en showmodal, j'ai bien mon image placée sur un fond blanc en mode portrait.
Je ferme ma fiche 2 et j'ouvre Tprintersetupdialog pour mettre le mode paysage, j'ouvre à nouveau ma fiche 2, mon image se trouve en mode paysage ainsi que le fond blanc mais ce fond est emputé d'une partie, comme si il avait gardé la largeur du fond en mode portrait.
procedure TMain.Apercu;
var
Rect: TRect;
begin
Rect.Top := 10;
Rect.Left := 10;
begin
Rect.Right := 10 +trunc(Formvisu.Imagevisu.Picture.Graphic.Width *zooml) div 10;
Rect.Bottom := 10 +trunc(Formvisu.Imagevisu.Picture.Graphic.Height *zoomh) div 10;
end;
Imageprint.Canvas.Pen.Mode := pmWhite;
Imageprint.Canvas.Rectangle (0, 0, Imageprint.Width, Imageprint.Height);
Imageprint.Canvas.StretchDraw (Rect,Formvisu.Imagevisu.Picture.Graphic);
end;
procedure TMain.FormActivate(Sender: TObject);
Var
Tp,Lft:Word;
begin
//dimensionne l'image pour être au milieu de l'écran.
Imageprint.Width := Printer.PageWidth div 10;
Imageprint.Height := Printer.PageHeight div 10;
tp:=Round((Sbox1.Height-Imageprint.Height)/2);
Imageprint.Top:=tp;
Lft:=Round((Sbox1.Width-Imageprint.Width)/2);
Imageprint.Left:=Lft;
zooml:=4;
zoomh:=4;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 11 sept. 2007 à 22:20
procedure TMain.Apercu;
var
Rct: TRect;
begin
Rct := Rect( 10,
10,
10 +round(Formvisu.Imagevisu.Picture.Graphic.Width *zooml) div 10,
10 +round(Formvisu.Imagevisu.Picture.Graphic.Height *zoomh) div 10
);
with ImagePrint.Canvas do
begin
Pen.Mode := pmWhite;
Rectangle(0, 0, Imageprint.Width, Imageprint.Height);
StretchDraw(Rct, Formvisu.Imagevisu.Picture.Graphic);
end;
ImagePrint.Refresh;
end;
procedure TMain.FormActivate(Sender: TObject);
begin
//dimensionne l'image pour être au milieu de l'écran.
with ImagePrint do
begin
Width := Printer.PageWidth div 10;
Height := Printer.PageHeight div 10;
Top := (Sbox1.Height-Height) shr 1;
Left := (Sbox1.Width-Width) shr 1;
end;
zooml := 4;
zoomh := 4;
//Appelle la procedure Apercu
Apercu;
end;
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 11 sept. 2007 à 22:59
@ Foxi, merci de m'avoir répondu, j'ai essayé ta solution et malheureusement j'arrive au même résultat.
En fait à la première éxécution de l'application, si je choisis le mode paysage avant d'afficher la fiche 2, j'obtiens bien ce mode et le canevas est complet avec ma photo, par contre si je ferme la fiche 2 et que je régle le mode portrait, le canevas n'est pas complet.
Si à la première éxécution de l'application, je choisis le mode portrait avant d'afficher la fiche2, j'obtiens bien ce mode et le canevas est complet avec ma photo, par contre si je ferme la fiche 2 et que je régle le mode paysage, le canevas n'est pas complet.
Je continue aussi a chercher de mon côté, car apparemment c'est l'image ou le scrollbox qui n'est pas raffraîchit.
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202235 12 sept. 2007 à 08:39
ok alors c'est un probleme de conception.
sincerement, les evenements OnShow et OnActivate, je trouve qu'on finit par s'y perdre (un peu comme la droite et la gauche, l'est et l'ouest ... selon le sens qu'on est tourné ça change tout)...
a part les OnPaint, OnClick et OnCreate/OnDestroy ...
quand j'ai une fiche enfant, me servant d'aperçus, ou about, ou autre, je crée toujours une fonction pour l'appeler :
TForm2 = ...
public
function Execute(arguments) : boolean; // showmodal ou
procedure Execute; // show pas modal
end;
et la, dans cette methode d'appel, je gere tout ce qui attrait au bon fonctionnement de cette fiche.
sans attendre le declenchement d'un evenement quelconque, qu'on sais pas si il vas bien etre declanché tout le temps.
ici, le mieux serait de ne pas travaillé sur le canvas de TImage mais sur un bitmap qu'on fournirait a TImage (reglé en center/stretchdraw et pas autosize).
Vous n’avez pas trouvé la réponse que vous recherchez ?
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 12 sept. 2007 à 09:08
Bonjour à toutes et à tous,
@ Foxi, tu peux pas savoir le nombre d'essais de tous genre pour ce problème qui se produit que si on change le mode de l'impression après celui par défaut tout compte fait.
Aurais tu une piste, un bout de code pour réaliser une fiche d'aperçu ?