Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-09-2013
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 305
Poder: 23
elrayo76 Va camino a la fama
Amigo ecfisa,

A lo que me refiero es que no quiero tener que hacer algo que yo compare si el componente al que le quiero cambiar el color es del tipo TEdit, TDBEdit, TRxEdit u otro. En lengua española seria como decir simplemente lo siguiente: todos los componentes que son editables cambiale el color cuando ingresas o cuando salis del mismo.

Si tengo que decir el compoente editable de las Jedi o el compoente editable de las RXlib o de cual fuere no tiene sentido que pregunte porque eso lo se hacer. Además si el día de mañana cambio un componente de esos por otro de otro desarrollador quiero que lo que tengo diseñado siga funcionando y en lo posible sin tocar nada

Saludos
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #2  
Antiguo 11-09-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 23
ozsWizzard Va por buen camino
Yo tampoco entiendo muy bien lo que quieres hacer exactamente. Y supongo que el hecho de que sea por RTTI o no es indiferente siempre y cuando lo puedas hacer.

Me da la sensación que quieres saber cuando es "una caja de texto" o algo así. Cuando dices componentes de un mismo tipo, haces una tipificación personal, que nada tiene que ver con que exista ese tipo en Delphi, por lo tanto, sólo se me ocurre que casi todos los componentes de ese tipo acaban heredando de TCustomEdit, por lo tanto se podría preguntar

Código Delphi [-]
if Objeto is TCustomEdit then

Ya sé que esto no es usando RTTI, pero es que no sé de que forma te puede ayudar el RTTI a saber algo así, y mucho menos controlarlo en un componente de un tercero.

Lo mismo no es esto lo que quieres saber puesto que el título del hilo, "Acceder a una propiedad", no tiene nada que ver.

Un saludo.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #3  
Antiguo 11-09-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 23
ozsWizzard Va por buen camino
Y si te he entendido bien, más que "Editable" diría "Caja de texto". Componentes editables hay muchos.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
  #4  
Antiguo 11-09-2013
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 305
Poder: 23
elrayo76 Va camino a la fama
Bueno si me exprese mal cuando dije editable. Es como dices 'caja de texto'.

Por otro lado eso que comentas puede que me funcione y es justamente similar a lo que hice alguna vez. Tendría que probarlo y ver si funciona con los componentes de terceros.

Tu dices que lo que pregunt en el titulo nada que ver con esto, si tienes razon pero esta todo anidado y en su momento crei que mediante RTTI se podría ahacer algo bastante genérico como para no tocarlo si se cambian los componentes.

Cualquir cosa los comento como me fue.

Saludos,
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #5  
Antiguo 11-09-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por elrayo76 Ver Mensaje
En lengua española seria como decir simplemente lo siguiente: todos los componentes que son editables cambiale el color cuando ingresas o cuando salis del mismo.
Mi estimado elrayo76, me temo que eso es mas simple de decir que de implementar...

La cuestión es: ¿ Que factor común se debería tomaría para identificar a un control como editable ?

A primera vista se podría pensar que todos aquellos que posean la propiedad Text, aunque no todos los que la poseen permiten ingresar datos...

Hasta Delphi 2010, mediante RTTI , sólo son accesibles las propiedades publicadas. (creo que luego existe la unit RTTI.PAS que permite acceder a las públicas)

Pero mi Delphi 7 no puede ; dejaría inmerecidamente fuera de la lista por ejemplo al TDateTimePicker, al TMemo y al TRichEdit que no publican la propiedad Text y sin embargo tan generosamente nos permiten escribir en ellos.


Entonces, si tuviera que darle una solución con la herramienta con que dispongo haría:
Código Delphi [-]
unit PaintEditCtrl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Mask, Grids, ComCtrls, DBCtrls,DBGrids;

const
  WM_AFTER_CREATE = WM_USER + 300;

type
  TForm = class(Forms.TForm)
  private
    FPrevFocusedCtrl : TWinControl;
    FPrevFocusedColor: TColor;
    FFocusedColor    : TColor;
    function IsEditable(WC: TWinControl): Boolean;
    procedure WmAfterCreate(var Msg: TMessage); message WM_AFTER_CREATE;
    procedure ActiveCtrlChange(Sender: TObject);
  public
    constructor Create(AOWner: TComponent); override;
    destructor Destroy; override;
    property FocusedColor : TColor read FFocusedColor write FFocusedColor;
  end;

implementation

uses TypInfo;

var
 WCArray : array of TWinControlClass;

// Create
constructor TForm.Create(AOWner: TComponent);
begin
  inherited;
  FFocusedColor := clActiveCaption;

  // Componentes sobre los que se puede editar
  SetLength(WCArray, 9);
  WCArray[0] := TEdit;
  WCArray[1] := TMemo;
  WCArray[2] := TComboBox;
  WCArray[3] := TMaskEdit;
  WCArray[4] := TStringGrid;
  WCArray[5] := TLabeledEdit;
  WCArray[6] := TRichEdit;
  WCArray[7] := TDateTimePicker;
  WCArray[8] := TDBEdit;
  //...

  PostMessage(Handle, WM_AFTER_CREATE, 0, 0);
end;

// Devuelve True si la clase debe pintarse
function TForm.IsEditable(WC: TWinControl): Boolean;
var
  i: Integer;
begin
  Result := False;
  for i := Low(WCArray) to High(WCArray) do
    if (WC is WCArray[i]) and  Assigned(GetPropInfo(WC.ClassInfo,'Color')) then
      Result := True;
end;

// After Create
procedure TForm.WmAfterCreate(var Msg: TMessage);
begin
  Screen.OnActiveControlChange := ActiveCtrlChange;
  FPrevFocusedCtrl := Screen.ActiveControl;
  if IsEditable(FPrevFocusedCtrl) then
  begin
    FPrevFocusedColor := TColor(GetOrdProp(Screen.ActiveControl,'Color'));
    if IsEditable(FPrevFocusedCtrl) then
      SetOrdProp(FPrevFocusedCtrl,'Color',FFocusedColor);
  end;
end;

// Cambia control activo
procedure TForm.ActiveCtrlChange(Sender: TObject);
begin
  if IsEditable(FPrevFocusedCtrl) then
    SetOrdProp(FPrevFocusedCtrl, 'Color', FPrevFocusedColor);
  if IsEditable(Screen.ActiveControl) then
  begin
    FPrevFocusedColor := TColor(GetOrdProp(Screen.ActiveControl, 'Color'));
    SetOrdProp(Screen.ActiveControl, 'Color', FFocusedColor);
  end;
  FPrevFocusedCtrl := Screen.ActiveControl;
end;

// Destroy
destructor TForm.Destroy;
begin
  Screen.OnActiveControlChange := nil;
  Finalize(WCArray);
  inherited;
end;

end.

Uso:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  StdCtrls, ExtCtrls, Grids, Mask, Buttons, ComCtrls, DBCtrls,DBGrids,
  PaintEditCtrl; (* Importante: Inclusión de PaintEditCtrl en la sección de interface *)

type
  TForm1 = class(TForm)
  private
    ...
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  FocusedColor := clActiveCaption;
end;

end.
De ese modo mi trabajo sería: Incluir la unidad, declarar el color del foco y de vez en cuando, agregar al arreglo los nuevos componentes que vaya incorporando.... Todo esto sin salirme de los que están basados en la VCL.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 11-09-2013 a las 21:15:48.
Responder Con Cita
  #6  
Antiguo 11-09-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 23
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
ecfisa,

Cita:
Empezado por ecfisa
...Incluir la unidad, declarar el color del foco y de vez en cuando, agregar al arreglo los nuevos componentes que vaya incorporando...
Excelente

Nelson.
Responder Con Cita
  #7  
Antiguo 12-09-2013
Avatar de ozsWizzard
ozsWizzard ozsWizzard is offline
Miembro
 
Registrado: may 2004
Ubicación: Murcia
Posts: 190
Poder: 23
ozsWizzard Va por buen camino
+1 a ecfisa. Me gusta la solución.

Si bien es cierto que uno debe de acordarse de agregar cada nuevo componente del supuesto tipo "editable", pero es solo eso.
__________________
La Madurez se llama...
~~~Gaia~~~
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Propiedad Locate dsa132132 OOP 20 12-12-2011 01:44:57
propiedad de un hilo kurono Varios 1 11-03-2009 02:46:51
acceder a un .dbf con ADO sidneyb Conexión con bases de datos 6 23-11-2007 23:07:14
[clases] No puedo acceder a propiedad protegida Ñuño Martínez PHP 8 11-01-2007 14:24:13
acceder a DBF (SQL) Demian Conexión con bases de datos 0 25-08-2004 21:47:56


La franja horaria es GMT +2. Ahora son las 05:21:20.


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