PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → .net /GDI+/création enregistrement d'un fichier EMF
.net /GDI+/création enregistrement d'un fichier EMF
Iniciado por vcopovi, jul., 19 2005 1:17 PM - 7 respostas
Publicado em julho, 19 2005 - 1:17 PM
Salut,

Je cherche des compétences concernant la création et l'enregistrement d'un fichier EMF(+) (format vectoriel géré par Windows). Ci-dessous la syntaxe MF à convertir en .net/windev9. Un début de commencement de tuyau serait très apprécié...
En cadeau, notre vectoriseur gratuit

D'avance merci,

Vic
www.siame.com

//----------------------------------------------------
Metafile metafile(L"SampleMetafile.emf", hdc);
{
Graphics graphics(&metafile);
Pen greenPen(Color(255, 0, 255, 0));
SolidBrush solidBrush(Color(255, 0, 0, 255));

// Add a rectangle and an ellipse to the metafile.
graphics.DrawRectangle(&greenPen, Rect(50, 10, 25, 75));
graphics.DrawEllipse(&greenPen, Rect(100, 10, 25, 75));

// Add an ellipse (drawn with antialiasing) to the metafile.
graphics.SetSmoothingMode(SmoothingModeHighQuality);
graphics.DrawEllipse(&greenPen, Rect(150, 10, 25, 75));

// Add some text (drawn with antialiasing) to the metafile.
FontFamily fontFamily(L"Arial");
Font font(&fontFamily, 24, FontStyleRegular, UnitPixel);

graphics.SetTextRenderingHint(TextRenderingHintAntiAlias);
graphics.RotateTransform(30.0f);
graphics.DrawString(L"Smooth Text", 11, &font,
PointF(50.0f, 50.0f), &solidBrush);
} // End of recording metafile.

// Play back the metafile.
Graphics playbackGraphics(hdc);
playbackGraphics.DrawImage(&metafile, 200, 100);
Publicado em julho, 19 2005 - 2:08 PM
Si mes souvenirs sont exacts les fonctions de GDI+ sont contenues dans une dll, donc tu peux utiliser, en windev, les fonctions de cette dll grace a la fonction API ou AppelDLL32. Un problème persiste pour les structures de données !!!
Personnellement je garderai mes procédures existantes dans mon langage d'origine que je stockerai dans une dll, dans mon progamme windev j'appellerai les fonction de ma dll.

En espérant que ça te soit utile.

B N J
Publicado em julho, 19 2005 - 5:18 PM
L'utilisation de .net est à la fois (théoriquement) plus simple et donne véritablement accès "à tout"

Vic

Voilà mon code complet qui consiste à lire un fichier texte (PostScript), à dessiner avec les fonctions de GDI+ et c'est là qu'il me manque la possibilité d'enregistrer en emf le dessin.
Note : Chaque vecteur est composé de ligne(s) droite(s) ou de courbe(s) de bézier d'où l'utilisation de Addbezier et Addline.
Les fonctions DrawPath et FillPath permettent donc de dessiner le contour de la forme et/ou de peindre le contenu de la forme

//------------------------------------------------------------
o_Metafile est un Metafile("c:\testvic.emf")
o_Path est GraphicsPath
o_Pen est Pen(Color::FromArgb(Rouge,vert,bleu))
o_SolidBrush est SolidBrush(Color::FromArgb(Rouge,vert,bleu))

o_Graphics = Graphics::FromHwnd(Handle(<fenetre>))
o_Metafile = MetafileType::EmfPlusOnly
o_Graphics:Set_SmoothingMode(SmoothingMode::AntiAlias)

......
LigneLue = fLitLigne(IdFichier)
TANTQUE LigneLue <> EOT
SELON...
CAS="m" //démarrage du vecteur
o_Path:StartFigure()
CAS="c" //traitement de la courbe de bézier
o_Path:AddBezier(NewPosX,NewPosY,PosInterX1,PosInterY1,PosInterX2,PosInterY2,PosInterX,PosInterY)
CAS="l" //traitement de la ligne
o_Path:AddLine(NewPosX,NewPosY,PosInterX,PosInterY)
CAS="b" //couleur de zone
o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu))
o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu))
FIN
//dessin d'une zone
o_Graphics:DrawPath(o_Pen,o_Path)
o_Graphics:FillPath(o_Pen,o_Path)
o_Path:CloseallFigures()
o_Path:Reset()
FIN
LigneLue = fLitLigne(IdFichier)
FIN
Publicado em julho, 19 2005 - 6:03 PM
Je sais pas si on se comprend très bien. Déjà est-ce que le code que tu
fournis ci-dessous compile ? (ça fait un moment que j'ai pas utilisé les wmf
ou emf)
Je pense que l'enregistrement est automatique a chaque appel des fonctions
de dessin, donc tu n'as pas besoin d'enregistrer. Par contre je pense que tu
n'utilise pas le bon constructeur Metafile : il manque le hdc (comme dans
ton premier message). Le constructeur que tu utilise là est juste pour la
lecture et non pour l'enregistrement.
De meme pour le constructeur Graphics je pense qu'il te faut utiliser le
constructeur qui a la signature suivante : Graphics::Graphics(Image *); en
paramètre tu peux passer ta variable metafile
Par la suite je pense que chaque méthode de graphics ecrira automatiquement
dans le fichier emf.
Voilà mon avis, tiens moi au courant.
Bonne chance
B N J

"vic" <vcopovi@wanadoo.fr> a écrit dans le message de
news:42dcf2bf$1@news.pcsoft.fr...

L'utilisation de .net est à la fois (théoriquement) plus simple et donne

véritablement accès "à tout"

Vic

Voilà mon code complet qui consiste à lire un fichier texte (PostScript),

à dessiner avec les fonctions de GDI+ et c'est là qu'il me manque la
possibilité d'enregistrer en emf le dessin.
> Note : Chaque vecteur est composé de ligne(s) droite(s) ou de courbe(s) de
bézier d'où l'utilisation de Addbezier et Addline.
Les fonctions DrawPath et FillPath permettent donc de dessiner le contour

de la forme et/ou de peindre le contenu de la forme

//------------------------------------------------------------
o_Metafile est un Metafile("c:\testvic.emf")
o_Path est GraphicsPath
o_Pen est Pen(Color::FromArgb(Rouge,vert,bleu))
o_SolidBrush est SolidBrush(Color::FromArgb(Rouge,vert,bleu))

o_Graphics = Graphics::FromHwnd(Handle(<fenetre>))
o_Metafile = MetafileType::EmfPlusOnly
o_Graphics:Set_SmoothingMode(SmoothingMode::AntiAlias)

......
LigneLue = fLitLigne(IdFichier)
TANTQUE LigneLue <> EOT
SELON...
CAS="m" //démarrage du vecteur
o_Path:StartFigure()
CAS="c" //traitement de la courbe de bézier

o_Path:AddBezier(NewPosX,NewPosY,PosInterX1,PosInterY1,PosInterX2,PosInterY2
,PosInterX,PosInterY)
CAS="l" //traitement de la ligne
o_Path:AddLine(NewPosX,NewPosY,PosInterX,PosInterY)
CAS="b" //couleur de zone
o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu))
o_Pen:set_Color(Color::FromArgb(Rouge,vert,bleu))
FIN
//dessin d'une zone
o_Graphics:DrawPath(o_Pen,o_Path)
o_Graphics:FillPath(o_Pen,o_Path)
o_Path:CloseallFigures()
o_Path:Reset()
FIN
LigneLue = fLitLigne(IdFichier)
FIN



Publicado em julho, 19 2005 - 7:33 PM
Merci pour tes commentaires. Je crois que tu as raison en ce qui concerne le constructeur metafile (c'est là le problême car je ne fais qu'aborder .net)
Toute "ma doc" se réduit à la page suivante
http://msdn.microsoft.com/library/default.asp….

Quelle serait alors la définition de ce constructeur ?

Si l'enregistrement est automatique quelle serait la manip pour nommer le fichier ?

Je ne sais pas si tu es allé sur notre site et si tu as téléchargé VectorEye2 (le problême que nous avons c'est que nous voulons nous affranchir du viewer SVG d'Adobe au profit d'un dessin direct avec GDI+), mais si tu me passes la pre-key générée par VE sur ton ordi, je t'enverrai une licence définitive.

Vic
Siame
Publicado em julho, 20 2005 - 12:05 PM
Je pense que le bon constructeur metafile à employer :
Metafile( const WCHAR *fileName,
HDC referenceHdc,
EmfType type,
const WCHAR *description
);les deux derniers paramètres sont facultatifs.En ce qui concerne le nom du
fichier c'est le premier paramètre du constructeur.Tiens voilà quelques
liens qur d'autres pages de la msdn
:http://msdn.microsoft.com/library/default.asp…
Plus/GDIPlusReference/Classes/MetafileClass/MetafileConstructors/Metafile_59
fileName_referenceHdc_type_description.asphttp://msdn.microsoft.com/library/
default.asp?url=/library/en-us/gdicpp/GDIPlus/GDIPlusReference/Classes/Metaf
ileClass/MetafileConstructors/Metafile_24filename.asphttp://msdn.microsoft.c
om/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/metafile.asphttp://
msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/GDIPlusreference/classes/gra
phics.aspBonne chance, je vais allez voir votre siteB N J
"vic" <vcopovi@wanadoo.fr> a écrit dans le message de
news:42dd127f$1@news.pcsoft.fr...

Merci pour tes commentaires. Je crois que tu as raison en ce qui concerne

le constructeur metafile (c'est là le problême car je ne fais qu'aborder
..net)
Toute "ma doc" se réduit à la page suivante

http://msdn.microsoft.com/library/default.asp….

Quelle serait alors la définition de ce constructeur ?

Si l'enregistrement est automatique quelle serait la manip pour nommer le

fichier ?

Je ne sais pas si tu es allé sur notre site et si tu as téléchargé

VectorEye2 (le problême que nous avons c'est que nous voulons nous
affranchir du viewer SVG d'Adobe au profit d'un dessin direct avec GDI+),
mais si tu me passes la pre-key générée par VE sur ton ordi, je t'enverrai
une licence définitive.

Vic
Siame



Publicado em julho, 20 2005 - 8:48 PM
Rien à faire, ça ne marche pas. Aurais-tu un exemple simple (dessiner un simple carré, avec des noms de fichiers...) ?

Vic
Publicado em setembro, 15 2005 - 11:19 AM
J'ai tenté de créer une classe GDI+ en windev mais j'ai été bloqué sur les fonction de dessin
qui n'affiche rien même si le code ne fait pas d'erreur

ce qui est vraimment étrange c'est que j'ai ecrit exactement le même code sous VB6 et cela fonctionnait

En tout cas j'ai déjà le code d'init de GDI+ et il serait interressant de se mettre a plusieurs pour ecrire ensemble une classe globale pour GDI+ (tracé, export image, dégradés,...)


PS : Je ne comprends pas votre code ce n'est pas du code windev valide.

Attention : Pour utiliser GDI+ en Windev ou VB il faut absolument utiliser l'API Flat