Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Crear unidad para cambiar el formato a los Tedits.... (https://www.clubdelphi.com/foros/showthread.php?t=74944)

linuxtin 20-07-2011 02:23:18

Crear unidad para cambiar el formato a los Tedits....
 
Hola a todos como andan!!

La consulta que tengo es la siguiente, en los distintos formularios se me ocurrió cambiar el fondo de lo Tedits de color azul y la letra con color blanco, para que sea un poco mas amigable al cargar los datos.

Código Delphi [-]

procedure TAltasForm.MailEditEnter(Sender: TObject); 
begin               
  MailEdit.Color:=$00FC8856;               
  MailEdit.Font.Color:=clWhite;  
end;  

procedure TAltasForm.MailEditExit(Sender: TObject); 
begin                 
  MailEdit.Color:=clWhite;                 
  MailEdit.Font.Color:=clBlack;  
end;

Pero como son muchos edits me gustaria hacer una unidad, para poder llamarla para cada edit.

No se como implementar esto. Si alguien me puede dar una idea!!

Desde ya muchas gracias!

ElKurgan 20-07-2011 08:31:28

Mira el truco de las clases interpuestas, del maestro Marteens; a lo mejor te puede dar una idea.

Además, si buscas clases interpuestas con Delphi en google te sale un buen puñado de enlaces.

Un saludo

Neftali [Germán.Estévez] 20-07-2011 11:04:36

La otra opción es crear un componente sencillo que lo haga y utilizarlo cuando lo necesites.
Hay varios hilos en los foros donde puedes ver cómo hacerlo, algunos incluso son prácticamente lo que necesitas:

http://www.clubdelphi.com/foros/show...53&postcount=5
http://www.clubdelphi.com/foros/show...34&postcount=7
http://www.clubdelphi.com/foros/show...98&postcount=3
http://www.clubdelphi.com/foros/show...22&postcount=6

linuxtin 20-07-2011 13:58:20

Gracias Neftali, ElKurgan muchos enlaces me pasaron!!

Cual me recomiendan para implementar???

Saludos!!!!!

Neftali [Germán.Estévez] 20-07-2011 15:44:20

Cita:

Empezado por linuxtin (Mensaje 406912)
Cual me recomiendan para implementar???

Si lo vas a utilizar en muchos sitios del proyecto, yo optaría por el componente nuevo.
Si dentro de un mismo formulario vas a tener Edit de este tipo y Edits normales, también deberás crear componente nuevo.
Si es en un formulario o dos puedes utilizar esta técnica.

Es un poco a tu gusto; Al final hacen lo mismo.

linuxtin 20-07-2011 16:18:46

Cita:

Si lo vas a utilizar en muchos sitios del proyecto, yo optaría por el componente nuevo.
Una preguntita o preguntonta jaja, al ser un componente tengo que compilarla en un proyecto nuevo y agregar la ruta?

O agrego la unidad al proyecto mio??

Saludos!

Neftali [Germán.Estévez] 20-07-2011 16:40:54

Para un nuevo componente debes crear un package nuevo (o agergarlo en el de usuario).
Una vez compilado e instalado ya te aparecerá en la paleta de componentes y podrás utilizarlo siempre que quieras.
Tal vez debas revisar algun manualillo de crear componentes.

* Crear componente paso a paso
* Manual para crear un componente

linuxtin 20-07-2011 19:29:58

Pude compilar el componente, anda muy bien pero el problema es que tengo que cambiar todos los Tedits que tengo, si creo una unidad con este código

Código Delphi [-]
unit ColorEdit;

interface

uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, jpeg, ExtCtrls, StdCtrls, Buttons, Mask, DBCtrls;


type
  TForm1 = class(TForm)
    {...}
    procedure OnFieldEnter(Sender: TObject);
    procedure OnFieldExit(Sender: TObject);
  end;

  {...}

const
  clFocused = TColor($00FFFF);   // color for focused field
  clBlurred = TColor($FFFFFF);   // color for blurred field


implementation


procedure TForm1.OnFieldEnter(Sender: TObject);
begin
  if (Sender is TCustomEdit) then
    TEdit(Sender).Color := clFocused;
   // you may change all properties as desired when element is entered
end;

procedure TForm1.OnFieldExit(Sender: TObject);
begin
  if (Sender is TCustomEdit) then
    TEdit(Sender).Color := clBlurred;
end;

(*
  Now you select every element you want to change color
  if entered on your form and add the OnFieldEnter/OnFieldExit
  procedure to the OnEnter/OnExit event.
*)
end.

Como seria la forma para llamarla desde los otros formularios??

Desde ya muchas Gracias!!!

ElKurgan 21-07-2011 07:46:42

Cita:

Empezado por linuxtin (Mensaje 406952)
Pude compilar el componente, anda muy bien pero el problema es que tengo que cambiar todos los Tedits que tengo, si creo una unidad con este código

¡Claro!... Ese es precisamente el problema de los componentes nuevos. Creas el paquete, los registras,... ¡Y luego tienes que sustituir todos los edits de todos los formularios!.

Yo he usado las clases interpuestas y me han funcionado muy bien. Ventajas: En tiempo de diseño trabajas con el componente normal. Pero si pones la clase interpuesta en una unit que se añada a la clausula uses de todos tus formularios, en tiempo de ejecución se verán de la forma nueva que has diseñado.

Saludos

Neftali [Germán.Estévez] 21-07-2011 10:19:44

Cita:

Empezado por linuxtin (Mensaje 406952)
Pude compilar el componente, anda muy bien pero el problema es que tengo que cambiar todos los Tedits que tengo, si creo una unidad con este código...

Como seria la forma para llamarla desde los otros formularios??

Finalmente veo que te has decantado por las clases superpuestas.
La solución para utilizarlos en otros formularios es la siguiente (lo explica Ian).

¿Qué pasaría si necesitáramos los nuevos botones en otro formulario? ¿Tenemos que definir otra vez la clase de interposición? ¡Ni hablar! Podemos encapsularla dentro de una unidad. Para seguir engañando a Delphi, tenemos que incluir la nueva unidad en la cláusula uses del formulario, pero teniendo cuidado de ubicarla después de la unidad donde se encuentra la clase original.

linuxtin 21-07-2011 15:49:31

Gracias Neftali y ElKurgan!! El componente esta muy bueno, lo tengo instalado pero para usarlo cuando haga otra aplicación.

Hace poco termine de cursar la materia Diseño Estructurado, así que ahora estoy tratando de eliminar la redundancia de código, y lo primero que vi mal fue el tema de tener dos procedimientos por cada TEdis para cambiarle el color.

Saludos y gracias a los dos!!!


La franja horaria es GMT +2. Ahora son las 22:30:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi