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 22-09-2011
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
Hola.

También podes hacerte un procedimiento que cambie cualquier propiedad ordinal, siempre que la tengan, de los controles del form:

Código Delphi [-]
uses TypInfo;

procedure TForm1.SetCtrlsProp(Lista: array of string; AProperty: string;
  Value: Variant);
var
  i,j: Integer;
begin
  for i:= High(Lista) downto Low(Lista) do
  begin
    j:= 0;
    while(j < ControlCount)and(Controls[j].Name <> Lista[i])do Inc(j);
    if(j < ControlCount)and(Controls[j].Name = Lista[i]) then
    begin
      if GetPropInfo(Controls[j].ClassInfo, AProperty) <> nil then
       SetOrdProp(Controls[j], AProperty, Value);
    end;
  end;
end;

Eso te permite hacer cosas como por ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  SetCtrlsProp(['Edit1', 'Edit3', 'Edit2'],'Enabled', False);
  SetCtrlsProp(['DBGrid1', 'DBEdit1', 'DBEdit2'], 'ReadOnly', True);
  SetCtrlsProp(['Edit1', 'Edit2', 'DBGrid1'], 'Color', clYellow);
end;
Lo que sí tenés que ser cuidadoso con los nombres, el procedimiento no es tan virtuoso como para distinguir Edit1 de EdiT1 ...
Pero si deseas ese comportamiento, es muy sencillo implementar que ignore mayúsculas/minúsculas. (UpperCase)

Saludos.

Edito: Me olvidé de avisarte, el procedimiento funciona sólo con propiedades ordinales. (no podrías cambiar la propiedad Text por ejemplo)
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 22-09-2011 a las 23:53:08. Razón: Agregar aclaración
Responder Con Cita
  #2  
Antiguo 22-09-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 20
Lenny Va por buen camino
Talking Muchisimas gracias!!!

Uffff!!! Muchas gracias!!! Gracias por la pronta respuesta y mas aun por la variedad de soluciones, en una media hora mas menos probare los codigos, muchas gracias nuevamente, espero no tener problemas... Byes!!
Responder Con Cita
  #3  
Antiguo 23-09-2011
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
Hola.

Aunque no pretende ser código de alto vuelo con el uso de RTTI ( esa taréa se la dejo a Neftalí ), te completé el procedimiento para que contemple algunos tipos más de propiedades. (no podía ser tan haragán...).
Código Delphi [-]
uses TypInfo;

procedure TForm1.SetCtrlsProp(Lista: array of string; AProp,Value: Variant);
var
  i,j: Integer;
  PInfo: PPropInfo;
begin
  for i:= High(Lista) downto Low(Lista) do
  begin
    j:= 0;
    while(j < ControlCount)and(Controls[j].Name <> Lista[i])do Inc(j);
    if(j < ControlCount)and(Controls[j].Name = Lista[i]) then
    begin
      PInfo:= GetPropInfo(Controls[j].ClassInfo, AProp);
      if PInfo <> nil then
      begin
        case PInfo^.PropType^.Kind of
          tkString,tkLString:SetStrProp(Controls[j],Aprop,VarToStr(Value));
          tkInteger: SetOrdProp(Controls[j], AProp, StrToInt(Value));
          tkEnumeration: SetOrdProp(Controls[j], AProp,Value);
          else 
            raise Exception.Create('caso no contemplado');
        end;
      end;
    end;
  end;
end;

Ahora podés hacer por ejemplo:
Código Delphi [-]
  SetCtrlsProp(['Edit1', 'Edit3', 'Edit2'], 'Text', 'NUEVO TEXTO');
  SetCtrlsProp(['DBGrid1', 'DBEdit1', 'DBEdit2'], 'ReadOnly', True);
  SetCtrlsProp(['Edit1', 'Edit2', 'DBGrid1'], 'Color', clYellow);
  SetCtrlsProp(['Edit1'], 'Cursor', crHandPoint);

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 23-09-2011 a las 00:49:26.
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
Seleccionar valor en un rango de datos jourdan Firebird e Interbase 4 19-05-2010 07:59:54
Como seleccionar campos de una tabla sin saber cuantos van a seleccionar david duarte SQL 7 05-04-2010 21:15:43
Como seleccionar un rango de filas en un DBGrid? YAlvarez OOP 1 09-05-2008 19:54:47
Los DBEdits drakkon Conexión con bases de datos 1 12-06-2007 02:47:41
Utilizar SetRange para seleccionar rango de una tabla verodelphi Lazarus, FreePascal, Kylix, etc. 0 20-09-2006 13:32:20


La franja horaria es GMT +2. Ahora son las 18:55: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