Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   procedimiento para habilitar o inhabilitar botones (https://www.clubdelphi.com/foros/showthread.php?t=76944)

leandro085 06-12-2011 23:44:07

procedimiento para habilitar o inhabilitar botones
 
hola como están

quisiera saber si existe alguna forma de armar un procedimiento para habilitar botones y o des-habilitar botones.
porque lo intento de hacer de esta forma pero no me reconoce los botones.

Código Delphi [-]
procedure habilitar;
begin
  btNuevo.Enabled:=true;
  BtEliminar.Enabled:=true;
  btModificar.Enabled:=true;
  DBNIva.Enabled:=true;
end;

ecfisa 07-12-2011 00:02:42

Hola Leandro.

Un modo puede ser:
Código Delphi [-]
procedure TForm1.ButtonsOnOff(Activo: Boolean);
begin
  ...
  Button2.Enabled:= Activo;
  Button3.Enabled:= Activo;
  ... 
end;

Otro:
Código Delphi [-]
procedure TForm1.ButtonsOnOff(Activo: Boolean);
var
  i: Integer;
begin
  for i:= 0 to ComponentCount -1 do
    if Components[i] is TButton then
      TButton(Components[i]).Enabled:= Activo;
end;
Este último deshabilita todos los botones del form.

Llamada:
Código Delphi [-]
  ButtonsOnOff(False); // Deshabilitar;
  ButtonsOnOff(True); // Habilitar;

De todas formas creo que no te reconoce los botones por que los estás referenciando desde un procedimiento y no un método del form, intentá así:
Código Delphi [-]
...
  TForm1 = class(TForm);
  ...
  private
     procedure habilitar;
  end;
...
implementation

procedure TForm1.habilitar;
...

Saludos.

microbiano 07-12-2011 00:03:59

utiliza una funcion
 
yo lo hago asi
[delphi]

declaras la funcion en:

Código Delphi [-]
private
    
     function botones(WBoton:Integer):Integer;

y despues
Código Delphi [-]

function Tform_capt_pro.botones(Wboton:Integer):Integer;
begin
  if WBoton=0 then //insertar  aqui puedes usar una cadena por ejemplo insertar pero tendrias que cambiar la variable a string
    begin
      self.pgc1.Enabled:=True;
      self.btn_guardar.Enabled:=True;
      self.btn_insertar.Enabled:=False;
    end;
if WBoton='insertar then //insertar  aqui puedes usar una cadena por ejemplo insertar pero tendrias que cambiar la variable a string
    begin
      self.pgc1.Enabled:=True;
      self.btn_guardar.Enabled:=True;
      self.btn_insertar.Enabled:=False;
    end;    

end;

y para llamarla
Código Delphi [-]
botones(2); // o la palabra insertar modificar

leandro085 07-12-2011 01:45:12

Gracias a los dos!!

Me sirvieron para entender un poquito mas el tema de funciones y procedimientos

lo solucione con una función y me anduvo, pero quiero que me digan si realmente si esta bien echo.

La declare asi

Código Delphi [-]
function botones(accbot:boolean):boolean;

la función así
Código Delphi [-]
function TFormIva.botones(accbot:boolean):boolean;
begin  
btNuevo.Enabled:=accbot;
btmodificar.Enabled:=accbot;
bteliminar.Enabled:=accbot;
end;

y lo llamo asi
Código Delphi [-]
botones(true);    // o de esta manera

botones(false);

Gracias de nuevo.

ecfisa 07-12-2011 01:56:47

Cita:

Empezado por leandro085 (Mensaje 420673)
lo solucione con una función y me anduvo, pero quiero que me digan si realmente si esta bien echo.

Si las llamadas
Código Delphi [-]
  botones(true);    // o de esta manera
  botones(false);
las haces dentro de un método de TFormIva, es correcto. :) (ya que sería como hacer Self.botones(true) )

Saludos.

ElDioni 07-12-2011 13:21:22

Hola,

de todas formas has declarado una función cuando, creo yo, lo que te hacía falta es un procedimiento, procedure en lugar de function, por lo que has comentado no parece necesario que al acabar de habilitar o deshabilitar los botones te devuelva un true o un false.

Saludos.

leandro085 07-12-2011 14:32:39

Cita:

Empezado por ElDioni (Mensaje 420692)
Hola,

de todas formas has declarado una función cuando, creo yo, lo que te hacía falta es un procedimiento, procedure en lugar de function, por lo que has comentado no parece necesario que al acabar de habilitar o deshabilitar los botones te devuelva un true o un false.

Saludos.

lo que pasa es que con un procedimiento no me reconocía los botones del form la única forma de poderlo hacer con un una funcion era la siguiente pero no podía pesarla el parámetro de true o false
Código Delphi [-]
procedure habilitar;
begin
  btNuevo.Enabled:=true;
  BtEliminar.Enabled:=true;
  btModificar.Enabled:=true;
  DBNIva.Enabled:=true;
end;

en cambio con la función lo puede hacer pudiendo pesarle una el parámetro para activarlo o desactivarlo.

ElDioni 07-12-2011 16:56:17

Igual que has puesto la función tendrías que poner el procedure, prueba así:

Código Delphi [-]
procedure TFormIva.botones(accbot:boolean); 
begin   
btNuevo.Enabled:=accbot; 
btmodificar.Enabled:=accbot; 
bteliminar.Enabled:=accbot; 
end;

y llamalo igual que lo has hecho con la función.

fjcg02 07-12-2011 16:59:37

Código Delphi [-]
procedure Botones;
begin
  btNuevo.Enabled:= (PermisoAlta) and 
                            (Datasource.Active) and
                            (not CampoX.isnull) ;
  BtEliminar.Enabled:=(Permisoeliminar) and 
                            (Datasource.Active) and
                            (not CampoX.isnull) ;
  btModificar.Enabled:=(PermisoModificar) and 
                            (Datasource.Active) and
                            (not CampoX.isnull) ;
  DBNIva.Enabled:=(PermisoModificar) and 
                            (Datasource.Active) and
                            (not CampoX.isnull) ;

// resto de botones y todas las condiciones 

end;

siendo PermisoXXXXX los permisos que el usuario tiene en la opción que elija.

Esta procedure la llamo después de modificar, insertar, borrar, cambiar un campo, al entrar en el formulario, .... Toda la lógica de botones en una sola función. Una función por formulario.

Saludos

ecfisa 07-12-2011 20:12:18

Hola Leandro.

Cita:

Igual que has puesto la función tendrías que poner el procedure
Es correcta la apreciación de ElDioni (así como también lo son las demás sugerencias), no había reparado que habías declarado una función y aunque no es incorrecto, es innecesario.

Creo que tenés una confusión entre los procedimientos,funciones y los métodos, a ver si puedo aclararte.

Si tenemos:
Código Delphi [-]
type
  TMiClase = class
    ...
  private
    procedure UNO(Value: Boolean);
  public
    function DOS(Value: Boolean): Boolean;
  end;
Nos encontramos frente a métodos, es decir procedimientos y funciones que pertenecen a una clase. Por lo tanto en la declaración de la cabecera del procedimiento o función, debemos anteponer la clase a la que pertenecen:
Código Delphi [-]
procedure TMiClase.UNO(Value:Boolean);
begin
  ...
end;

function TMiClase.DOS(Value: Boolean): Boolean;
begin
  ...
end;
En el caso del form fijate que se antepone por ejemplo TFormIva (nombre de la clase).

Ahora en el caso de los procedimiento o funciónes que no son un método :
Código Delphi [-]
procedure habilitar; 
begin
  btNuevo.Enabled:=true;  // Incorrecto
  BtEliminar.Enabled:=true;  // Incorrecto
  btModificar.Enabled:=true; // Incorrecto
  DBNIva.Enabled:=true; // Incorrecto
Dentro del procedimiento habilitar, se tiene totál desconocimiento de los TButtons: btNuevo, btmodificar y bteliminar, exepto que indiquemos la clase a la que pertenencen:
Código Delphi [-]
procedure habilitar;
begin
  FormIva.btNuevo.Enabled:=true;  // Correcto
  FormIva.BtEliminar.Enabled:=true;   // Correcto
  FormIva.btModificar.Enabled:=true;  // Correcto
  FormIva.DBNIva.Enabled:=true;  // Correcto
También es posible enviarle los TButton mediante un argumento:
Código Delphi [-]
procedure habilitar(Btns: array of TButton);
var
  i: Integer;
begin
  for i:= Low(Btns) to High(Btns) do
    Btns[i].Enabled:= False;
end;
...
// Llamada de ejemplo
procedure TFormIva.btDisableClick(Sender: TObject);
begin
  habilitar([btNuevo, BtEliminar, btModificar]);
end;
Resumiendo desde un método de la clase TFormIva se puede llamar directamente a btNuevo, por que btNuevo pertenece a TFormIva, pero si se menciona a btNuevo desde otro ámbito debe especificarse a que clase pertenece btNuevo anteponiendole el nombre de la instancia: FormIva.btNuevo.

Un saludo.

José Luis Garcí 08-12-2011 09:12:23

Hola leandro085, aparte de las variadas y útiles códigos de los compañeros, si lo que quieres hacer es como creo, que al insertar, modificar, etc, en una base de datos, si es así, tienes en el Ftp del club, mi componente NewPanelDB, este panel permite , sin tener que usar código, que todo lo que tengas dentro del panel , (este enable o no) o (este visible o no) según el estado del Datasourse, además también permite que el panel Cambie de color según el mismo procedimiento, espero te pueda servir.

PepeLolo 12-12-2011 01:20:52

Cita:

Empezado por leandro085 (Mensaje 420662)
hola como están

quisiera saber si existe alguna forma de armar un procedimiento para habilitar botones y o des-habilitar botones.
porque lo intento de hacer de esta forma pero no me reconoce los botones.

Código Delphi [-]
procedure habilitar;
begin
  btNuevo.Enabled:=true;
  BtEliminar.Enabled:=true;
  btModificar.Enabled:=true;
  DBNIva.Enabled:=true;
end;

Yo que tú crearía un componente que derive de TButton al que puedas asociar un Datasource y que el comportamiento de este dependa del estado del DataSource (Browse, Insertar, Editar, etc..)

Tienes el código necesario en la unidad DBCtrls.pas, componente "TDBNavigator". :o


La franja horaria es GMT +2. Ahora son las 12:58:24.

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