Bei der Entwicklung von Securities -Analyse -Software ist es häufig erforderlich, analytische Kurve für verschiedene Aktien zu zeichnen. Um die Funktionen der Software bequemer und flexibler zu gestalten, hoffen die Benutzer, die Farben verschiedener Kurven entsprechend ihren Vorlieben anzupassen. Im Dialogfeld Schriftart im Dialogfeld Schriftart befinden sich ähnliche Funktionen im Menü [Format] von Word97. Wenn der Benutzer das Dropdown-Feld der Farbe im Dialogfeld Schriftart klickt, werden einfache Muster verschiedener Farben zusammen mit den Farbnamen der Schriftarten angezeigt. mit einem Farbnamen. 1. Implementierung des benutzerdefinierten Farbdialogfelds
In Delphi können wir TCombobox verwenden, um eine ähnliche Funktionalität zu erreichen. In der tcombobox -Komponente gibt es ein Stilattribut, das das Anzeigeattribut von tcombobox bestimmt. Normalerweise können CSDropdown, CSSimple, CSdropdownList, CSOWNERDRAWFIXED, CSOWNERDRAWVARIABLE usw. ausgewählt werden. Wenn CSOWNERDRAWFIXED ausgewählt ist, bedeutet dies, dass die Höhe jedes Elements in der Dropdown-Box durch die Eigenschaft von ItemHeight festgelegt wird. Und auf den Selbstmissgel müssen im OneDrawitem-Ereignis von tcombobox reagiert werden. OneDrawitem ist definiert als:
PropertyonDrawitem: TdrawItemEvent;
TdrawItemEvent = Verfahren (Kontrolle: Twincontrol; Index: IntegerRect: Trect; Staat: TownerDrawstate) OFObject;
Die Bedeutung von drei Parametern lautet:
Steuerung: tcombobox mit Dropdown-Box
INDEX: Die Indexnummer des selbstgezeichneten Dropdown-Feld
RECHT: Die Position des Selbsttreibens. Wir kennen daher die Position des Rechtecks, die selbst gezeichnet werden muss (RECTEL-Parameter) und die Indexnummer (Indexparameter) in tcombobox. seine Leinwand. Der spezifische Implementierungsprozess ist wie folgt:
1. Erstellen Sie eine neue Projektdatei und setzen Sie die relevanten Eigenschaften ihres Standardformulars auf:
Bildunterschrift Custom Dropdown-Box
Name Form1
Positionposcreencenter
2. Platzieren Sie zwei TCombobox -Komponenten in die Form und setzen Sie ihre Eigenschaften wie folgt fest:
NAMESTYLEITEMHELTONDRAWITEM
Colorcombo1cSownerDrawfixed 20ColorCombodrawitem
Colorcombo2CSOWNERDRAWFIXED 30COLORCOMBODRAWITEM
3. Doppelklicken Sie auf die Punkt-Taste neben den Elementeneigenschaften von Colorcombo1 und Colorcombo2 und geben Sie sie im Dialogfeld StringListeditor ein.
Schwarz
Blau
Blau und grün
Hellgrün
Rot
Gelb
Namen verschiedener Farben
4. Im OneDrawitem -Event in Colorcombo1, Yu Manlu?
proceduretform1.colorcomBodrawitem (Steuerung: Twincontrol; Index: Integer; rect: Trect; Zustand: InhaberDrawstate);
var
TEMPCOLOR: TCOLOR;
Tempbrushcolor: tcolor;
Beginnen
mit (controlastcombobox) tun
// Zeichne es auf die Leinwand von Combo
Beginnen
Tempbrushcolor: = canvas.brush.color;
// die ursprüngliche Farbe speichern
Canvas.FillRect (rect);
Caseindexof // Definieren Sie verschiedene selbstverrückte Farben gemäß dem Index
0: // schwarz
Tempcolor: = clBlack;
1: // blau
Tempcolor: = clbLue;
2: // blau und grün
Tempcolor: = claqua;
3: // hellgrün
Tempcolor: = Cllim;
4: // rot
Tempcolor: = clred;
5: // gelb
Tempcolor: = clyellow;
// Die Antwort auf andere Farben kann hier hinzugefügt werden.
Ende;
Canvas.brush.color: = tempcolor;
// selbstgezogene Farbe Rechteck
Canvas.Rectangle (rect.left+4,
Rect.top+1,,
(Rect.Right+rect.left) div3,
Rect.Bottom 1);
Canvas.brush.color: = tempbrushcolor;
// Zeigen Sie die Zeichenfolge, die der Farbe entspricht
Canvas.Textout ((rect.left+rect.Right) div2,
Rect.top+1,,
Elemente [Index]);
Ende;
Ende;
5. Speichern und führen Sie die Datei aus, wir können den gleichen Effekt wie das Dropdown-Feld der Farbe in Word sehen
Interessierte Leser können den im Artikel angegebenen Orte andere Farben hinzufügen.
Das obige Programm wird an Delphi3.0, 4.0 weitergegeben. 2. Schreiben Sie benutzerdefinierte Farbdialogkomponenten
Für viele Delphi -Programmierer ist es ziemlich unbekannt, wie sie ihre eigenen Delphi -Komponenten schreiben können. Im Folgenden werden wir das Schreiben von Komponenten mit dem Dialogfeld Custom Color als Beispiel vorstellen. Die folgenden TCOLORCOMBOBOX werden von der TCombobox-Klasse fortgesetzt. 1. Wählen Sie die neue Komponentenoption im Menüelement Komponenten aus. Wählen Sie im Feld "Ancestortype" TCOMBOBOX aus, füllen Sie TcolorCombobox im Kästchen Klassenname aus, wählen Sie Beispiele im Feld Palette -Seite, füllen Sie ColorCombobox.pas im Feld UnitFileName aus und klicken Sie dann auf die Schaltfläche OK.
2. Wählen Sie die Option Komponentenkomponenten im Menüelement Komponenten aus, klicken Sie auf IntoneWpackage, schreiben Sie den Pfad und den ColorCombodpk.dpk im Feld Paketname und klicken Sie auf OK, um die Datei colorCombodpk.bpl zu generieren.
A. Verwenden Sie Imbigitor im Menü "Tools", um die Colorcombox der Datei bearbeiten zu erstellen.
4. Fügen Sie die Spezifikationen für die Schriftgröße und -höhe und das Style -Attribut des Steuerelements in CSOWNERDRAWFIXED hinzu). Farben.
5. Fügen Sie dem Drawitem-Ereignis ein Farb-Selbst-Malting-Programm hinzu, das vor dem Drawitem vorkommt.
Das Implementierungsverfahren ist wie folgt:
UnitColorcombobox;
Schnittstelle
Verwendung
Fenster, Nachrichten, Systeme, Klassen,
Grafik, Steuerelemente, Formulare, Dialoge,
Stdctrls;
Typ
Tcolorcombobox = Klasse (tcombobox)
Privat
{PrivatatedEclarations}
Fondrawitem: tdrawitemevent;
VerfahrensRawitem (Index: Ganzzahl; Rect: Trect; Staat: TownerDrawstate);
geschützt
{ProtectedDeclarations}
öffentlich
{PublicDeclarations}
constructorcreate (aowner: tcomponent); override;
procedurecreatewnd; override;
veröffentlicht
{PublishedDeclarations}
PropertyonDrawitem: TdrawItemEvent
ReadFonDrawitemwriteFonDrawitem;
Ende;
prozedureregister;
Durchführung
procedureregister; // Komponente registrieren
Beginnen
RegisterComponents (Proben, [tcolorcombobox]);
Ende;
constructortcolorcombobox.create
(Aowner: tcomponent); // Initialisierung der Komponente
Beginnen
erbtecreate (aowner);
Stil: = CSOWNERDRAWFIXED;
ItemHeight: = 20;
Schriftart: = 10;
Ende;
proceduretcolorcombobox.Createwnd;
// Initialisieren Sie die Eigenschaften der Elemente der Farbkomponente
Beginnen
erbte Createwnd;
Items.clear;
Items.add (schwarz);
Items.add (blau);
Items.add (blau und grün);
Items.add (hellgrün);
Items.add (pink);
Items.add (rot);
Items.add (gelb);
Items.add (weiß);
Items.add (dunkelblau);
Items.add (cyan);
Items.add (grün);
Items.add (lila);
Items.add (Crimson Red);
Items.add (tief gelb);
Items.add (dunkelgrau);
Items.add (silber);
// Wenn Sie nicht so viele Farben benötigen, können Sie unerwünschte Farben im Element -Attribut der Komponente löschen
Ende;
// Überlastung des Drawitem -Prozesses
proceduretcolorcombobox.drawitem (Index: Integer; rect: Trect; Staat: TownerDrawstate);
var
TEMPCOLOR: TCOLOR;
Tempbrushcolor: tcolor;
Beginnen
// Die Standardeinstellungen dieser Komponente
Tempbrushcolor: = canvas.brush.color;
// die ursprüngliche Farbe speichern
Canvas.FillRect (rect);
ifItems [index] = schwarz dann
TEMPCOLOR: = CLBLACK
ElseIfItems [index] = blau dann
TEMPCOLOR: = CLBLUE
ElseIfItems [index] = Blue Green Dann
Tempcolor: = claqua
ElseIfItems [index] = hellgrün dann
Tempcolor: = Cllim
ElseIfItems [index] = pink dann
Tempcolor: = clfuchsia
ElseIfItems [index] = rot dann
Tempcolor: = clred
ElseIfItems [index] = gelb dann
TEMPCOLOR: = CLYELA
ElseIfItems [index] = weiß dann
Tempcolor: = clwhite
ElseIfItems [index] = dunkelblau dann
Tempcolor: = clnavy
ElseIfItems [index] = cyan dann
TEMPCOLOR: = ClTEAL
ElseIfItems [index] = grün dann
Tempcolor: = clgreen
ElseIfItems [index] = lila dann
Tempcolor: = clpurple
ElseIfItems [index] = Crimson dann
Tempcolor: = clmaroon
ElseIfItems [INDEX] = Tiefes Gelb dann
Tempcolor: = clolive
ElseIfItems [index] = dunkelgrau dann
TEMPCOLOR: = CLGRAY
ElseIfItems [index] = silber dann
ElsetempColor: = clsilver;
Canvas.brush.color: = tempcolor;
// selbstgezogene Farbe Rechteck
Canvas.Rectangle (rect.left+4,
Rect.top+1,,
(Rect.Right+rect.left) div3,
Rect.Bottom 1);
Canvas.brush.color: = tempbrushcolor;
// Zeigen Sie die Zeichenfolge, die der Farbe entspricht
Canvas.Textout ((rect.left+rect.Right) div2,
Rect.top+1,,
Elemente [Index]);
Ende;
Ende. Diese Kontrolle kann in allen Programmen verwendet werden, die Farboptionen erfordern und sehr bequem und schön sind, und spart die Programmierung viel Zeit und erhöht die Zuverlässigkeit und Lesbarkeit der Programme. 3. Verwendung von benutzerdefinierten Farbdialogkomponenten
Nach der Registrierung einer benutzerdefinierten Farbkomponente können Sie eine benutzerdefinierte Farbkomponente auf der Beispielseite der Delphi -Komponentenvorlage auswählen, und es gibt keinen Unterschied zwischen der Verwendung der eigenen Komponente von Delphi.