Ver Mensaje Individual
  #2  
Antiguo 13-01-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Reputación: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
1. Al botón OK ponle su propiedad ModalResult igual a mrOK
2. Traslada el código que tienes en el OnClick del botón al evento OnCloseQuery.
3. En ese evento checas la propiedad ModalResult del formulario para saber si se dió clic en OK:

Código Delphi [-]
if ModalResult = mrOk then
begin
  {
    Aquí el código que verifica si los datos son correctos. Si no lo son, pones
    CanClose := false
  }
end;

De esta manera, el formulario se cerrará si se oprime el botón Cancel o el botón X en la barra de título o con Alt+F4. Ahora bien, ShowModal (con lo que abres el formulario) es una función que regresa el valor de ModalResult. Entonces, desde donde abres la ventana checas ese valor y procedes a asignar derechos sólo en caso de que ese valor sea mrOK:

Código Delphi [-]
if PasswordDlg.ShowModal = mrOk then
begin
  {
    Asignas derechos
  }
end
else
begin
  {
    Terminas
  }
end;

La única otra forma de cerrar la ventana de password es oprimiendo el botón OK, y eso sólo si los datos fueron correctos.

En otras palabras, te propongo un enfoque distinto:

Deja que el cuadro de diálogo del password haga exclusivamente lo que tiene que hacer:

Verificar si los datos son o no correctos

Y pasa la parte de asignación de derechos al c'odigo que abre ese formulario.

// Saludos
Responder Con Cita