Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   form con botones visibles o no (https://www.clubdelphi.com/foros/showthread.php?t=5166)

vetustas 11-11-2003 18:47:17

form con botones visibles o no
 
Tengo un form con un dbnavigator y en mi form tengo unos botones que segun una condición tienen que mostrarse o no. El problema es que no se como hacerlo. Habia puesto en el evento onshow este codigo:
Código:

if dbCheckBox1.Checked then
  begin
    Button_Inscripcion.Enabled:=false;
    Button_Practica.Enabled:=true;
  end
  else
    begin
    Button_Inscripcion.Enabled:=true;
    Button_Practica.Enabled:=false;
    end;

pero el problema es que al usar el boton de "next" del navegador no me funciona. Los botones siempre estan igual. En que evento deberia ponerlo? o como lo hago?
gracias

andres1569 11-11-2003 19:14:46

Hola:

Si, como supongo, los botones se habilitan/deshabilitan dependiendo del valor de un campo del Dataset en cuestión, el botón Next no es el mejor lugar puesto que ahí aún no se ha cambiado de registro.

Como la lógica pertenecería más bien al Dataset, y este se debe de encontrar en un DataModule, lo que he hecho en esos casos es colocar un DataSource ligado al Dataset deseado en dicho formulario (independientemente de que ya haya otro/s DataSources ligados en el DataModule). Si interceptas el evento OnDataChange del DataSource, ahí sabes cuándo se ha cambiado de registro:

Código:

procedure DataSource1.DataChange (AField: TField);
begin
  if Field = nil then  // indica que se cambió de registro
  begin
    Button_Inscripcion.Enabled := CampoInscripcion.AsBoolean;
    Button_Practica.Enabled := CampoPractica.AsBooelan;
  end;
end;

A ver si es eso, saludos

vetustas 11-11-2003 19:59:08

A lo mejor he hecho algo mal xo haciendo lo que me dijiste me da un error de ejecución. Una violacion de memoria dice :confused:
Cita:

el botón Next no es el mejor lugar puesto que ahí aún no se ha cambiado de registro
no lo tengo puesto en el boton next. Lo tengo en el evento "onshow" del form.

andres1569 12-11-2003 18:20:57

Hola:

El código que te puse es orientativo, no lo cojas literalmente, puse el nombre de unos campos "CampoInscripcion" y "CampoPractica", suponiendo que la información que habilita/deshabilita los botones se puede sacar de ahí, de la tabla que estés tratando.

Por lo demás, no sé a qué puede ser debido ese error, pero recuerda que ese Datasource debe estar en el formulario donde tienes los botones.

También te recomendaría mirar la ayuda de los TActionList, quizás te convenga definir dos acciones "Inscripción" y "Práctica", asociarlas a los botones correspondientes, e interceptar el evento OnUpdate de las mismas (que Delphi lanza cuando se actualiza el formulario), para fijar la propiedad Enabled.

Son ideas, un saludo

vetustas 12-11-2003 18:46:05

Muchas gracias. Ya funciona. Lo que hacia mal era no poner el datasource en el form donde estaban los botones
Graciasssss :D


La franja horaria es GMT +2. Ahora son las 19:07:29.

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