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 06-10-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
Deshabilitar Control !!!

Hola Foro:

Tengo el siguiente problemita: Necesito deshabilitar un control y que no guarde ningún evento mientras esté deshabilitado.

Por ejemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
Button1.Enabled := False;
for i := 1 to 2000 do begin
Label1.Caption := IntToStr(i);
Label1.Repaint;
end;
Button1.Enabled := True;
end;

Si el usuario hace clic en el botón, se iniciará el contador y deshabilitará el botón, pero mientras el botón está deshabilitado, si el usuario hace clic de nuevo, cuando finalice el proceso repetirá el conteo otra vez, cuando no debería de hacerlo, ya que el control está deshabilitado.

Las gracias anticipadas,

Víctor.-
Responder Con Cita
  #2  
Antiguo 06-10-2004
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
hola....

se me ocurre que en lugar de deshabilitarlo deberias desasignar el procedimiento al evento OnClick del Boton... algo asi como ...

Código Delphi [-]
...
Botton1.OnClick := nil;
....  // tu proceso
Botton1.OnClick := Button1Click;
espero te funcione....

saludos...
Responder Con Cita
  #3  
Antiguo 07-10-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
Hola Vic ia:

La verdad es que probé la opción presentada por ti, pero no me resultó, aparentemente sigue reconociendo el onclick:

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
begin
  Button1.OnClick := Nil;
  For i := 1 to 5000 do begin
      Label1.Caption := IntToStr(i);
      Label1.Repaint;
  end;
  Button1.OnClick := Button1Click;
end;
Responder Con Cita
  #4  
Antiguo 07-10-2004
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Si lo que quieres es que después de ejecutar el contador no se pueda hacer de nuevo, tienes 2 opciones

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;

begin
  Button1.Enabled := False;  // Deshabilitar el botón o
  Button1.OnClick := nil;      // Quitar el manejador de evento
  For i := 1 to 5000 do begin
      Label1.Caption := IntToStr(i);
      Label1.Repaint;
  end
end;

El chiste es no regresarlo a su estado anterior... o sea, si lo deshabilitas, no lo vuelva a habilitar al final del proceso...


Espero que te sirva...


Saludos...
Responder Con Cita
  #5  
Antiguo 08-10-2004
Avatar de vpepen
vpepen vpepen is offline
Miembro
 
Registrado: nov 2003
Ubicación: Higüey
Posts: 104
Poder: 21
vpepen Va por buen camino
Hola Marcos,

Sucede lo siguiente, yo no quiero que el usuario pueda hacer clic sobre el botón mientras esté ejecutándose el proceso, pero si quiero, que cuando termine le permita ejecutarlo de nuevo, es decir, necesito regresarle su estado anterior.

Las dos opciones:
Button1.Enabled := False; // Deshabilitar el botón o
Button1.OnClick := nil; // Quitar el manejador de evento

son buenas, pero no resuelven el problemita, ya que al usuario dar clic sobre el botón desactivado, cuando termina el proceso vuelve e inicia, es decir, el botón me está funcionando aunque esté deshabilitado.

Espero haberme explicado bien,

Víctor.-
Responder Con Cita
  #6  
Antiguo 08-10-2004
[basti] basti is offline
Miembro Premium
 
Registrado: ago 2004
Posts: 388
Poder: 20
basti Va por buen camino
Hola.

Puedes poner Application.ProcessMessages antes de habilitar el botón, no te hace falta deshabilitar el evento.

un saludo
Responder Con Cita
  #7  
Antiguo 08-10-2004
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 24
maeyanes Va por buen camino
Cita:
Empezado por vpepen
Hola Marcos,

Sucede lo siguiente, yo no quiero que el usuario pueda hacer clic sobre el botón mientras esté ejecutándose el proceso, pero si quiero, que cuando termine le permita ejecutarlo de nuevo, es decir, necesito regresarle su estado anterior.

Las dos opciones:
Button1.Enabled := False; // Deshabilitar el botón o
Button1.OnClick := nil; // Quitar el manejador de evento

son buenas, pero no resuelven el problemita, ya que al usuario dar clic sobre el botón desactivado, cuando termina el proceso vuelve e inicia, es decir, el botón me está funcionando aunque esté deshabilitado.

Espero haberme explicado bien,

Víctor.-
Hasta donde se y he usado, un botón con su propiedad Enabled := False no se puede utilizar.

Pero puedes intentar esto:

Código Delphi [-]
type
  Form1 = class(TForm)
    // Declaraciones aquí
  private
    FProcessDone: Boolean;
    // Más declaraciones aquí
  end;

implementation

constructor Form1.Create(AOwner: TComponent);
begin
  // Tu código
  FProcessDone := False
end;

procedure Button1.OnClick(Sender: TObject);
var
  i: Integer;

begin
  if not FProcessDone then
  begin
    Button1.Enabled := False;
    For i := 1 to 5000 do
    begin
      Label1.Caption := IntToStr(i);
      Label1.Repaint;
    end;
    Button1.Enabled := True;
    FProcessDone := True
  end
end;

Con esto lograrás que el proceso solo se ejecute la primera vez que des click en el botón...


Espero que te sirva...


Saludos...
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


La franja horaria es GMT +2. Ahora son las 01:49:39.


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