P> Dans le développement du logiciel d'analyse des valeurs mobilières, il est souvent nécessaire de dessiner une courbe analytique pour divers actions. Afin de rendre les fonctions du logiciel plus pratiques et flexibles, les utilisateurs espèrent pouvoir personnaliser les couleurs de diverses courbes en fonction de leurs préférences. Il existe des fonctions similaires dans la boîte de dialogue de la police sous le menu [Format] de Word97. Lorsque l'utilisateur clique sur la boîte déroulante des couleurs dans la boîte de dialogue de la police, les modèles simples de différentes couleurs sont affichés avec les noms de couleurs des polices. avec un nom de couleur. 1. Implémentation de la boîte de dialogue couleur personnalisée
À Delphi, nous pouvons utiliser TCombobox pour obtenir des fonctionnalités similaires. Il y a un attribut de style dans le composant tcomboBox, qui détermine l'attribut d'affichage de TcomboBox. Habituellement, CSDropDown, CSSimple, CSDropDownList, CSownerDrawFixed, CSownerDrawvariable, etc. peuvent être sélectionnés. Lorsque CSownerDrawFixed est sélectionné, il signifie de créer une boîte déroulante auto-dessinée. Et le processus d'auto-peinture doit être répondu dans l'événement OneDrawitem de TCombobox. Ondrawitem est défini comme:
PropertyonDrawitem: TdrawitemEvent;
TdrawiteMEvent = procédure (contrôle: twinControl; index: Integerrect: Trect; État: townerDrawstate) OfObject;
La signification de trois paramètres est:
CONTRÔLE: TCOMBOBOX contenant une boîte déroulante
Index: le numéro d'index de la boîte déroulante autodécartée dans la propriété des éléments de TCombobox
RECT: La position de l'auto-dessin sa toile. Le processus de mise en œuvre spécifique est le suivant:
1 et 1 Créez un nouveau fichier de projet et définissez les propriétés pertinentes de son formulaire par défaut:
Légende Boîte déroulante personnalisée
Nom Form1
Positionnement de position
2 Placez deux composants tcombobox sous la forme et définissez leurs propriétés comme suit:
Namestyleitemheightondrawitem
ColorCombo1CSownerDrawFixed 20ColorCombodrawitem
ColorCombo2CSownerDrawFixed 30ColorCombodrawitem
3 et 3 Double-cliquez sur le bouton DOT à côté des propriétés des éléments de ColorCombo1 et ColorCombo2 et entrez-la dans la boîte de dialogue StringListEditor.
noir
bleu
Bleu et vert
Vert vif
rouge
jaune
Noms de différentes couleurs
4 Dans l'événement ONDrawitem dans ColorCombo1, Yu Manlu?
procéduretform1.colorcombodrawitem (contrôle: twinControl; index: entier; rect: trect; état: propriétaireDrawstate);
var
Tempcolor: tcolor;
TempbrushColor: tcolor;
Commencer
avec (ControlastComboBox) faire
// Dessinez-le sur la toile du combo
Commencer
TempbrushColor: = canvas.brush.color;
// Enregistrer la couleur d'origine
Canvas.Fillrect (RECT);
CaseIndexof // définit différentes couleurs auto-peintes en fonction de l'index
0: // noir
Tempcolor: = clblack;
1: // bleu
Tempcolor: = clblue;
2: // bleu et vert
Tempcolor: = Claqua;
3: // vert vif
Tempcolor: = cllime;
4: // rouge
Tempcolor: = Cruet;
5: // jaune
Tempcolor: = Clyellow;
// Une réponse à d'autres couleurs peut être ajoutée ici.
fin;
Canvas.brush.color: = tempcolor;
// rectangle de couleur autodéclate
Canvas.rectangle (rect.left + 4,
Rect.top + 1,
(Rect.Right + rect.left) div3,
Rect.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// affiche la chaîne correspondant à la couleur
Canvas.textout ((rect.left + rect.right) div2,
Rect.top + 1,
Items [index]);
fin;
fin;
5 Enregistrer et exécuter le fichier, nous pouvons voir le même effet que la boîte déroulante des couleurs dans Word
Les lecteurs intéressés peuvent ajouter d'autres couleurs aux emplacements indiqués dans l'article.
Le programme ci-dessus est transmis sur Delphi3.0, 4.0. 2. Écrivez les composants de la boîte de dialogue de couleur personnalisée
Pour de nombreux programmeurs de Delphi, il est tout à fait inconnu pour rédiger leurs propres composants Delphi. Ci-dessous, nous présenterons l'écriture de composants à l'aide de la boîte de dialogue de couleur personnalisée comme exemple. Le TCOLORCOMBOX suivant se poursuit à partir de la classe Tcombobox. 1. Sélectionnez la nouvelle option de composant dans l'élément de menu des composants. Sélectionnez TcomboBox dans la boîte d'ancestype, remplissez TColorComboBOX dans la boîte de nom de classe, sélectionnez des échantillons dans la boîte de page de palette, remplissez ColorCombox.pas dans la zone unitfilename, puis cliquez sur le bouton OK.
2. Sélectionnez l'option Installation du composant dans l'élément de menu des composants, cliquez sur IntoneWpackage, écrivez le chemin d'accès et ColorCombodpk.dpk dans la case de nom de package, puis cliquez sur OK pour générer le fichier ColorCombodpk.BPL.
3. Utilisez ImageEditor dans le menu des outils pour créer le fichier d'édition colombox.dcr et créer un bitmap pour la classe tcolorcombobox.
4. Ajouter les spécifications de la taille et de la hauteur de la police et de l'attribut de style du contrôle (réglé sur CSOwnerDrawFixed) dans CreateWND exécuté après la création. couleurs.
5. Ajoutez un programme d'auto-peinture couleur à l'événement DrawItem, qui se produit auparavant sur Drawitem.
La procédure de mise en œuvre est la suivante:
UNITCOLORCOMBOBOX;
interface
usages
Windows, messages, sysutils, classes,
Graphiques, commandes, formulaires, boîtes de dialogue,
Stdctrls;
taper
Tcolorcombox = classe (tcombobox)
Privé
{Privedeclarations}
Fondrawitem: TdrawitemEvent;
ProcédureRawitem (Index: entier; rect: Trect; État: TownerDrawstate);
protégé
{ProtectionDeclarations}
publique
{PublicDarations}
ConstructorCreate (Aowner: TComponent); Override;
ProcédureCreatewnd; remplacer;
publié
{Publiaged Declations}
PropertyonDrawitem: tdrawitemEvent
Readfondrawitemwritefondrawitem;
fin;
procédure de registre;
Mise en œuvre
ProcédureRegister; // Registre du composant
Commencer
RegisterComponents (échantillons, [tColorComboBox]);
fin;
ConstructOrtColorCombOx.Create
(Aowner: TComponent); // Initialisation du composant
Commencer
Hérité de création (Aowner);
Style: = CSownerDrawFixed;
ItemHeight: = 20;
Font.Size: = 10;
fin;
procéduretColorCombox.Createwnd;
// Initialisez la propriété des éléments du composant couleur
Commencer
Hérité de création;
Items.Clear;
Articles.Add (noir);
Articles.Add (bleu);
Articles.Add (bleu et vert);
Articles.Add (vert vif);
Items.add (rose);
Items.add (rouge);
Articles.Add (jaune);
Articles.add (blanc);
Articles.Add (bleu foncé);
Items.add (cyan);
Articles.Add (vert);
Items.add (violet);
Articles.Add (Crimson Red);
Articles.Add (jaune profond);
Articles.Add (gris foncé);
Articles.Add (Silver);
// Si vous n'avez pas besoin de autant de couleurs, vous pouvez supprimer des couleurs indésirables dans l'attribut d'élément du composant
fin;
// surcharger le processus Drawitem
procéduretColorCombox.Drawitem (Index: entier; rect: Trect; État: TownerDrawstate);
var
Tempcolor: tcolor;
TempbrushColor: tcolor;
Commencer
// les paramètres d'auto-peinture par défaut de ce composant
TempbrushColor: = canvas.brush.color;
// Enregistrer la couleur d'origine
Canvas.Fillrect (RECT);
ifitems [index] = noir alors
Tempcolor: = clblack
elseifitems [index] = bleu alors
Tempcolor: = clblue
elseifitems [index] = vert bleu alors
Tempcolor: = Claqua
elseifitems [index] = vert vif alors
Tempcolor: = cllime
elseifitems [index] = rose alors
Tempcolor: = clfuchsia
elseifitems [index] = rouge alors
Tempcolor: = Cruet
elseifitems [index] = jaune alors
Tempcolor: = Clyellow
elseifitems [index] = blanc alors
Tempcolor: = clwhite
elseifitems [index] = bleu foncé alors
Tempcolor: = clnavy
elseifitems [index] = cyan alors
Tempcolor: = clteal
elseifitems [index] = vert alors
Tempcolor: = clgreen
elseifitems [index] = violet alors
Tempcolor: = clpurple
elseifitems [index] = Crimson alors
Tempcolor: = clmaroon
elseifitems [index] = jaune profond alors
Tempcolor: = CLOLIVE
elseifitems [index] = gris foncé alors
Tempcolor: = clgray
elseifitems [index] = argent alors
elsempColor: = ClSilver;
Canvas.brush.color: = tempcolor;
// rectangle de couleur autodéclate
Canvas.rectangle (rect.left + 4,
Rect.top + 1,
(Rect.Right + rect.left) div3,
Rect.bottom 1);
Canvas.brush.color: = tempbrushcolor;
// affiche la chaîne correspondant à la couleur
Canvas.textout ((rect.left + rect.right) div2,
Rect.top + 1,
Items [index]);
fin;
Fin. 3. Utilisation des composants de la boîte de dialogue de couleur personnalisée
Après avoir enregistré un composant de couleur personnalisé, vous pouvez sélectionner un composant de couleur personnalisé dans l'exemple de la page du modèle de composant Delphi, et il n'y a pas de différence entre l'utilisation du propre composant de Delphi.