|
[.Net] Comment utiliser une interface ? |
Débuté par Michel GARCIA, 10 juil. 2018 21:29 - 5 réponses |
| |
| | | |
|
| |
Membre enregistré 391 messages Popularité : +12 (12 votes) |
|
Posté le 10 juillet 2018 - 21:29 |
Salut à tous. Je n'arrive pas à utiliser un assemblage .Net qui demande un format IFontDisp pour passer les informations. Je retrouve IFontDisp dans la liste des mots que WD me propose (couleur mauve), et lorsque je fais par exemple :
PADTextFont est un objet "IFontDisp" dynamique PADTextFont = allouer un "IFontDisp"("Verdana",12,FontStyle.Regular)
j'obtiens une erreur "Le Framework .NET a renvoyé l'erreur suivante : Cannot create an instance of an interface."
Sinon, j'essaye d'utiliser l'assemblage System.Drawing (System.Drawing.Size) de cette manière :
pclBtnSize est un objet dynamique "System.Drawing.Size" pclBtnSize = allouer un "System.Drawing.Size"(150,60)
Rien à faire. le code originel en VB.net est le suivant :
'btnSign ' Me.btnSign.Location = New System.Drawing.Point(354, 74) Me.btnSign.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnSign.Name = "btnSign" Me.btnSign.Size = New System.Drawing.Size(118, 52) Me.btnSign.TabIndex = 1 Me.btnSign.Text = "Sign" Me.btnSign.UseVisualStyleBackColor = True
Merci pour toute aide me permettant d'avancer sur ce problème. Michel
-- If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT. |
| |
| |
| | | |
|
| | |
| |
Posté le 11 juillet 2018 - 09:54 |
Bonjour, Une interface n'est pas une classe, elle ne peut pas être instanciée. Une interface ne fait que définir un "contrat" qu'une classe doit respecter. Ici tu dois déclarer une classe qui hérite de l'interface, et implémenter les propriétés/méthodes déclarées par l'interface.
Frédéric.
"Michel GARCIA" a écrit dans le message de groupe de discussion : 201818f885c1a825d035cec4778920bdfe6e@news.pcsoft.fr...
Salut à tous. Je n'arrive pas à utiliser un assemblage .Net qui demande un format IFontDisp pour passer les informations. Je retrouve IFontDisp dans la liste des mots que WD me propose (couleur mauve), et lorsque je fais par exemple :
PADTextFont est un objet "IFontDisp" dynamique PADTextFont = allouer un "IFontDisp"("Verdana",12,FontStyle.Regular)
j'obtiens une erreur "Le Framework .NET a renvoyé l'erreur suivante : Cannot create an instance of an interface."
Sinon, j'essaye d'utiliser l'assemblage System.Drawing (System.Drawing.Size) de cette manière :
pclBtnSize est un objet dynamique "System.Drawing.Size" pclBtnSize = allouer un "System.Drawing.Size"(150,60)
Rien à faire. le code originel en VB.net est le suivant :
'btnSign ' Me.btnSign.Location = New System.Drawing.Point(354, 74) Me.btnSign.Margin = New System.Windows.Forms.Padding(4, 5, 4, 5) Me.btnSign.Name = "btnSign" Me.btnSign.Size = New System.Drawing.Size(118, 52) Me.btnSign.TabIndex = 1 Me.btnSign.Text = "Sign" Me.btnSign.UseVisualStyleBackColor = True
Merci pour toute aide me permettant d'avancer sur ce problème. Michel
-- If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 623 messages Popularité : +100 (114 votes) |
|
Posté le 11 juillet 2018 - 11:18 |
Bonjour,
Si IFontDisp est une interface effectivement, il n'est pas possible d'instancier une interface. Dans ce cas, il faut instancier un objet d'une classe qui implémente cette interface.
IL faudrait se tourner vers la doc. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 391 messages Popularité : +12 (12 votes) |
|
Posté le 11 juillet 2018 - 16:54 |
Bonjour Frédéric et François ! Merci pour les clarifications, mais quelque chose ne joue pas, j'obtiens tjrs des erreurs.
L'objet en question vient de System.Drawing.Font
en VB (textFontSize est un entier = 12):
myPad.TextFont = New Font("Verdana", textFontSize, FontStyle.Regular)
WizCtl.Font = myPad.TextFont
En WD :
pclTruc est un System.Drawing.Font dynamique pclTruc = allouer un "System.Drawing.Font"("Verdana",12,FontStyle.Regular)
WizCtl:Font = pclTruc
Et donc j'obtiens une erreur : Echec lors de la lecture du champ <Font> du type <WizCtlClass> Le Framework .Net a renvoyé l'erreur suivante : Object of type "System.Drawing.Font" cannot be converted to type stdole.IFontDisp
J'ai essayé de plusieurs manière possibles :
MaPolice est un objet automation "stdFont"
MaPolice>>Name = "Arial" MaPolice>>Size = 14 MaPolice>>Bold = Vrai
ça ne fonctionne pas non plus, ni avec PoliceCrée de WD... Bref, je ne m'en sors pas. J'ai trouvé des informations chez MSDN : https://msdn.microsoft.com/en-us/library/windows/desktop/ms692695(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/system.drawing.font(v=vs.110).aspx
Et à prioris, Font(String, Single, FontStyle) devrait fonctionner...
Voilà.. Cerveau en mode BSOD, merci à ceux qui pourront éclairer ma lanterne, soyez bénis jusqu'à la 7ème génération !
-- If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT. |
| |
| |
| | | |
|
| | |
| |
Posté le 12 juillet 2018 - 08:17 |
La méthode attend une classe qui implémente l'interface IFontDisp, donc la classe utilisée ici doit implémenter cette interface. Il faut donc une classe qui hérite de l'interface IFontDisp et implémente ses propriétés.
Visiblement le framework .NET propose une méthode pour gérer tout ça (OleCreateFontIndirect), peut-être que tu peux l'utiliser.
Frédéric.
"Michel GARCIA" a écrit dans le message de groupe de discussion : 2018d8e667cfbc93129a7b1e7723597f2066@news.pcsoft.fr...
Bonjour Frédéric et François ! Merci pour les clarifications, mais quelque chose ne joue pas, j'obtiens tjrs des erreurs.
L'objet en question vient de System.Drawing.Font
en VB (textFontSize est un entier = 12):
myPad.TextFont = New Font("Verdana", textFontSize, FontStyle.Regular)
WizCtl.Font = myPad.TextFont
En WD :
pclTruc est un System.Drawing.Font dynamique pclTruc = allouer un "System.Drawing.Font"("Verdana",12,FontStyle.Regular)
WizCtl:Font = pclTruc
Et donc j'obtiens une erreur : Echec lors de la lecture du champ <Font> du type <WizCtlClass> Le Framework .Net a renvoyé l'erreur suivante : Object of type "System.Drawing.Font" cannot be converted to type stdole.IFontDisp
J'ai essayé de plusieurs manière possibles :
MaPolice est un objet automation "stdFont"
MaPolice>>Name = "Arial" MaPolice>>Size = 14 MaPolice>>Bold = Vrai
ça ne fonctionne pas non plus, ni avec PoliceCrée de WD... Bref, je ne m'en sors pas. J'ai trouvé des informations chez MSDN : https://msdn.microsoft.com/en-us/library/windows/desktop/ms692695(v=vs.85).aspx https://msdn.microsoft.com/en-us/library/system.drawing.font(v=vs.110).aspx
Et à prioris, Font(String, Single, FontStyle) devrait fonctionner...
Voilà.. Cerveau en mode BSOD, merci à ceux qui pourront éclairer ma lanterne, soyez bénis jusqu'à la 7ème génération !
-- If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 391 messages Popularité : +12 (12 votes) |
|
Posté le 12 juillet 2018 - 13:06 |
Bonjour Frédérice, merci pour l'information. Je suis dessus. Par contre, j'ai un souci avec ceci, je ne comprend pas comment réaliser une "union" en WD :
Initial point size of the font. Use the int64 member of the CY structure and scale your font size (in points) by 10000.
typedef union tagCY { struct { unsigned long Lo; long Hi; }; LONGLONG int64; } CY, CURRENCY;
En code WL :
tagCY est une structure nLo est un entier sans signe sur 4 octets nHi est un entier sur 4 octets FIN nInt64 est un entier sur 8 octets
Voilà. Merci pour vos commentaires. A+, Michel
-- If it works, don't touch it, don't look at it, AND don't fix it ! No patches, no SP ! JUST DONT FIX IT. |
| |
| |
| | | |
|
| | | | |
| | |
|