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 13-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Duda con ComponentCout

Tengo una Unit en que yo escribo mis fuctions y procedures, para toda mi aplicacion. Que pasa es que i gustaria de esribir mto qmptodo el contenido de una sola vez de los Edits, maskEdit y etc... En el Form donde queda los componentes funciona. Entonces decidir escrivir ellos en una Unit para siempre que fuera usar, no necesito escribir en cada Form que tengo, pero solo llamar la procedure y listo. Pero como mi Unit no tiene componente y ninguno Form, el da erro de:
Undeclared Identifier para ComponentCout. Ya puzo en mi uses varias units, pero como no tengo Component pues es solo una Unit, mi gustaria de saber como hago esto.
Responder Con Cita
  #2  
Antiguo 13-10-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Paulao, lo que puedes hacer es que uno de tus parámetros de tu procedimiento sea de tipo TForm, en el cual le pasaras el formulario del que quieres que recorra sus componentes:

Código Delphi [-]
unit Unit2;
interface
uses
  Forms, StdCtrls,Dialogs ........;
   procedure Recorrer(formulario : TForm);
 
..........................................................
procedure Recorrer(formulario : TForm);
begin
 for ind:=0 to formulario.ComponentCount-1 do
  begin
   if formulario.Components[ind] is TEdit then
  ......................................................

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 13-10-2010
Paulao Paulao is offline
Miembro
 
Registrado: sep 2003
Ubicación: Rua D 31 Casa 1 - Inhoaíba - Rio de Janeiro - RJ - Brasil
Posts: 637
Poder: 21
Paulao Va por buen camino
Yo tenia hecho esto, pero todo se queda congelado, travado y tengo dar un Kill en proceso.
Código Delphi [-]
procedure LimpaEdit(Form: TForm);
var
  i: Integer;
begin
  for i := 0 to Form.ComponentCount - 1 do
  begin
    if(Form.Components[i] is TcxTextEdit) then
      (Form.Components[i] as TcxTextEdit).Clear;

    if(Form.Components[i] is TcxLookupComboBox) then
      (Form.Components[i] as TcxLookupComboBox).Clear;

    if(Form.Components[i] is TcxCalcEdit) then
      (Form.Components[i] as TcxCalcEdit).Text := '0';

    if(Form.Components[i] is TcxDateEdit) then
      (Form.Components[i] as TcxDateEdit).Clear;
  end;
end;
Responder Con Cita
  #4  
Antiguo 13-10-2010
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola de nuevo Paulao, a mi me funciona bien, ¿te sale algún mensaje de error?, no sera que entra en un ciclo infinito, verifica que valor tiene ComponentCount cuando entra a tu procedimiento.

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #5  
Antiguo 13-10-2010
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 Paulao.

No tengo esos componentes. Sin embargo ese código debería funcionar bíen usando los componentes standard.

Lo que sí te comento es que no hay necesidad de hacer:
Código Delphi [-]
 if(Form.Components[i] is TcxTextEdit) then 
      (Form.Components[i] as TcxTextEdit).Clear;
Es redundante y degrada el tamaño y velocidad del código.

Mucho mejor es:
Código Delphi [-]
   if (Form.Components[i] is TcxTextEdit) then
    // ya sabemos que es un TcxTextEdit...
      TcxTextEdit(Form.Components[i]).Clear;

Saludos.
Responder Con Cita
  #6  
Antiguo 13-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Thumbs up

Cita:
Empezado por ecfisa Ver Mensaje
...
Lo que sí te comento es que no hay necesidad de hacer:
Código Delphi [-]
 if(Form.Components[i] is TcxTextEdit) then 
      (Form.Components[i] as TcxTextEdit).Clear;
Es redundante y degrada el tamaño y velocidad del código.

Mucho mejor es:
Código Delphi [-]
   if (Form.Components[i] is TcxTextEdit) then
    // ya sabemos que es un TcxTextEdit...
      TcxTextEdit(Form.Components[i]).Clear;
Saludos.
Pues yo no le veo diferencia, ya que en Delphi ambas formas son equivalente:
Código Delphi [-]
if(Form.Components[i] is TcxTextEdit) then 
      (Form.Components[i] as TcxTextEdit).Clear;// se está haciendo un casting usando el operador dinámico "as"
es equivalente a:
Código Delphi [-]
   if (Form.Components[i] is TcxTextEdit) then
      TcxTextEdit(Form.Components[i]).Clear;//Se está haciendo casting sin ningun operador
Lo único que puedo sugerir es que si SOLO se quiere Iterar el ciclo con solo Componentes que son descencientes de TControl, es decir sólo con controles, pues en ese caso sería mejor usar la propiedad ControlCount en lugar de ComponentCount para optimizar la operación , ya que la propiedad ComponentCount toma en cuenta tambien todos los componentes que sean o no sean controles, por ejemplo : Los TQuery,TDataSource,TTable,TXPManifest,etc. y como veis en éste caso no necesito incluir ese tipo de componentes en el ciclo.
De esa forma el procedimiento Optimizado quedaría así:
Código Delphi [-]
procedure LimpaEdit(Form: TForm);
var
  i: Integer;
begin
  for i := 0 to Form.ControlCount - 1 do
  begin
    if(Form.Controls[i] is TcxTextEdit) then
      (Form.Controls[i] as TcxTextEdit).Clear;

    if(Form.Controls[i] is TcxLookupComboBox) then
      (Form.Controls[i] as TcxLookupComboBox).Clear;

    if(Form.Controls[i] is TcxCalcEdit) then
      (Form.Controls[i] as TcxCalcEdit).Text := '0';

    if(Form.Controls[i] is TcxDateEdit) then
      (Form.Controls[i] as TcxDateEdit).Clear;
  end;
end;
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 13-10-2010 a las 22:28:45.
Responder Con Cita
  #7  
Antiguo 13-10-2010
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
Cita:
Empezado por rgstuamigo Ver Mensaje
Pues yo no le veo diferencia, ya que en Delphi ambas formas son equivalente:
Hola.

Descomponiendo as en sus primitivas, sería:
Código Delphi [-]
  if Form.Component[i] is TcxTextEdit then
    TcxTextEdit(Form.Component[i]).Clear
  else
    raise EInvalidCast.Create('Tipo de conversión iválido');

Usando el ejemplo:
Código Delphi [-]
  if(Form.Controls[i] is TcxTextEdit) then
      (Form.Controls[i] as TcxTextEdit).Clear;

Y realizando un reemplazo por su equivalente queda:

Código Delphi [-]
  if Form.Component[i] is TcxTextEdit then
  { línea del as }
   if Form.Component[i] is TcxTextEdit then  // redundante...
     TcxTextEdit(Form.Component[i]).Clear
   else
    raise EInvalidCast.Create('Tipo de conversión iválido');

Saludos.

Última edición por ecfisa fecha: 13-10-2010 a las 23:24:18.
Responder Con Cita
  #8  
Antiguo 13-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Question

Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Descomponiendo as en sus primitivas, sería:
Código Delphi [-]
  if Form.Component[i] is TcxTextEdit then
    TcxTextEdit(Form.Component[i]).Clear
  else
    raise EInvalidCast.Create('Tipo de conversión iválido');
...
Pues, me sorpende tal "descomposición", aunque me gustaría saber ¿de dónde lo has sacado? Podrías darme algun enlace al respecto?
Épale..Cada día se aprende algo nuevo.
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 14-10-2010 a las 00:00:33.
Responder Con Cita
  #9  
Antiguo 14-10-2010
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
Cita:
Empezado por rgstuamigo Ver Mensaje
Pues, me sorpende tal "descomposición", aunque me gustaría saber ¿de dónde lo has sacado? Podrías darme algun enlace al respecto?
Épale..Cada día se aprende algo nuevo.
Saludos...
Hola.

Si como no. Recordaba haberlo leido en La cara Oculta de Delphi.
Tuve que buscar un poco por que no sabía exactamente donde, pero ya lo ubiqué, está en la página 169.

Cita:
"El operador as se puede descomponer en instrucciones más simples. La primera
instrucción del ejemplo anterior es equivalente a la siguiente secuencia de instruc-
ciones:
if ActiveControl is TButton then
TButton(ActiveControl).Click
else
raise EInvalidCast.Create('Invalid type cast');
..."
Saludos.

Última edición por ecfisa fecha: 14-10-2010 a las 00:56:23.
Responder Con Cita
  #10  
Antiguo 14-10-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Pues si...tienes toda la razón amigo ecfisa.
En ese caso pues el código final bien Optimizado quedaría así:
Código Delphi [-]
procedure LimpaEdit(Form: TForm);
var
  i: Integer;
begin
  for i := 0 to Form.ControlCount - 1 do
  begin
    if(Form.Controls[i] is TcxTextEdit) then
      TcxTextEdit(Form.Controls[i]).Clear;

    if(Form.Controls[i] is TcxLookupComboBox) then
      TcxLookupComboBox(Form.Controls[i]).Clear;

    if(Form.Controls[i] is TcxCalcEdit) then
      TcxCalcEdit(Form.Controls[i]).Text := '0';

    if(Form.Controls[i] is TcxDateEdit) then
      TcxDateEdit(Form.Controls[i]).Clear;
  end;
end;
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
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
duda ECO VCL.NET cmm07 Varios 1 03-03-2008 19:32:56
Una Duda sdiaz1983 Varios 4 22-09-2007 16:39:40
Duda Delphius Varios 5 02-06-2005 07:40:29
Duda alachaise PHP 1 11-01-2005 19:25:43
Una duda linuz Lazarus, FreePascal, Kylix, etc. 3 29-09-2004 23:41:27


La franja horaria es GMT +2. Ahora son las 13:26:50.


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