Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Inhabilitar botones según el estatus en una tabla de la base de datos!!! (https://www.clubdelphi.com/foros/showthread.php?t=82514)

rotsen26 14-03-2013 01:25:45

Inhabilitar botones según el estatus en una tabla de la base de datos!!!
 
Buenas tardes amigos, estoy queriendo hacer algo sobe inhabilitar los botones según el estatus el cual es un campo dentro de una tabla...

Lo que quiero hacer es algo parecido a esto...

Ej.

Código Delphi [-]
if qry_edo_habestatus.value='DES' then
    begin
      BTN1.Enabled:=true;
      BTN2.Enabled:=false;
      BTN3.Enabled:=false;
      BTN4.Enabled:=false;
      BTN5.Enabled:=false;
      BTN6.Enabled:=false;
    end;

Como se muestra en el ejemplo, si es estatus es 'Des' el único botón habilitado sea el primero, y si es en caso contrario se pongan los otros habilitados y el primero no.

Si alguien sabe como solucionarlo y alguna otra manera de hacerlo se lo agradecería mucho!!!

Caral 14-03-2013 01:31:01

Hola
No se si entiendo bien, pero si es solo cambiar la condicion del primer boton, tal vez usando un else sea suficiente:
Código Delphi [-]
if qry_edo_habestatus.value='DES' then
    begin
      BTN1.Enabled:=true;
      BTN2.Enabled:=false;
      BTN3.Enabled:=false;
      BTN4.Enabled:=false;
      BTN5.Enabled:=false;
      BTN6.Enabled:=false;
    end
else
    begin
      BTN1.Enabled:=false;
      BTN2.Enabled:=true;
      BTN3.Enabled:=true;
      BTN4.Enabled:=true;
      BTN5.Enabled:=true;
      BTN6.Enabled:=true;
   end;
Saludos

rotsen26 14-03-2013 02:16:03

1 Archivos Adjunto(s)
Cita:

Empezado por Caral (Mensaje 456726)
Hola
No se si entiendo bien, pero si es solo cambiar la condicion del primer boton, tal vez usando un else sea suficiente:
Código Delphi [-]
if qry_edo_habestatus.value='DES' then
    begin
      BTN1.Enabled:=true;
      BTN2.Enabled:=false;
      BTN3.Enabled:=false;
      BTN4.Enabled:=false;
      BTN5.Enabled:=false;
      BTN6.Enabled:=false;
    end
else
    begin
      BTN1.Enabled:=false;
      BTN2.Enabled:=true;
      BTN3.Enabled:=true;
      BTN4.Enabled:=true;
      BTN5.Enabled:=true;
      BTN6.Enabled:=true;
   end;
Saludos


La verdad así lo tengo pero me marca un error...
http://www.clubdelphi.com/foros/atta...1&d=1363223728

Caral 14-03-2013 02:19:33

Hola
Me parece raro, el error no creo que tenga que ver con esto.
No se.
saludos

ecfisa 14-03-2013 03:00:47

Cita:

Empezado por Caral (Mensaje 456729)
Hola
Me parece raro, el error no creo que tenga que ver con esto.
No se.
saludos

Totalmente de acuerdo, nada parece indicarlo.

El único modo que se me ocurre que podría traer problemas, es que los botones aún no estuvieran instanciados en ese punto del código .

Saludos.:)

Neftali [Germán.Estévez] 14-03-2013 10:21:30

Ejecuta paso a paso y a ver en qué línea falla, porque el código no parece tener nada incorrecto.
Yo como soy un poco "flojo" hubiera hecho algo así:

Código Delphi [-]
b := qry_edo_habestatus.value='DES';

BTN1.Enabled:= b;
BTN2.Enabled:= not b;
BTN3.Enabled:= not b;
BTN4.Enabled:= not b;
BTN5.Enabled:= not b;
BTN6.Enabled:= not b;

ozsWizzard 14-03-2013 12:20:16

Cita:

Empezado por Neftali (Mensaje 456744)
Ejecuta paso a paso y a ver en qué línea falla, porque el código no parece tener nada incorrecto.
Yo como soy un poco "flojo" hubiera hecho algo así:

Código Delphi [-]
b := qry_edo_habestatus.value='DES';

BTN1.Enabled:= b;
BTN2.Enabled:= not b;
BTN3.Enabled:= not b;
BTN4.Enabled:= not b;
BTN5.Enabled:= not b;
BTN6.Enabled:= not b;

Y yo :D

¿No me deja editar por el número de caracteres?

Neftali [Germán.Estévez] 14-03-2013 12:50:36

Cita:

Empezado por ozsWizzard (Mensaje 456746)
¿No me deja editar por el número de caracteres?


:confused::confused::confused::confused:

Me he perdido...

ozsWizzard 14-03-2013 18:04:41

Cita:

Empezado por Neftali (Mensaje 456751)
:confused::confused::confused::confused:

Me he perdido...

Al editar, me decía que no podía. Había puesto "y yo... :D" y sólo quité los puntos suspensivos. Me decía que no podía tener un mensaje de menos de 10 caracteres (todo esto en ingles)

Al poner el texto que citas ya me dejó colgar el mensaje (evidentemente, ya había superado los 10 caracteres)

ecfisa 14-03-2013 20:03:14

Otra opción:
Código Delphi [-]
procedure TForm.Tu_DataSetAfterScroll(DataSet: TDataSet);
var
  i: Integer;
begin
  for i:= 2 to 6 do
    TButton(FindComponent('BTN'+IntToStr(i))).Enabled:= qry_edo_habestatus.value = 'DES';
  BTN1.Enabled := not BTN2.Enabled
end;

Saludos.

maeyanes 14-03-2013 20:14:41

Hola...

También puedes "sobrecargar" el método UpdateActions de TForm:

Código Delphi [-]
type
  TMyDataForm: class(TForm)
  protected
    procedure UpdateActions; override;
  end;

implementation

procedure TMyDataForm.UpdateActions;
var
  Disabled: Boolean;

begin
  inherited;
  Disabled := qry_edo_habestatus.value <> 'DES';
  BTN1.Enabled := Disabled;
  BTN2.Enabled := not Disabled;
  BTN3.Enabled := not Disabled;
  BTN4.Enabled := not Disabled;
  BTN5.Enabled := not Disabled;
  BTN6.Enabled := not Disabled
end;


Saludos...

ecfisa 14-03-2013 20:33:11

Cita:

Empezado por maeyanes (Mensaje 456825)
Hola...

También puedes "sobrecargar" el método UpdateActions de TForm:

Esa también es una excelente opción. ;)

Saludos. :)

rotsen26 23-03-2013 19:30:31

Cita:

Empezado por maeyanes (Mensaje 456825)
Hola...

También puedes "sobrecargar" el método UpdateActions de TForm:

Código Delphi [-]
type
  TMyDataForm: class(TForm)
  protected
    procedure UpdateActions; override;
  end;

implementation

procedure TMyDataForm.UpdateActions;
var
  Disabled: Boolean;

begin
  inherited;
  Disabled := qry_edo_habestatus.value <> 'DES';
  BTN1.Enabled := Disabled;
  BTN2.Enabled := not Disabled;
  BTN3.Enabled := not Disabled;
  BTN4.Enabled := not Disabled;
  BTN5.Enabled := not Disabled;
  BTN6.Enabled := not Disabled
end;


Saludos...



Disculpe, en donde se encuentra "UpdateActions", es en algún evento especial o donde se coloca el codigo ese???

ecfisa 23-03-2013 19:53:48

Hola rotsen26.

En el formulario en que residen los botones del que ignoramos el nombre (de allí TMyDataForm), cuál te indicó maeyanes agregas la palabra protected y declaras el procedimiento. (o copias y pegas desde aquí)
La cabecera y código correspondiente al mismo, van en la sección Implementation. (Shift+Ctrl+C la genera automáticamente)

Saludos. :)

rotsen26 23-03-2013 20:06:14

Gracias a Todos por sus aportaciones, ya solucioné el problema!!!

accfree 05-04-2013 11:54:42

Solución Lógica
 
En el caso concreto que indicas (según un campo de una tabla) lo lógico es que habilitar y deshabilitar el botón se haga en el onDataChange del TDataSource.


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