P> En el desarrollo del software de análisis de valores, a menudo es necesario dibujar una curva analítica para varias acciones. Para hacer que las funciones del software sean más convenientes y flexibles, los usuarios esperan poder personalizar los colores de varias curvas de acuerdo con sus preferencias. Hay funciones similares en el cuadro de diálogo Font en el menú [Formato] de Word97. Cuando el usuario hace clic en el cuadro desplegable de color en el cuadro de diálogo de fuentes, se muestran patrones simples de varios colores junto con los nombres de color de las fuentes. con un nombre de color. 1. Implementación del cuadro de diálogo Color personalizado
En Delphi, podemos usar TComboBoBox para lograr una funcionalidad similar. Hay un atributo de estilo en el componente TComboBox, que determina el atributo de visualización de TComboBox. Por lo general, se puede seleccionar CSDropdown, CSSimple, CSDropDownlist, CsownerDrawFixed, CsownerDrawVariable, etc. Cuando se selecciona CsownerDrawFixed, significa crear un cuadro desplegable dibujado. Y el proceso de autoinforme debe responderse en el evento OnDrawitem de TcomboBox. OnDrawitem se define como:
Propertyondrawitem: tdrawitemEvent;
TdrawItemEvent = procedimiento (control: twincontrol; índice: integerrect: trect; state: townerDrawState) ofObject;
El significado de tres parámetros es:
Control: TcomboBox que contiene un cuadro desplegable
Índice: el número de índice del cuadro desplegable dibujado en la propiedad de elementos de TComboBox
RECT: la posición de autocontrol, por lo tanto, conocemos la posición del rectángulo que debe ser autodenominada (parámetro RECT) y el número de índice (parámetro de índice) en tcomboBox, podemos usar la propiedad de lienzo de tcomboBox para recurrir su lienzo. El proceso de implementación específico es el siguiente:
1. Cree un nuevo archivo de proyecto y establezca las propiedades relevantes de su formulario predeterminado en:
Caja desplegable personalizada de subtítulos
Formulario de nombre1
PosicionPoscreencenter
2. Coloque dos componentes de Tcombobox en el formulario y establezca sus propiedades de la siguiente manera:
NamestyleItemheightondrawitem
Colorcombo1csownerDrawFixed 20Colorcombodrawitem
Colorcombo2csownerDrawFixed 30ColorCombodrawitem
3. Haga doble clic en el botón Dot junto a las propiedades de los elementos de ColorCombo1 y ColorCombo2 e ingrese en el cuadro de diálogo StringListEditor.
negro
azul
Azul y verde
Verde brillante
rojo
amarillo
Nombres de varios colores
4. En el evento OnDrawitem en ColorCombo1, Yu Manlu?
proceduretForm1.colorcombodrawItem (control: twincontrol; índice: integer; rect: trect; state: propietarioDrawState);
varilla
Tempcolor: tcolor;
TempbrushColor: tcolor;
Comenzar
con (controlastcomboBox) hacer
// dibujarlo en el lienzo de combo
Comenzar
TEMBRUSHCOLOR: = Canvas.Brush.Color;
// Guardar el color original
Canvas.fillrect (rect);
caseIndexof // Definir diferentes colores autointermedios según el índice
0: // negro
Tempcolor: = clblack;
1: // azul
Tempcolor: = clblue;
2: // azul y verde
Tempcolor: = Claqua;
3: // verde brillante
Tempcolor: = cllime;
4: // rojo
Tempcolor: = clred;
5: // amarillo
Tempcolor: = clyellow;
// La respuesta a otros colores se puede agregar aquí.
fin;
Canvas.Brush.Color: = TempColor;
// rectángulo de color dibujado
Canvas.rectangle (rect.left+4,
Rect.top+1,
(Rect.right+rect.left) Div3,
Rect.bottom 1);
Canvas.Brush.Color: = TempbrushColor;
// Mostrar la cadena correspondiente al color
Canvas.textout ((Rect.Lft+Rect.Right) Div2,
Rect.top+1,
Elementos [índice]);
fin;
fin;
5. Guardar y ejecutar el archivo, podemos ver el mismo efecto que el cuadro desplegable de color en Word
Los lectores interesados pueden agregar otros colores a las ubicaciones que se muestran en el artículo.
El programa anterior se pasa en Delphi3.0, 4.0. 2. Escribir componentes de diálogo de color personalizados
Para muchos programadores de Delphi, es bastante desconocido cómo escribir sus propios componentes de Delphi en realidad continúa desarrollándose a partir de la clase TComponent, y escribir componentes en realidad está escribiendo clases extraordinarias. A continuación, presentaremos la escritura de componentes utilizando el cuadro de diálogo Color personalizado como ejemplo. El siguiente TColorComboBoBOX continúa desde la clase TCOMBOBOX. 1. Seleccione la nueva opción de componente en el elemento del menú de componentes. Seleccione TComboBox en el cuadro Ancestortype, complete TcolorComboBox en el cuadro ClassName, seleccione muestras en el cuadro de página de la paleta, complete ColorComboBox.pas en el cuadro UnitFileName, y luego haga clic en el botón Aceptar.
2. Seleccione la opción Instalar componente en el elemento del menú de componentes, haga clic en InponwPackage, escriba la ruta y colorcombodpk.dpk en el cuadro de nombre del paquete, y haga clic en Aceptar para generar el archivo colorcombodpk.bpl.
3. Use ImageEditor en el menú Herramientas para crear el archivo editar colorcombox.dcr y crear un mapa de bits para la clase TColorComboBoBox.
4. Agregue las especificaciones para el tamaño y la altura de la fuente y el atributo de estilo del control (establecido en CsownerDrawFixed) en Createwnd ejecutado después de crear. bandera.
5. Agregue un programa de autointerreno de color al evento DrawItem, que ocurre antes en Drawitem.
El procedimiento de implementación es el siguiente:
UnitColorComboBox;
interfaz
usos
Windows, mensajes, sysutils, clases,
Gráficos, controles, formularios, diálogos,
Stdctrls;
tipo
TcolorcomboBox = class (tcomboBox)
Privado
{Privatedeclarations}
Fondrawitem: tdrawitemevent;
ProcedidoRawitem (índice: entero; rect: trect; estado: urbano de municipio);
protegido
{Declaraciones protegidas}
público
{PublicDeclarations}
constructorCreate (Alowner: TComponent); anular;
procedimientoCreateWnd; anular;
publicado
{Publicado Declaraciones}
Propertyondrawitem: tdrawitemeVent
ReadFondrawitemWriteFondrawitem;
fin;
procedimientoRegistro;
Implementación
procedimientoReGister; // registrar componente
Comenzar
RegisterComponents (muestras, [tcolorcomboBox]);
fin;
constructortcolorcomboBox.create
(Awner: TComponent); // Inicialización del componente
Comenzar
HerededCreate (Awner);
Estilo: = csownerDrawFixed;
ItemHeight: = 20;
Font.size: = 10;
fin;
ProceduretColorComboBox.CreateWnd;
// Inicializar la propiedad de elementos del componente de color
Comenzar
HerededCreateWnd;
Items.clar;
Items.add (negro);
Items.add (azul);
Items.add (azul y verde);
Items.add (verde brillante);
Items.Add (rosa);
Items.add (rojo);
Items.add (amarillo);
Items.Add (blanco);
Items.Add (azul oscuro);
Items.add (Cyan);
Items.add (verde);
Items.Add (morado);
Items.add (rojo carmesí);
Items.Add (amarillo intenso);
Items.add (gris oscuro);
Artems.Add (plata);
// Si no necesita tantos colores, puede eliminar los colores no deseados en el atributo del elemento del componente
fin;
// sobrecarga el proceso de dibujo
proceduretColorComboBox.DrawItem (índice: entero; rect: trect; state: townerDrawState);
varilla
Tempcolor: tcolor;
TempbrushColor: tcolor;
Comenzar
// La configuración predeterminada de auto-pinte de este componente
TEMBRUSHCOLOR: = Canvas.Brush.Color;
// Guardar el color original
Canvas.fillrect (rect);
ifitems [índice] = negro entonces
Tempcolor: = clblack
Elseifitems [index] = azul
Tempcolor: = clblue
Elseifitems [index] = azul verde entonces
Tempcolor: = Claqua
Elseifitems [índice] = verde brillante entonces
Tempcolor: = cllime
Elseifitems [índice] = rosa entonces
Tempcolor: = clfuchsia
Elseifitems [índice] = rojo entonces
Tempcolor: = clred
Elseifitems [índice] = amarillo entonces
Tempcolor: = clyellow
Elseifitems [índice] = blanco entonces
Tempcolor: = clwhite
Elseifitems [índice] = azul oscuro entonces
Tempcolor: = clnavy
Elseifitems [index] = Cyan entonces
Tempcolor: = clteal
Elseifitems [índice] = verde entonces
Tempcolor: = clgreen
Elseifitems [índice] = púrpura entonces
Tempcolor: = Clpurple
Elseifitems [index] = Crimson entonces
Tempcolor: = ClMaroon
Elseifitems [índice] = amarillo profundo entonces
Tempcolor: = clolive
Elseifitems [índice] = gris oscuro entonces
Tempcolor: = clgray
Elseifitems [índice] = plata entonces
Elsetempcolor: = clsilver;
Canvas.Brush.Color: = TempColor;
// rectángulo de color dibujado
Canvas.rectangle (rect.left+4,
Rect.top+1,
(Rect.right+rect.left) Div3,
Rect.bottom 1);
Canvas.Brush.Color: = TempbrushColor;
// Mostrar la cadena correspondiente al color
Canvas.textout ((Rect.Lft+Rect.Right) Div2,
Rect.top+1,
Elementos [índice]);
fin;
Fin. 3. Uso de componentes de diálogo de color personalizado
Después de registrar un componente de color personalizado, puede seleccionar un componente de color personalizado en la página de muestra de la plantilla de componente Delphi, y no hay diferencia entre usar el propio componente de Delphi.