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 13-01-2007
truequeman truequeman is offline
Miembro
 
Registrado: ene 2007
Posts: 26
Poder: 0
truequeman Va por buen camino
ventana de password

(Antes que nada.. busque hilos sobre este tema antes de postear este y no encontre parecidos por eso publico este)

Hola.. tengo un proyecto en el cual sale una ventana de passwords (que verifica una base de datos y le asigna los permisos correspondientes a cada usuario) y de ahi se enlaza al programa principal...

el problema es que si se le da alt+f4 se brinca esa pantalla y entra a la principal con todos los permisos (abir, consultas, reportes etc..)..

hice un usuario 0 con contraseña 0. en el cual si se le ponia alt + f4 (configurando el usuario sin ningun acceso ) entra sin problemas pero no me sale nada.. ni siquiera el menu salir.

le puse un canclose = false... y a la hora de poner el usuario con la contraseña correcta no me manda a la ventana principal.. se queda la misma ventana sin salirse (y no se puede cerrar ni con alt+f4).

el codigo es este (un poco resumido) (para no hacerlo largo con eso de los permisos x usuario)

...................

(en que estoy mal?)
.....................

Código Delphi [-]
 
unit VentanaDePasswords;
interface
uses Windows, SysUtils, Dialogs, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, Db, DBTables, jpeg, ExtCtrls;
type
  TPasswordDlg = class(TForm)
    Password: TEdit;
    Usuario: TEdit;
    Image1: TImage;
    OKBtn: TBitBtn;
    CancelBtn: TBitBtn;
    Panel1: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Image2: TImage;
    procedure CancelBtnClick(Sender: TObject);
    procedure OKBtnClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  PasswordDlg: TPasswordDlg;
implementation
uses Principal, ModulodeDatos;
{$R *.DFM}
procedure TPasswordDlg.CancelBtnClick(Sender: TObject);
begin
  Application.Terminate
end;
procedure TPasswordDlg.OKBtnClick(Sender: TObject);
Var
  Existe : Boolean;
begin
  ModuloDatos.Usuarios.Open;
  Existe := False;
  ModuloDatos.Usuarios.First;
  repeat
    If ModuloDatos.UsuariosNick.Value = Usuario.Text then
      if ModuloDatos.UsuariosPassword.Value = PAssword.Text then
        Existe := True;
    ModuloDatos.Usuarios.MoveBy(1);
  until ModuloDatos.Usuarios.Eof;
  if Existe = True then
  begin
    ModuloDatos.RestricionUsuarios.Open;
    Password.Clear;
    ModuloDatos.RestricionUsuarios.Edit;
    ModuloDatos.RestricionUsuarios.setkey;
    ModuloDatos.RestricionUsuarios.fieldByName('Nick').AsString:=trim(Usuario.Text);
    if ModuloDatos.RestricionUsuarios.gotoKey then
    begin
      if ModuloDatos.RestricionUsuariosMenArchivo.Value = 1 then
      begin
        Inicio.Archivo.Visible := True;
        Inicio.Archivo.Enabled := True;
      end
      else
      begin
        Inicio.Archivo.Visible := False;
        Inicio.Archivo.Enabled := False;
      end;
      if ModuloDatos.RestricionUsuariosCambiarUsuario.Value = 1 then
      begin
        Inicio.CambiardeUsuario1.Visible := True;
        Inicio.CambiardeUsuario1.Enabled := True;
      end
      else
      begin
        Inicio.CambiardeUsuario1.Visible := False;
        Inicio.CambiardeUsuario1.Enabled := False;
      end;
 
((( y asi sucesivamente con todos los permisos .. continua codigo aqui))
 
    end;
    ModuloDatos.RestricionUsuarios.Close;
    ModuloDatos.Usuarios.Close;
    Close;
  end
  else
  begin
    MessageDlg('Nombre de Usuario o Password Erroneo, Intentelo de nuevo por favor', mtWarning,
      [mbOk], 0);
    OkBtn.SetFocus;
    Usuario.SetFocus;
    ModuloDatos.Usuarios.Close;   
  end;
end;
procedure TPasswordDlg.FormActivate(Sender: TObject);
begin
  Usuario.SetFocus;
end;
procedure TPasswordDlg.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  CanClose:=True;
end;
end.

y si pongo canclose = False no se cierra..
gracias.

Última edición por roman fecha: 13-01-2007 a las 00:36:53.
Responder Con Cita
  #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
Poder: 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
  #3  
Antiguo 13-01-2007
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Chequea estos hilos:
http://www.clubdelphi.com/foros/show...ssword+ventana
http://www.clubdelphi.com/foros/show...ssword+ventana
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Delphi 7.0 y MySql, Enviar informacion de ventana a ventana gozi Conexión con bases de datos 2 03-04-2006 05:28:41
En mi aplicacion MDI quiero crear una ventana hija desde otra ventana hija Durbed Varios 8 05-07-2005 11:51:54
Ventana user y password el_barto Conexión con bases de datos 27 03-06-2005 15:21:24
Problema con pantalla de password (ventana modal) Durbed Varios 7 04-05-2005 15:18:39
Sobre ventana de Password silviodp OOP 29 04-05-2004 08:17:47


La franja horaria es GMT +2. Ahora son las 22:14:35.


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