Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Un editor COOL. Al recibir el foco se "ilumina" y viceversa... (https://www.clubdelphi.com/foros/showthread.php?t=38152)

pascalutn2003 05-12-2006 04:02:48

Un editor COOL. Al recibir el foco se "ilumina" y viceversa...
 
HOLA A TODOS: :D

A ver que les parece esto que les tiro.

Es un editor que al recibir el foco cambia de color y la apariencia de la fuente y cuando lo pierde (al foco :D) vuelve a la normalidad.

En realidad me hacia falta algo asi y comence a diseñarlo; seguramente esta para arreglarlo y mejorarlo pero a mi me sirvio a pesar de sus defectos.

Perdonen por no haberlo comentado, me parecio que no hacia falta.

EDGARDO - Córdoba - Argentina

Código Delphi [-]

unit CoolEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics, Forms;

type
     TCoolEdit = class(TEdit)
     private

          fColor              :    TColor;
          fColorWithFocus     :    TColor;
          fColorWithOutFocus  :    TColor;

          fFont               :    TFont;
          fFontFocus          :    TFont;
          fFontNoFocus        :    TFont;

          FColorFont          :    TColor;
          fFontColorFocus     :    TColor;
          fFontColorNoFocus   :    TColor;

          Procedure SetColor(Value:TColor);
          Procedure SetFont(Value:TFont);
          Procedure SetColorFont(Value:TColor);


     protected

          Procedure WMSetFocus(var Message:TWMSetFocus);message WM_SETFOCUS;
          Procedure WMKillFocus(var Message:TWMKillFocus);Message WM_KILLFOCUS;

     public

          Constructor Create(AOwner:TComponent);override;
          Destructor Destroy;override;

     published

          Procedure RePaint;Override;

          Property FocusColor      :    TColor Read fColorWithFocus Write SetColor Default clAqua;
          Property NoFocusColor    :    TColor Read fColorWithOutFocus Write SetColor Default clSilver;

          Property FocusFont       :    TFont Read fFontFocus Write SetFont;
          Property NoFocusFont     :    TFont Read fFontNoFocus Write SetFont;

          Property FontColorFocus  :    TColor Read fFontColorFocus Write SetColorFont Default clBlue;
          Property FontColorNoFocus:    TColor Read fFontColorNoFocus Write SetColorFont Default clBlack;

     end;

procedure Register;

implementation

Var  Foco :    Boolean;

Constructor TCoolEdit.Create(AOwner:TComponent);
Begin

     Inherited Create(AOwner);

     Color:=clSilver;
     fColorWithFocus:=clAqua;
     fColorWithOutFocus:=clSilver;
     fFontColorFocus:=clBlue;
     fFontColorNoFocus:=clBlack;


End;

Procedure TCoolEdit.WMSetFocus(var Message:TWMSetFocus);
Begin
     Inherited;

     Foco:=True;

     Repaint;
End;

Procedure TCoolEdit.WMKillFocus(var Message:TWMKillFocus);
Begin
     Inherited;

     Foco:=False;

     Repaint;
End;

Procedure TCoolEdit.Repaint();
Begin
     If Foco Then Begin
          Font.Style:=[fsBold];
          Font.Color:=fFontColorFocus;
          Color:=fColorWithFocus;
     End
     Else begin
          Font.Style:=[];
          Font.Color:=fFontColorNoFocus;
          Color:=fColorWithOutFocus;
     End;
End;

Procedure TCoolEdit.SetColor(Value:TColor);
Begin
     If fColor <>Value Then Begin
          fColor:=Value;
          Repaint;
     End;
End;

Procedure TCoolEdit.SetFont(Value:TFont);
Begin
     If fFont<>Value Then Begin
          fFont:=Value;
          Repaint;
     End;
End;

Procedure TCoolEdit.SetColorFont(Value:TColor);
Begin
     If fColorFont <>Value Then Begin
          fColorFont:=Value;
          Repaint;
     End;
End;

Destructor TCoolEdit.Destroy;
Begin
     Inherited Destroy;
End;

procedure Register;
begin
  RegisterComponents('Cool', [TCoolEdit]);
end;

end.

dec 05-12-2006 04:40:20

Hola,

Pues está muy bien, hombre. Muchas gracias por compartirlo. ;)

pascalutn2003 05-12-2006 05:15:06

Yo de nuevo...
 
¿Te anduvo?

Espero que si, pero fijate bien que si pones el efecto del cambio en el paint (donde debe ir) y no en repaint te puede funcionar mejor :rolleyes: ...

En cualquier momento paso otro codigo de un editor con un boton adentro que cambia el glyph...

None vemo depue' :)

dec 05-12-2006 05:18:17

Hola,

Bueno. En realidad me limité a leer el código fuente. Me parece curioso que quieras compartirlo, porque puede ser de utilidad a alguien.

Supongo que lo que dices del "Paint" tiene que ver conque no es del todo necesario el "Repaint", ¿verdad?

pascalutn2003 05-12-2006 05:19:08

Me olvidaba...
 
1.-Tambien se puede proceder del igual modo con un TDBEdit, ya lo hice y obviamente se llama TDBCoolEdit :D

2.- No te va a funcionar el cambio de color de foco porque no lo termine, solo le di un color fijo pero; en cuanto lo tenga lo paso. :cool:

pascalutn2003 05-12-2006 05:26:31

Sobre RePaint...
 
¿Curioso? :confused:

Para nada; pasa que es una buena forma de retribuir a las ayudas que me dan las personas que andan por el foro.:o

Y sip; lo del repaint puede no ser necesario, pero pasa que por ahi pequé de necio :rolleyes: y en lugar de utilizar el Paint como corresponde quise ver que pasaba de la forma en que lo subi.

De modo alguno vas a encontrar un par de cosas que no tienen sentido; sucede que iba escribiendo y bla bla bla, pero cuando daba marcha atras en algo no borraba todo el codigo basura.:p

En fin; espero puedan disfrutarlo (y mejorarlo jejejejeje; le falta mucho) yo por mi lado lo voy a seguir desarrlollando...

EDGARDO - Córdoba - Argentina :cool:

DarKraZY 05-12-2006 10:10:23

Hola! Muy bueno el componente. Tan sólo una objeción. La propiedad "FontColorFocus" y "FontColorNoFocus" no es necesaria, ya que podrías usar el atributo Color de "FocusFont" y "NoFocusFont".

unsaludo!

pascalutn2003 05-12-2006 23:37:59

Fe De Errata...
 
...por mas que quiero...

Hola a todos, anoche deje el codiguito del CoolEdit y mencione lo del Paint en lugar de RePaint.

Crei que era yo el herrado cuando le dije a David que habia sido necio al utilizar Repaint en lugar de Paint; pero resulta que Paint en el ancestro no existe:o y por muchas vueltas que le di; aun intentando con un evento personalizado agregado al que pretendi llamar Paint; no se pudo.

Pido disculpas por el error cometido.

pascalutn2003 05-12-2006 23:40:40

Para DarKrazy...
 
Hola pibeeee:

Tenes razon sobre las cosillas de mas; no me di cuenta jejejeje :)

Ya lo corregiré :rolleyes:

AzidRain 07-12-2006 06:06:07

DevEx Editors ya incluye este comportamiento para todos sus controles (mas de 30) con muchas otras opciones...

AzidRain 08-12-2006 03:35:38

Este código hace un "HotTrack" con Labels y checkboxes, si lo cambian un poco sirve para cualquier control...me parece que se explica solo

Código Delphi [-]
{Hay que sobreescribir el procedimiento WndProc procedure}
procedure WndProc(var Message : TMessage) ; override ;

procedure TForm1.WndProc(var Mesg : TMessage) ;
begin
{Aqui vemos que componente ha cambiado. 
  El bit de aqui nos dice sobre que componente se encuentra el mouse }
     if Mesg.LParam = Longint(Label1) then
        ChangeColor(Label1, Mesg.Msg) ;
     if Mesg.LParam = Longint(Label2) then
        ChangeColor(Label2, Mesg.Msg) ;
     if Mesg.LParam = Longint(Label3) then
        ChangeColor(Label3, Mesg.Msg) ;
     if Mesg.LParam = Longint(CheckBox1) then
        ChangeColor(CheckBox1, Mesg.Msg) ;

   inherited WndProc(Mesg) ;
end;


procedure TForm1.ChangeColor
   (Sender : TObject; Msg : Integer) ;
Begin
{ Si el mouse está sobre un label tenemos que hacer esto} 

  if Sender IS TLabel Then
   begin
     if (Msg = CM_MOUSELEAVE) then
      (Sender As TLabel).Font.Color:=clWindowText;
     if (Msg = CM_MOUSEENTER) then
      (Sender As TLabel).Font.Color:=clBlue;
   end;

{ Si es un checkbox...}  
  if Sender IS TCheckBox Then
   begin
    if (Msg = CM_MOUSELEAVE) then
     (Sender As TCheckBox).Font.Color:=clWindowText ;
    if (Msg = CM_MOUSEENTER) then
     (Sender As TCheckBox).Font.Color:=clRed ;
   end;
end;

pascalutn2003 08-12-2006 04:45:06

Pregunta...
 
Hola AzidRain

¿Donde están esos componentes?, ¿tienen el codigo para verlo?

EDGARDO - Córdoba - Argentina :cool:

P.D.: veo que me odiaste por hacer esto tan pavo para vos; perdon. :o

rcarrillom 08-12-2006 05:23:17

Cita:

Empezado por pascalutn2003
¿Donde están esos componentes?, ¿tienen el codigo para verlo?

Son de paga, la página de la suite es http://www.devexpress.com

AzidRain 09-12-2006 16:32:09

Cita:

Empezado por pascalutn2003
Hola AzidRain
P.D.: veo que me odiaste por hacer esto tan pavo para vos; perdon. :o

Hombre pero por que odiar.... Que palabra tan fea, a mi tambien me ha pasado que según yo descubro algo superbuenisimo y al comentarlo en el foro o con amigos resulta que ya lo habia por otro lado y mejor...Ja..Bueno finalmente siempre sirve todo el esfuerzo para aprender.

Ahi te deje un código muy similar que hace lo mismo que quieres, solo falta cmabiarlo para que afecte cualquier componente.

Los componentes de Developer Express los encuentras en http://www.devexpress.com, hay varios demos descargables. La verdad son impresionantes y para quienes tenemos que hacer aplicaciones que "son para entregar ayer" y que además se ven bien pues es un muy buena opción.
A mi me pasó que hice un descendiente de TDBGrid con totales y ordenación en los encabezados, pensé que era lo máximo hasta que vi TcxDBGrid de las DevEx...:D

Deiv 12-12-2006 16:16:33

Interesante tu componente, esta pregunta me hice hace 1 año atrás de cómo lograr ese efecto de selección muy diferente al predeterminado por windows y.... pregunté en otros foros, no me respondieron, luego me olvidé del asunto y no lo hice ni en el Club Delphi, sabiendo que aquí encuentro muchas respuestas.

Probando el mismo, no sé si estoy utilizando mal tu componente o no me queda claro: las propiedades = Color, FocusColor, FontColorFocus, FontColorNoFocus, por mucho que las cambio a otro Color, en tiempo de ejecución no trabajan.

Imagino ¿te falta acabarlo verdad? pregunto esto ya que con la programación de componentes no estoy muy familiarizado.
Un saludo

pascalutn2003 13-12-2006 02:04:04

El codigo de CoolEdit corregido
 
Hola Deiv: :D

Perdon por la demora; aqui tenes el código corregido : ;)

Falta darle unos retoques aun pero ahi va.

Vas a encontrar cosas como por ejemplo que conviven la propiedad Color(la que trae por defecto) y ColorNoFocus (que es la que le puse yo), traté de que el efecto de "normalización" a la hora de perder el foco se produjera con la misma propiedad Color(por defecto del componente) pero si hago eso se pone todo en negro y todavia no encuentro el porqué (que seguro es una burrada que estoy obviando por ser eso : una burrada).
Seguramente alguien le puede encontrar la vuelta y darle remedio; yo lo seguiré intentando al igual que con las fuentes que; posiblemente cambie todo a TStyleFont.

Espero te sirva y si le haces cambios avisame.

GRACIAS por comprar mi producto jajajajajaja noooo; una broma :cool:

Código Delphi [-]

unit CoolEdit;

interface

uses
  Windows, Messages, SysUtils, Classes, Controls, StdCtrls, Graphics, Forms;

type TCoolEdit = class(TEdit)
     private

          fColorWithFocus     :    TColor;
          fColorWithOutFocus  :    TColor;

          FColorFont          :    TColor;
          fFontColorFocus     :    TColor;
          fFontColorNoFocus   :    TColor;
          Foco                :    Boolean;

          Procedure SetColor(Value:TColor);
          Procedure SetColorNoFocus(Value:TColor);
          Procedure SetFontColorFocus(Value:TColor);
          Procedure SetFontColorNoFocus(Value:TColor);


     protected

          Procedure WMSetFocus(var Message:TWMSetFocus);message WM_SETFOCUS;
          Procedure WMKillFocus(var Message:TWMKillFocus);Message WM_KILLFOCUS;

     public

          Constructor Create(AOwner:TComponent);override;
          Destructor Destroy;override;

     published

          Procedure RePaint;Override;

          Property ColorFocus      :    TColor Read fColorWithFocus Write SetColor Default clAqua;
          Property ColorNoFocus    :    TColor Read fColorWithOutFocus Write SetColorNoFocus Default clSilver;

          Property FontColorFocus  :    TColor Read fFontColorFocus Write SetFontColorFocus Default clBlue;
          Property FontColorNoFocus:    TColor Read fFontColorNoFocus Write SetFontColorNoFocus Default clBlack;

     end;


     Procedure Register;

implementation

Procedure TCoolEdit.SetFontColorFocus(Value:TColor);
Begin

     fFontColorFocus:=Value;

     Repaint;

End;

Procedure TCoolEdit.SetFontColorNoFocus(Value:TColor);
Begin

     fFontColorNoFocus:=Value;

     Repaint;

End;

Constructor TCoolEdit.Create(AOwner:TComponent);
Begin

     Inherited Create(AOwner);

     Color:=clSilver;
     fColorWithFocus:=clAqua;
     fColorWithOutFocus:=clSilver;
     fFontColorFocus:=clBlue;
     fFontColorNoFocus:=clBlack;

End;

Procedure TCoolEdit.WMSetFocus(var Message:TWMSetFocus);
Begin
     Inherited;

     Foco:=True;

     Repaint;
End;

Procedure TCoolEdit.WMKillFocus(var Message:TWMKillFocus);
Begin
     Inherited;

     Foco:=False;

     Repaint;
End;

Procedure TCoolEdit.Repaint();
Begin
     If Foco Then Begin
          Font.Style:=[fsBold];
          Font.Color:=fFontColorFocus;
          Color:=fColorWithFocus;
     End
     Else begin
          Font.Style:=[];
          Font.Color:=fFontColorNoFocus;
          Color:=fColorWithOutFocus;
     End;
End;

Procedure TCoolEdit.SetColor(Value:TColor);
Begin
     If fColorWithFocus <>Value Then Begin
          fColorWithFocus:=Value;
          Repaint;
     End;
End;

Procedure TCoolEdit.SetColorNoFocus(Value:TColor);
Begin
     If fColorWithOutFocus <>Value Then Begin
          fColorWithOutFocus:=Value;
          Repaint;
     End;
End;

Destructor TCoolEdit.Destroy;
Begin

     Inherited Destroy;

End;

procedure Register;
begin
  RegisterComponents('Cool', [TCoolEdit]);
end;

end.

pascalutn2003 13-12-2006 02:11:02

otra vez yo jejeje
 
¿Como hacen para que el codigo que uno mete en el hilo les salga realmente como codigo (encuadrado y con formato Delphi) dentro del foro?, ¿que hay que tocar? o ¿lo hacen los moderadores?

EDGARDO - Córdoba - Argentina

Héctor Randolph 13-12-2006 02:17:26

Hola pascalutn2003!

Puedes hacerlo tu mismo, solamente tienes que encerrar el código entre etiquetas

[ delphi ] [ /delphi]

(pero sin espacios)

Más información aquí

http://www.clubdelphi.com/foros/showthread.php?t=10004

Saludos

pascalutn2003 13-12-2006 02:22:42

Ya está encuadrado
 
Gracias hector :

Actuo como si entendiera y todo

jejeje:cool:

Delar 13-12-2006 19:14:31

Que hace el inherited?


La franja horaria es GMT +2. Ahora son las 15:43:56.

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