csweety13
Messages postés20Date d'inscriptionvendredi 7 mars 2003StatutMembreDernière intervention 6 août 2008
-
15 mai 2006 à 17:04
csweety13
Messages postés20Date d'inscriptionvendredi 7 mars 2003StatutMembreDernière intervention 6 août 2008
-
19 mai 2006 à 16:03
Bonjour,
je travaille en Delphi 6.
J'ai un RicheEdit, dans lequel je copie du texte =>REdTxtJoint.PasteFromClipboard;
Cependant, je voudrais enregistrer ce texte au format image du genre montexte.jpg.
Je ne sais pas comment récupérer mon texte et le convertir en image.
Avez-vous une idée ou un site qui pourrais m'aider.
Ce code génial permet de sauver le contenu d'un TRichEdit dans un fichier image de type Metafile (*.EMF).
Je n'ai pas eu le temps de tout comprendre, mais ça fonctionne du tonnerre de Zeus...
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 18 mai 2006 à 23:35
ça y est j'ai trouvé :
ajouter dans la procédure :
procedure DumpRTFToPagedEMFs(hWndRTFControl : HWND; szEMFFileTitleBase : LPTSTR);
var szMetaName : string;
nRTFTextLength, nStart, nPage : integer;
hRefDC : HDC;
rcMeta : TRECT;
hEMF : HENHMETAFILE;
begin
// First, determine how many chars are in the RTF
nRTFTextLength := GetRTFTextLength( hWndRTFControl );
// Get a reference DC (based on a printer)
hRefDC := GetPrinterDC();
If hRefDC = 0 Then Exit; // ajouter cette ligne et c'est bon
// Set up the meta RECT for 0.01mm units
@+
Cirec
Vous n’avez pas trouvé la réponse que vous recherchez ?
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 16 mai 2006 à 13:33
<!--StartFragment -->
Hi,
Je n'ai pas mieux que la méthode de Cirec...
L'inconvénient majeur de cette manière de procéder est qu'il ne faut pas qu'une application "stay on top" recouvre le RichEdit au moment de la capture.
Pour convertir le Bmp en fichier Jpeg, voici une petite procedure simple et efficace.
uses Jpeg;
procedure SaveBmpToJpegFile(const Bmp: TBitmap; const FileName: TFileName);
const TauxCompressionJpg = 100;
begin
with TJPEGImage.Create do try CompressionQuality : = TauxCompressionJpg;
Assign(Bmp);
SaveToFile(FileName);
finally Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var TmpBmp: TBitmap;
begin TmpBmp := TBitmap.Create;
with TmpBmp do try Width : = RichEdit1.Width;
Height:= RichEdit1.Height;
BitBlt(Canvas.Handle, 0, 0, Width, Height, Form1.Canvas.Handle, RichEdit1.Left, RichEdit1.Top, srcCopy);
//SaveToFile('RichEdit.bmp');
SaveBmpToJpegFile(TmpBmp, 'RichEdit.jpg'); // <- avant Free
finally Free;
end;
end;
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 17 mai 2006 à 11:54
Si tu veux un complément d'aide, peux-tu préciser :
- pourquoi ne pas récupérer le texte dans au format txt, doc ou autre ?
et sinon :
- pourquoi vouloir récupérer le texte au format jpg,
- la taille de cette image jpg,
- le texte est-il n'est-il pas susceptible de déborder du format de cette image ?
csweety13
Messages postés20Date d'inscriptionvendredi 7 mars 2003StatutMembreDernière intervention 6 août 2008 17 mai 2006 à 12:00
Japee,
J'ai besoin de récupérer mon texte FORMATE en image, car ensuite je
dois l'imprimer en tant qu'image. (la référence au fichier image se
fait dans un fichier XML).
La taille de l'image doit être dépendante de la taille du texte, le
richedit s'ajustant automatiquement avec les scrollbox au texte qui est
à l'interieur.
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 18 mai 2006 à 23:30
@ Japee :
super ce code, c'est vraiment génial (à étudier absolument)
Un petit bug toute fois (qui peut devenir gros)
Si au moment de la selection de l'imprimante tu cliques sur Annuler tu te retrouves avec des centaines de fichiers *.emf, de quelques octets, (j'en ai moi même eu 1113) mais si on choisi Ok alors tout est Ok
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 19 mai 2006 à 14:47
Salut,
Alors essaye en modifiant le code comme ceci (Toujours dans la même procédure):
// First, determine how many chars are in the RTF
nRTFTextLength := GetRTFTextLength( hWndRTFControl );
// Get a reference DC (based on a printer)
//hRefDC := GetPrinterDC(); <------ Mettre cette ligne en commentaire
// Get a reference DC
hRefDC : = CreateDC('DISPLAY', Nil, Nil, Nil); <----- et ajouter celle-ci
If hRefDC = 0 Then Exit;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 19 mai 2006 à 15:53
Il faut surtout remercier Japee pour avoir mis la main sur ce code qui est absolument génial,
je n'ai fais que corriger un oubli de l'auteur et une petite modification pour ne plus avoir le PrinterDialog,
mais ça c'est facile à faire quand le gros du code tourne correctement
En tout cas ce petit bout de code ouvre de nouvelles possibilités ...