Controle frame avancé

Soyez le premier à donner votre avis sur cette source.

Vue 6 279 fois - Téléchargée 1 308 fois

Description

Bonjour tout le monde!
Voici mon 2ème controle activeX.
Une frame pour remplacée celle fournit en standard dans vb6.
Ses caractéristiques:
-trois zones: header/container/footer
-2 types de dégradé: horizontal et vertical
-possibilité d'inclure des images avec gestion de la transparence
-controle "expandable"
-alignement du texte
-ect..

Faîtes moi par de vos critiques, elles seront les bienvenues.
Cordialement,
Tannos

Conclusion :


le code est commenté presque dans sa totalité. Y'a des petites fonctions non encore implémentées. Je pense ajouter un peu de subclassing

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

Bonjour,

Après utilisation de ton frame dans mes sources, je te remonte un tout petit bug et sa correction :
Si on ne met pas d'image dans le Header, ton controle n'affiche pas le text du header, tu as simplement oublié de le redessiner lorsqu'il n'y a pas d'image dans DrawControl au niveau de : 'décalage en fonction de l'icone du header dans les cas m_UseCustomColors vrai ou false, le code modifié (sans l'optimiser) donne :
-- Cas m_UseCustomColors vrai :
'décalage en fonction de l'icone du header
If Not m_HeaderPicture Is Nothing Then
If HeaderPicture <> 0 Then
tR.Left = tR.Left + 3 + m_HeaderPictureSize
DrawCaption tR, m_sHeaderText, m_oHeaderTextColor, m_fHeaderTextFont, ValHeaderTextAlign
Else
tR.Left = tR.Left + 3
DrawCaption tR, m_sHeaderText, m_oHeaderTextColor, m_fHeaderTextFont, ValHeaderTextAlign
End If
End If
-- Cas m_UseCustomColors False :
If HeaderPicture <> 0 Then
tR.Left = tR.Left + 3 + m_HeaderPictureSize
DrawCaption tR, m_sHeaderText, m_lColorHeaderForeColor, m_fHeaderTextFont, ValHeaderTextAlign
Else
tR.Left = tR.Left + 3
DrawCaption tR, m_sHeaderText, m_lColorHeaderForeColor, m_fHeaderTextFont, ValHeaderTextAlign
End If
et ça marche.

Autre Petite remarque:
La belle image, sur laquelle tu as dû passer du temps, que ton controle dessine quand tu le places sur une feuille pèse lourd !
En effet, si tu l'enlèves (picture à aucun sur le usercontrol), ton ocx resdescend à 92 Ko, le gain mémoire peut être appréciable si tu utilises plusieurs fois ton controle sur une feuille, et tu n'y perd rien en design du frame ; d'autre part à l'affichage de la feuille tu ne vois plus l'image de fond que l'on entre-apperçoit sur des machines pas trés rapide avant que ton controle soit dessiné, et si l'ulisateur ballades un controle avec sa souris sur ton frame avec l'image de fond, elle réapparaît furtivement, ce qui n'est pas trés beau, ce qui n'est plus le cas sans l'image.
A part cela Merci beaucoup pour ce gros boulot !
Cordialement
Messages postés
185
Date d'inscription
dimanche 29 juin 2003
Statut
Membre
Dernière intervention
20 juin 2013

Bonjour,
Je découvre ton ocx en cherchant autre chose que le frame de MS. Il est excellent. Merci. 10/10
Messages postés
359
Date d'inscription
mardi 14 octobre 2003
Statut
Membre
Dernière intervention
7 septembre 2009

Excellent. 10/10
Messages postés
2
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
7 mai 2005

aclaration:
le "bug" afecte seulement quand ces propiétés sont modifiquiées en "design time". Le controle est capable de lire cest propiétés en "ReadProperties" mais ill n'actoilise pas ValHeaderTextAlign et ValFooterTextAlign avant de repeindre le controle.
Merçi beaucup.

Mervelleux!!!
Messages postés
2
Date d'inscription
jeudi 10 mars 2005
Statut
Membre
Dernière intervention
7 mai 2005

Bonjour, je ne suis pas français je suis espagnol.
Excusez-moi poutant mes fautes d'orthographe et mon langage.
C'est fantastique votro code mais j'ai découvert un petit "bug" qui consiste que l'alingñement de "header" et de "footer" fonctionnent bien en temp d'exécution mais il ne décrit pas ces valeurs corectement. Humildement je vous envois comment j'ais pus le solutionner pour moi:

j'ais fait une nouvelle fonction pour actoiliser les valeurs pas seulement en "Property Let..." si non en "PropBag.ReadProperty":


******* en UserControl.ReadProperties:
...
...
m_eHeaderTextAlign = PropBag.ReadProperty("HeaderTextAlign", m_def_eHeaderTextAlign)
ValHeaderTextAlign = TraduceAlineacion(m_eHeaderTextAlign)
m_eFooterTextAlign = PropBag.ReadProperty("FooterTextAlign", m_def_eFooterTextAlign)
ValFooterTextAlign = TraduceAlineacion(m_eFooterTextAlign)
...
...

******* et en 2 properties:
Public Property Let HeaderTextAlign(ByVal eHeaderTextAlign As TextAlign)
ValHeaderTextAlign = TraduceAlineacion(CInt(eHeaderTextAlign))
m_eHeaderTextAlign = eHeaderTextAlign
...
End Property

Public Property Let FooterTextAlign(ByVal eFooterTextAlign As TextAlign)
ValFooterTextAlign = TraduceAlineacion(CInt(eFooterTextAlign))
m_eFooterTextAlign = eFooterTextAlign
...
End Property

***** le fonction: ********
Private Function TraduceAlineacion(Alineacion As Integer) As Integer
Select Case Alineacion
Case xAlignLefttop
TraduceAlineacion = DT_LEFT Or DT_TOP Or DT_SINGLELINE
Case xAlignLeftMiddle
TraduceAlineacion = DT_LEFT Or DT_VCENTER Or DT_SINGLELINE
Case xAlignLeftBottom
TraduceAlineacion = DT_LEFT Or DT_BOTTOM Or DT_SINGLELINE
Case xAlignRightTop
TraduceAlineacion = DT_RIGHT Or DT_TOP Or DT_SINGLELINE
Case xAlignRightMiddle
TraduceAlineacion = DT_RIGHT Or DT_VCENTER Or DT_SINGLELINE
Case xAlignRightBottom
TraduceAlineacion = DT_RIGHT Or DT_BOTTOM Or DT_SINGLELINE
Case xAlignCenterTop
TraduceAlineacion = DT_CENTER Or DT_TOP Or DT_SINGLELINE
Case xAlignCenterMiddle
TraduceAlineacion = DT_CENTER Or DT_VCENTER Or DT_SINGLELINE
Case xAlignCenterBottom
TraduceAlineacion = DT_CENTER Or DT_BOTTOM Or DT_SINGLELINE
End Select
End Function
Afficher les 10 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.