2017-10-10 7 views
3

Désolé, je ne sais pas comment le nommer autre que "propriétés personnalisées avancées". Si je le sais, je le chercherais d'abord.Comment implémenter des propriétés personnalisées avancées dans les contrôles usuels VB6?

Je fais affaire avec un code existant en utilisant des contrôles de tiers.

Dans VB6, lorsque vous faites glisser ce contrôle sur le formulaire, vous pouvez voir toutes les propriétés prises en charge par le contrôle dans la fenêtre "Propriétés". Tels que MarginLeft, MarginRight etc etc.

Ce n'est pas un problème.

Dans la fenêtre "Propriété", la propriété la plus haute est généralement le champ "(Nom)", qui est le nom du contrôle.

Mais le contrôle tiers que j'utilise possède deux autres "fausses propriétés" au-dessus de "(Nom)", qui sont "(À propos)" et "(Personnalisé)".

Lorsque vous cliquez sur "(À propos de)", une boîte de dialogue affiche les informations sur la société. Lorsque vous cliquez sur "(Personnalisé)", une autre boîte de dialogue affichera plus de propriétés. Ces boîtes de dialogue sont affichées dans VB6.

Dans la boîte de dialogue "(Personnalisé)", vous pouvez modifier les propriétés normales (identique à la modification directe dans la fenêtre Propriétés). Vous pouvez faire plus. Il y a plus de propriétés qui ne sont pas des propriétés normales (au moins vous ne trouvez rien dans la fenêtre Propriétés). Lorsque vous enregistrez ce formulaire, pour les propriétés normales, tout est enregistré dans le fichier .FRM.

Par exemple,

Control1.MarginLeft = 5 
    Control1.Text = "I am a control" 

Cependant, pour les « propriétés avancées » modifiées dans la boîte de dialogue (sur mesure), ils ne sont pas enregistrés dans .FRM, ils sont enregistrés dans .FRX au format binaire. Par exemple, dans la boîte de dialogue (Personnalisé), vous pouvez modifier une propriété appelée "Légende", qui comprend le texte de cette légende, la police, le poids, le style d'affichage et un grand nombre de propriétés similaires pour la légende. Dans .FRM, il est quelque chose comme,

Control1.Caption = "frmForm1.frx":013F 

Tout le texte et les propriétés connexes de légende sont enregistrés au format binaire dans le fichier .FRX.

Notez qu'il n'y a pas de propriété Caption dans la fenêtre Propriétés normale, vous ne pouvez l'éditer que dans la boîte de dialogue "(Personnalisé)".

Ma question est la suivante,

  1. Comment mettre en œuvre une telle boîte de dialogue (personnalisée) qui peut être montré en VB6? Comment laisser la fenêtre Propriétés de VB6 afficher (À propos de) et (Personnalisé)? Comment indiquer VB6 que la propriété Caption ne doit pas être affichée dans la fenêtre Propriétés, mais vous pouvez utiliser directement dans le code Control1.Caption = xxxx.frx:offset? Comment indiquer à VB6 que cette propriété Caption doit être enregistrée dans .FRX et comment indiquer à VB6 la taille des données, afin que VB6 puisse gérer le décalage automatiquement? Comment charger automatiquement les données via VB6 pour que les valeurs correctes puissent être affichées dans la boîte de dialogue (Personnalisé)?Pour autant que je sache, les formats .frx sont des secrets, il y a beaucoup de ppl creusant dans divers .frx pour les contrôles standard tels que Binaire (images), Liste et Texte. Je suis curieux de savoir comment un contrôle de tierce partie utilisant .frx, le contrôle de tierce partie peut-il définir son propre format .frx? Y compris par exemple, le nombre d'octets devant pour la longueur (ou pas de champ de longueur du tout, il est longueur fixe), combien d'octets pour style1, combien d'octets pour style2, etc.

Merci beaucoup. Si vous connaissez le nom propre de cette "propriété avancée", dites-moi simplement le nom et je peux me chercher moi-même.

J'ai essayé de rechercher des propriétés avancées mais je n'ai pas vraiment obtenu quelque chose que je veux savoir.

+0

Je pense que ce que vous recherchez sont [pages de propriétés] (https://msdn.microsoft.com/en-us/library/aa262311 (v = vs.60) .aspx) –

+0

Salut, merci. C'est ce dont j'ai besoin. J'ai vérifié sur les pages de propriétés et tout fonctionne bien sauf que je n'ai aucune idée sur la façon de définir une propriété dont les valeurs sont sauvegardées dans des fichiers "FRX", tout comme une propriété image/icon. – user534498

+1

Je peux me tromper, mais je pense que la décision d'écrire des valeurs ASCII dans le fichier .frm et les valeurs binaires dans le fichier .frx est contrôlée en interne par VB lui-même, mais l'expression «sac de propriété» vient à l'esprit. Je n'ai aucune expérience de première main en écriture de contrôles active-x, donc je ne fais confiance qu'à la mémoire ici. –

Répondre

1

Les fichiers frx sont destinés aux types de données binaires ou non basiques. Le frm va stocker les propriétés simples. Ce que vous devez faire est de vous connecter aux événements UserControl WriteProperties et ReadProperties. Vous n'avez pas besoin de savoir où se trouve le stockage de sauvegarde (frm vs frx)., Il vous suffit d'accéder au PropBag pour lire et écrire vos données.

Google est votre ami pour trouver la documentation:

https://msdn.microsoft.com/en-us/library/aa242140(v=vs.60).aspx

ou des informations supplémentaires sur le sujet:

http://www.vbforums.com/showthread.php?365735-Classic-VB-How-do-the-ReadProperties-and-WriteProperties-work-(PropertyBags)&s=3cfbd675928ad1eb94f68fbfb13ccd88&p=3672781&viewfull=1#post3672781

Bonne chance!