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-10-2012
Avatar de darkbits
darkbits darkbits is offline
Miembro
 
Registrado: may 2006
Posts: 280
Poder: 18
darkbits Va por buen camino
optimizar el codigo para no tener lo mismo mas de 5 veces en el proyecto

un saludo al club
tengo este codigo( abajo) lo utilizo en mas de 3 form del proyecto y en un form el codigo esta como 5 veces
es un simple comparador de estado.

Necesito una mano como se puede meter esto a un procedure estado; o no se como se hace esto.
que cuando lo necesito lllamo a ese procedure sin tener q pegar el codigo ma de 15 veces en el mismo proyecto.


Código Delphi [-]
  if estadorma.Caption='DEVUELTO' then
        begin
         nrorma.Enabled:=false;
         estadorma.Enabled:=false;
        end
        else
        begin
         nrorma.Enabled:=true;
         estadorma.Enabled:=true;
        end;
__________________
Gracias por su coloración club delphi

darkbits ;)
Responder Con Cita
  #2  
Antiguo 28-10-2012
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 darkbits.

El código podría ser más simple si supiera que componentes son estadorma y nrorma...

Pone en una unidad que utilices en los forms que mencionas (o create una al efecto e incluila) el siguiente procedimiento:
Código Delphi [-]
  ...
  procedure SetCtrlOnOff(Ctrl1, Ctrl2: TControl);
  ...
implementation

uses TypInfo;

procedure SetCtrlOnOff(Ctrl1, Ctrl2: TControl);
begin
  if GetPropInfo(Ctrl1, 'CAPTION') = nil then
    raise Exception.Create('Error: Propiedad Caption no encontrada');
  if GetStrProp(Ctrl1, 'Caption') = 'DEVUELTO' then
  begin
    Ctrl1.Enabled:= False;
    Ctrl2.Enabled:= False
  end
  else
  begin
    Ctrl1.Enabled:= True;
    Ctrl2.Enabled:= True;
  end;
end;
...

Llamadas ejemplo:
Código Delphi [-]
  SetCtrlOnOff(estadonorma, nrorma);  // correcto (si estadonorma tiene la propiedad Caption)
  SetCtrlOnOff(Button2,Button3);      // también correcto
  SetCtrlOnOff(Edit1, Label5);        // error!

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-10-2012
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Piensa en términos de hacer "plantillas" y sustituye instancias especificas de clases con los tipos que estas representan (ósea, piensa en términos de datos/información no en términos de sustantivos)

Código Delphi [-]
function checkNorma(labelNorma:TLabel, checkNorma:TCheck)
var
  esDevuelto:Boolean;
begin
    esNoDevuelto := not labelNorma:TLabel.
Caption='DEVUELTO';

    nrorma.Enabled:=esNoDevuelto;
    estadorma.Enabled:=esNoDevuelto;
end;

P.D: Este codigo esta sin probar, y adivine que tipos son los que usas.
__________________
El malabarista.
Responder Con Cita
  #4  
Antiguo 28-10-2012
Avatar de darkbits
darkbits darkbits is offline
Miembro
 
Registrado: may 2006
Posts: 280
Poder: 18
darkbits Va por buen camino
gracias por su ayuda
vi unos ejemplos y creo que es la forma mas facil trate de hacerlo no funciona
Código Delphi [-]
procedure estado;
begin
  if estadorma.Caption='DEVUELTO' then
        begin
         nrorma.Enabled:=false;
         estadorma.Enabled:=false;
        end
        else
        begin
         nrorma.Enabled:=true;
         estadorma.Enabled:=true;
        end;
end;

y lo llaman de esta forma en los los diferentes form

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
...
..
estado;
..
..
end;
__________________
Gracias por su coloración club delphi

darkbits ;)
Responder Con Cita
  #5  
Antiguo 28-10-2012
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
darkbits,

Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses
   Unit2; // Verifica el estatus de un control, en el ejemplo TLabel

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
   Label1.Caption := 'DEVUELTO';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Label1.Caption := 'NO DEVUELTO';
end;

procedure TForm1.Button3Click(Sender: TObject);
var
   NameControl : String;

begin

   NameControl := 'Label1';

   // Verifica el estatus de un control, en el ejemplo TLabel
   If StatusCaption(Form1,NameControl) then
      ShowMessage('Estatus Devuelto')
   else
      ShowMessage('Estatus No Devuelto')

end;

end.
Código Delphi [-]
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

  Function StatusCaption(f : TForm; NameControl : String) : Boolean;

implementation

// Verifica el estatus de un control, en el ejemplo TLabel
Function StatusCaption(f : TForm; NameControl : String) : Boolean;
var
   Control : TComponent;

begin

   Control := f.FindComponent(NameControl);

   With Control as TLabel Do
   begin
      if Caption='DEVUELTO' then
      begin
         // nrorma.Enabled:=false;
         // estadorma.Enabled:=false;
         Result := True;
      end
      else
      begin
         // nrorma.Enabled:=true;
         // estadorma.Enabled:=true;
         Result := False;
      end;
   end;

end;

end.
Al pasar el formulario y el nombre del control a verificar perteneciente a ese formulario (En el ejemplo Label1) por medio de la función StatusCaption, puedes centralizar en una sola rutina la verificación del estatus del control sin importar el número de formularios donde la realices.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 28-10-2012 a las 01:42:32.
Responder Con Cita
  #6  
Antiguo 28-10-2012
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 darkbits Ver Mensaje
gracias por su ayuda
vi unos ejemplos y creo que es la forma mas facil trate de hacerlo no funciona
Hola.

A mi me funciona perfectamente, te adjunto un ejemplo para que lo estudies con tranquilidad.

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 28-11-2012 a las 07:10:49.
Responder Con Cita
  #7  
Antiguo 28-10-2012
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
Me olvidaba...

Seguramente notes un cambio con respecto al código del primer mensaje. Lo hice no por que no funcionara, si no por que mirando el código de mamcx, me dí cuenta que se puede reducir a:
Código Delphi [-]
procedure SetCtrlOnOff(Ctrl1, Ctrl2: TControl);
var
  Activo: Boolean;
begin
  if GetPropInfo(Ctrl1, 'CAPTION') = nil then
    raise Exception.Create('Error: Propiedad Caption no encontrada');
  Activo := not (GetStrProp(Ctrl1, 'Caption') = 'DEVUELTO');
  // o igualmente: Activo := GetStrProp(Ctrl1, 'Caption') <> 'DEVUELTO';
  Ctrl1.Enabled:= Activo;
  Ctrl2.Enabled:= Activo;
end;
Es la forma en que normalmente se haría, pero uno no siempre anda con todas las luces...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
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
mismo reporte varias veces qreport yossi Impresión 0 20-07-2011 12:13:16
Quiero liberar my query para usar el mismo varias veces zcatzz Conexión con bases de datos 7 27-01-2007 23:39:45
FreeReport-Imprimir dos veces el mismo reporte MeArevalo Impresión 1 05-11-2004 20:34:00
Abrir varias veces el mismo form Phacko Varios 7 25-09-2004 05:22:01
Obtener dos veces el mismo campo. Jose_Pérez SQL 11 27-02-2004 05:51:06


La franja horaria es GMT +2. Ahora son las 19:17:01.


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