http://www.netgocn.com original
Todos los botones no tienen color en los programas estándar de Windows. Por lo tanto, todos los componentes del botón proporcionados por Delphi tampoco tienen atributos de color.
Aquí proporciono un método para hacer botones de amonio con atributos de color utilizando componentes personalizados. Cambie el color a voluntad durante la etapa de diseño, al igual que los componentes proporcionados por Delphi (el código en este artículo se realiza en Delphi 4.0).
primer paso
Abra Delphi, seleccione la opción de componente/nuevo componente del menú y complete o desplegable manualmente en el cuadro desplegable de tipo ancestro del cuadro de diálogo emergente. Lo completará en función de esto. El resto del contenido de escritura en el cuadro de diálogo se completará según lo desee, pero debe tener en cuenta que el nombre de la clase no puede ser el mismo que el nombre de clase existente (incluida su personalizado), y también debe recordar que se define La ubicación de instalación del componente (el contenido en el cuadro desplegable de la página de la paleta) y la ubicación de almacenamiento de los archivos de la unidad en el disco (el contenido del cuadro de edición del nombre del archivo de la unidad), de lo contrario, ¿dónde lo encontrará en el futuro? ?
Paso 2
Después de finalizar el trabajo anterior, presione el botón OK a continuación y Delphi generará automáticamente un código de componente básico para usted. (Este artículo solo se ha eliminado. Todos los comentarios generados automáticamente) deben guardarse.
Paso 3
Agregue nuestro código en el marco de código anterior, por supuesto, este es el trabajo principal que queremos hacer.
1. Modifique la parte de definición de tipo de datos del archivo de unidad generado automáticamente por Delphi a:
tipo
Tbutton1 = clase (tbutton)
Privado
Fcolor: tcolor;
Fcanvas: tcanvas;
ISFocused: booleano;
procedimiento setColor (valor: tcolor);
procedimiento cndrawitem (mensaje var: twmdrawitem);
protegido
Procedimiento CreateParams (VAR Params: TCreateParams);
Procedimiento SetButtonStyle (Adefault: Boolean);
público
constructor create (downer: tcomponent);
Destructor destruir;
publicado
Color de la propiedad: tcolor lee fcolor write setColor predeterminado Clwhite;
fin;
ilustrar:
a. solo agregamos una propiedad, por lo que solo hay una propiedad de color bajo el código del segmento publicado y establece el color predeterminado en blanco (CLWhite, por supuesto, puede cambiarlo a voluntad).
b.
C. Haga que la clase no se pueda acceder afuera.
2. El registro de proceso automático de Delphi puede ignorarlo. Después de su cuerpo de proceso, agregamos manualmente el siguiente código antes de final.
// *** Constructor **************************************** ** ** ************
constructor tbutton1.create (Awner: tComponent);
Comenzar
creación hereditaria (un downer);
Fcanvas: = tcanvas.create;
Fcolor: = clwhite; // color predeterminado
fin;
// *** Destructor **************************************************** ********
Destructor tbutton1.DestrOY;
Comenzar
Fcanvas.free;
destrucción hereditaria;
fin;
// *** Para definir el estilo del botón, el botón debe redefinirse como un botón dibujado ********************
Procedimiento TButton1.CreateParams (VAR Params: TCreateParams);
Comenzar
CreateParams heredado (parámetros);
con parámetros Do Style: = Style o BS_OwnerDraw;
fin;
// *** Método de escritura de atributos ************************************************ *********** *******
procedimiento tbutton1.setColor (valor: tcolor);
Comenzar
Fcolor: = valor;
Invalidar;
fin;
// *** Estado del botón Establecer ******************************************************* ****** ****
procedimiento tbutton1.setButtonStyle (Adefault: boolean);
Comenzar
Si Adefault <> sefocuse entonces
Comenzar
ISFocused: = Adefault;
Refrescar;
fin;
fin;
// *** Botón de dibujo **************************************** ** *******
procedimiento tbutton1.cndrawitem (mensaje var: twmdrawitem);
varilla
Isdown, isdefault: boolean;
ARECTO: Trect;
Banderas: longint;
DrawItemStruct: tDrawItemStruct;
WH: tsize;
Comenzar
DrawItemStruct: = Message.DrawItemStruct^;
Fcanvas.handle: = drawItemStruct.hdc;
Arecto: = clientRect;
con DrawItemstruct do
Comenzar
Isdown: = itemState y ODS_Selected <> 0;
IsDefault: = itemState y ODS_FOCUS <> 0;
fin;
FLAGS: = DFCS_BUTTONPUSH o DFCS_AdJUUSTRECT;
if isdown entonces flags: = flags o dfcs_pushed;
if drawItemStruct.ItemState y ODS_DISABLED <> 0 entonces
Banderas: = banderas o dfcs_inactive;
si sefocuse o isdefault entonces
Comenzar
// dibuja el estado cuando el botón se enfoca
Fcanvas.pen.color: = clwindowframe;
Fcanvas.pen.width: = 1;
Fcanvas.brush.style: = bsclear;
Fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
Inflaterect (arecto, -1, -1);
fin;
Fcanvas.pen.color: = clbtnshadow;
Fcanvas.pen.width: = 1;
Fcanvas.brush.color: = fcolor;
Si es down, entonces comienza
// Dibuja el estado cuando se presiona el botón
Fcanvas.rectangle (arect.left, arect.top, arect.right, arect.bottom);
Inflaterect (arecto, -1, -1);
fin
// Dibuja un botón sin procesar
Drawframecontrol (drawItemStruct.hdc, arect, dfc_button, flags);
Fcanvas.fillrect (arecto);
// dibujar contenido de texto de subtítulos
Fcanvas.font: = self.font;
Arecto: = clientRect;
wh: = fcanvas.textextent (subtítulos);
Fcanvas.pen.width: = 1;
Fcanvas.brush.style: = bsclear;
Si no está habilitado, entonces
Begin // Cuando falla el botón, debe dibujar el texto de subtítulos una vez más
Fcanvas.font.color: = clbtnhighlight;
Fcanvas.textout ((ancho div 2)-(wh.cx div 2) +1,
(Altura Div 2)-(Wh.Cy Div 2) +1,
Subtítulo);
Fcanvas.font.color: = clbtnshadow;
fin;
Fcanvas.textout ((ancho div 2)-(wh.cx div 2), (altura div 2)-(wh.cy div 2), titular);
// Dibuja la línea punteada del marco interno cuando obtienes el enfoque
Si sefocuse e isDefault entonces
Comenzar
Arecto: = clientRect;
Inflaterect (arecto, -4, -4);
Fcanvas.pen.color: = clwindowframe;
Fcanvas.brush.color: = fcolor;
Drawfocusrect (fcanvas.handle, arecto);
fin;
Fcanvas.handle: = 0;
fin;
//** El fin ******************************************** ****************
fin.
Paso 4: Después de verificar, confirmar que el error es correcto, seleccione la opción Componente/Componente de Instalación del menú Delphi. componente.
Si sigue este artículo por completo, después de compilar e instalar correctamente, puede encontrar un botón con el mismo icono que Tbutton en la pestaña Muestras de la etiqueta del componente Delphi. Cree un nuevo proyecto y coloque este botón que usamos en el formulario. ¿Qué tal? A través de su propiedad de color establece su color a voluntad.
Finalmente, el método de dibujo de botones en este artículo adopta un método de dibujo similar como el tbutton de Delphi para lograr una apariencia de acción similar al botón Delphi. Sin embargo, si desea jugar, puede dibujar cualquier texto y gráfico en el lienzo FCanvas que desea expresar su personalidad.
Si tiene alguna pregunta, envíe una carta o deje un mensaje.
Bienvenido a probar el software de este sitio: NetGocn (Red)