Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-07-2015
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Implementando función

Amigos del foro, estoy trabajando en una función que me permita manipular propiedades de controles diferentes como

TEdit
TcxCurrencyEdit
TsDateEdit

y no me esta resultando por eso necesito de ustedes aquí La función

Código Delphi [-]
procedure OnOfReadOnly(Ctrls: array of TWinControl; const Enabled: Boolean);
var
  i: Integer;
begin
  for i:= Low(Ctrls) to High(Ctrls) do
  begin
    // TEdit
    if Ctrls[i] is TEdit then
    begin
      if Enabled = True then
      begin
        Ctrls[i].Color := $00FEEAD3;
        Ctrls[i].ReadOnly := Enabled;
      end else
      begin
        Ctrls[i].Color := clWhite;
        Ctrls[i].ReadOnly := Enabled;
      end;
    end else
    begin
    // TcxCurrencyEdit
    if Ctrls[i] is TcxCurrencyEdit then
    begin
      // ....

    end else
    begin
    // TsDateEdit
    if Ctrls[i] is TsDateEdit then
    begin
      // ....

    end;
    end;
    end;
  end;
end;

y para utilizarlo sería así...

Código Delphi [-]
procedure TFProductos.Button1Click(Sender: TObject);
begin
  OnOfReadOnly([Edit1, cxCurrencyEdit1, TsDateEdit],True);
end;

Lo que quiero es cambiar el color del edit o el cxCurrencyEdit, etc y protegerlo contra escritura activando la propiedad
ReadOnly mediante una función.
Responder Con Cita
  #2  
Antiguo 27-07-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Te faltaba por usar la otra alternativa de la sentencia if:
Código Delphi [-]
if  a then 
begin 

end
else if b then
begin 

end

También he cambiado el nombre (a mi parecer ambiguo) que tenía por uno más estandard. Y el primer parámetro que le paso es si estará habilitado o no, aunque estas cosas es más al gusto de cada uno.

Yo creo que mejora la legibilidad ya que lees "Establecer solo lectura: SI, a los controles siguientes...blah, blah".

Código Delphi [-]
procedure SetReadOnly(const Enabled: Boolean; Ctrls: array of TWinControl);
var
  i: Integer;
begin
  for i:= Low(Ctrls) to High(Ctrls) do
  begin
    // TEdit
    if Ctrls[i] is TEdit then
    begin
      if Enabled 
        then  Ctrls[i].Color := $00FEEAD3
        else  Ctrls[i].Color := clWhite;
      Ctrls[i].ReadOnly := Enabled;
    end 
    else if Ctrls[i] is TcxCurrencyEdit then
    begin
      // TcxCurrencyEdit
    end
    else if Ctrls[i] is TsDateEdit then
    begin
    // TsDateEdit
    end;
  end;
end;

y para utilizarlo sería así...

Código Delphi [-]
procedure TFProductos.Button1Click(Sender: TObject);
begin
  SetReadOnly(True, [Edit1, cxCurrencyEdit1, TsDateEdit]);
end;

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 28-07-2015
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Gracias Lepe por tu ayuda, pero en lo que me refiero a que no me esta resultando es a estos errores que me salen.



en la sentecia
Código Delphi [-]
// TEdit
    if Ctrls[i] is TEdit then
el control no me reconoce que es un TEdit o TcxTextEdit, etc... es aqui que devo encontrar la manera de indicar de que control se trata.
Responder Con Cita
  #4  
Antiguo 28-07-2015
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Tendrás que hacer un "cast" o moldear el control en cuestión, algo como:

Código Delphi [-]
TEdit(Ctrls[i]).Color := clRed;

No recuerdo si "TCustomEdit" ya implementa la propiedad "Color". Si los controles que usas heredan todos de "TCustomEdit" y este cuenta con la propiedad "Color", entonces podrías usar "TCustomEdit" en lugar de "TWinControl", lo que te ahorraría hacer el moldeado mencionado arriba.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 28-07-2015
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Gracias amigos por contribuir, creo haber solucionado, de esta manera. Aquí la función

función
Código Delphi [-]
procedure TForm1.OnOfReadOnly(const Enabled: Boolean; Ctrls: array of TControl);
var
  i: Integer;
begin
  for i:= Low(Ctrls) to High(Ctrls) do
  begin
    // TEdit
    if TWinControl(Ctrls[i]) is TEdit then
    begin
      if Enabled
        then  TEdit(Ctrls[i]).Color := $00FEEAD3
        else  TEdit(Ctrls[i]).Color := clWhite;
      TEdit(Ctrls[i]).ReadOnly := Enabled;
    end
    // TcxCurrencyEdit
    else if TWinControl(Ctrls[i]) is TcxCurrencyEdit then
    begin
      if Enabled
        then  TcxCurrencyEdit(Ctrls[i]).Style.Color := $00FEEAD3
        else  TcxCurrencyEdit(Ctrls[i]).Style.Color := clWhite;
      TcxCurrencyEdit(Ctrls[i]).Properties.ReadOnly := Enabled;
    end
    // TsDateEdit
    else if TWinControl(Ctrls[i]) is TsDateEdit then
    begin
      if Enabled
        then  TsDateEdit(Ctrls[i]).Color := $00FEEAD3
        else  TsDateEdit(Ctrls[i]).Color := clWhite;
      TsDateEdit(Ctrls[i]).ReadOnly := Enabled;
    end;
  end;
end;
Para usarlo.
Código Delphi [-]
procedure TFProductos.Button1Click(Sender: TObject);
begin
  OnOfReadOnly(True, [Edit1, cxCurrencyEdit1, TsDateEdit1]);
end;
Para volver al estado anterior de los componentes simplemente el True por False.

Última edición por wilcg fecha: 28-07-2015 a las 01:04:36.
Responder Con Cita
Respuesta



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
Baby Steps: Implementando un Recolector de basura mamcx La Taberna 4 27-12-2013 10:28:24
Función javascript que llama a otra función javascript en otra página jandroruiz HTML, Javascript y otros 4 28-02-2013 11:38:00
función POS petete2008 Varios 4 05-09-2012 16:30:27
Implementando un servidor para juegos con Indy 10 fide_uci Internet 7 27-05-2011 13:29:23
Implementando Multicapas con Sockets Oxa78 Varios 0 28-03-2007 20:51:20


La franja horaria es GMT +2. Ahora son las 13:55:07.


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
Copyright 1996-2007 Club Delphi