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 22-09-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Exclamation Seleccionar un rango de DBEdits

Buenas y gracias de antemano ante cualquier ayuda u/o comentario...
Tengo una duda existencial, ¿Es posible seleccionar un rango de DBEdits para, por ejemplo, seleccionar los DBEdits del 1 al 10 y dejarlos en "ReadOnly = True" sin afectar a los demas? Mas que nada es para no tener que escrivir el codigo correspondiente por cada DBEdit a cambiar ya que necesito dejar el resto intacto...
Utilizo Delphi 2010, MySQL, Zeos 7... de antemano Muchas Gracias...
Responder Con Cita
  #2  
Antiguo 22-09-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
yo uso mas o menos esta funcion

Código Delphi [-]
 
   for i := 0 to (Self.ComponentCount - 1) do  begin
        if (Self.Components[i] is TDBEdit) or (Self.Components[i] is TComboBox) then begin
          TEdit(Self.Components[i]).Enabled := False;
        end;
      end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 22-09-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
Lenny Va por buen camino
Exclamation

Gracias Oscarac, es mas menos lo que necesito, tengo un codigo similar que hace lo mismo, pero este codigo afecta a todos los DBEdits, y yo necesito solo algunos, en rangos, del 1 al 10 por ejemplo, no todos...
Esop... espero alguien pueda ayudarme a buscar una solucion...
Responder Con Cita
  #4  
Antiguo 22-09-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
A los DBEdit que quieras cambiar ponles su propiedad Tag igual a 1 en el inspector de objetos y en el código de oscarac añades la condición:

Código Delphi [-]
(Self.Components[i].Tag = 1)

// Saludos
Responder Con Cita
  #5  
Antiguo 22-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
  #6  
Antiguo 22-09-2011
Lenny Lenny is offline
Miembro
 
Registrado: jun 2007
Posts: 161
Poder: 17
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
  #7  
Antiguo 23-09-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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



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 07:07:45.


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