PORTUGUÊS:
GENTE, boa noite!
dando continuidade aos trabalhos acima que já estão bem avançados.
Criei uma tela de LOGIN com o seguinte código:
Code: Select all
// DEFINE WINDOW FLogin AT 0,0 WIDTH nPicWidth + 50 HEIGHT nPicHeight TITLE "SiCCoSV v4.01 - Tela de Entrada" BACKCOLOR aPicBackColor CHILD NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE ;
DEFINE WINDOW FLogin AT 0,0 WIDTH nPicWidth + 50 HEIGHT nPicHeight TITLE "SiCCoSV v4.01 - Tela de Entrada" BACKCOLOR aPicBackColor NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE ;
ON INTERACTIVECLOSE {||NIL};
ON INIT SetCoords() ON MOUSEDRAG MoveForm() ON MOUSEMOVE SetCoords()
ON KEY ESCAPE OF FLogin ACTION {||ENCERRA_LOGIN()}
ON KEY ALT+F4 OF FLogin ACTION {||ENCERRA_LOGIN()}
@ 50, 82 LABEL lblUserID VALUE "Usuário:" TRANSPARENT FONTCOLOR YELLOW BOLD AUTOSIZE
FLogin.txbPasswrd.SetFocus }
@ 45, 140 TEXTBOX txbUserID WIDTH 85 HEIGHT 21 FONTCOLOR BLUE BOLD NUMERIC INPUTMASK '999999' ON ENTER { || ConfirmUser() };
ON GOTFOCUS FLogin.lblUserID.FontBold := .T. ;
ON LOSTFOCUS FLogin.lblUserID.FontBold := .F.
@ 80, 90 LABEL lblPaswrd VALUE "Senha:" TRANSPARENT FONTCOLOR YELLOW BOLD AUTOSIZE
@ 75, 140 TEXTBOX txbPasswrd WIDTH 85 HEIGHT 21 FONTCOLOR BLUE BOLD PASSWORD MAXLENGTH 06 ON ENTER { || ConfirmSenha() };
ON GOTFOCUS FLogin.lblPaswrd.FontBold := .T. ;
ON LOSTFOCUS FLogin.lblPaswrd.FontBold := .F.
DEFINE TOOLBAR barrasenha OF FLogin BUTTONSIZE 200,40 FONT 'Arial' SIZE 08 FLAT BORDER BOTTOM
BUTTON btnApply CAPTION '&Ok' PICTURE BMPCONFIRMA ACTION {||ConfirmUserSenha()} TOOLTIP "Clique aqui para confirmar seu Usuário e Senha e entrar no SiCCoSV!" SEPARATOR
BUTTON cancela CAPTION '&Cancela' PICTURE BMPCANCELA ACTION {||ENCERRA_LOGIN()} TOOLTIP "Cancela a entrada no SiCCoSV!" END TOOLBAR
END WINDOW // FLogin
FLogin.Cursor := "DragCurs"
FLogin.Center()
FLogin.Activate()
ELSE
MsgStop( cPictFNm + " Faltado Arquivos de Imagens! O sistema será abortado !", "ERROR 8 - SiCCoSV" )
ENDIF
RETURN // PERMITIU // CheckUser()
Bom, a primeira linha está comentada, pois eis o problema.
Ela é semelhante à segunda, mas com 2 diferenças que testei e vc também pode fazer o teste:
1 - No lugar de ser CHILD não coloquei nada para que fosse STANDARD.
2 - Se colocar MODAL dá uma série de erros.
Bom, mas, se o problema fosse só esse estava tudo OK, mas, não o problema é bem maior.
Antes de fazer o login eu crio o FORM principal como MAIN sem o POPUP MENU e ITEMSOURCE/ITEMS. Coloco ele em HIDE e MINIMIZE (estou falando do formulário principal MAIN). Somente depois de uns 3 formulários e várias etapas que eu MAXIMIZO.
Então antes dessa etapa de maximização do FORM PRINCIPAL (WINDOW MAIN) uma delas é a criação da tela de SPLASH, depois o LOGIN depois a tela que verifica se o aplicativo é definitivo ou apenas demonstrativo, depois ainda a tela de configuração de dados com o usuário que efetuou o LOGIN.
Depois desses processos todos e fechamento de todas telas, eu dou um MAXIMIZE no formulário WINDOW MAIN (aqui chamado de F1.MAXIMIZE) é que vem o problema que comecei a expor através do código acima.
Não sei o que é, mas, o formulário do LOGIN abre novamente e ficam os 2 formulários em aberto, conforme imagem logo abaixo:

- MAIN E LOGIN.JPG (51.25 KiB) Viewed 3958 times
Como viram acima, tanto o MENU principal (FORM WINDOW MAIN) como o LOGIN (formulário CHILD ou não fica junto. E, se eu o fechar ele fecha todo o programa).
Já revisei todo o código e nos caminhos que percorre o sistema, através de uma coisa simples, que é: a cada função que o sistema entra e no final dela eu coloco o código:
Code: Select all
? 'início da função'
wait
? 'fim da função'
wait
Com o código acima eu DEBUGei todos os caminhos percorridos para tirar a dúvida se em algum momento eu chamo o formulário de LOGIN novamente.
Mas, percebi que não é isso. Então, imagino o seguinte:
O formulário login não está pegando o RELEASE (se é que esse é o comando/função para fechar definitivamente um formulário), mesmo ele sendo claro no sistema, pois quando se faz o login ele some da tela.
O código de fechamento do formulário LOGIN é:
Code: Select all
PROCEDURE ConfirmSenha()
STATIC nAttempt := 0
LOCAL n2Right, n2Left, nRepeat
LOCAL nColumn, nStep
LOCAL cUserID := FLogin.txbUserID.Value,;
cPassword := padr (alltrim (upper(FLogin.txbPasswrd.Value)),6), mPASSWORD := space (6)
// padr (alltrim (upper(cPassWord)),6)
if .not. fUSUA (cUserID)
MsgStop ('Usuário Não Cadastrado. Tente Novamente','SiCCoSV')
lConfirmed := .f.
return lConfirmed
endif
mPASSWORD := padr (alltrim (upper(cPassWord)),6)
PERMITIU := CRIPTOGRAFA (mPASSWORD) == PASSWORD
set key K_F4 to
set cursor off
if (PERMITIU) .and. (lastkey () <> K_ESC)
COD_ACESSO := mCOD_USU := cUserID
lConfirmed := .T.
FLogin.HIde
// FLogin.Release // substituí essa linha pela abaixo, por pensar que aqui era o problema.
ThisWindow.Release
ELSE
MsgStop( "Senha Inválida. Tente Novamente!", "Acesso ao Sistema" )
ENDIF
RETURN lConfirmed // ConfirmUser()
Então se os colegas observarem aparentemente está tudo correto, mas, como vimos o formulário LOGIN volta novamente.
O que os colegas podem me ajudar a esclarecer sobre o funcionamento de DEFINE WINDOW?
ENGLISH: (google tradutor/translate)
PEOPLE, good night!
continuing the work above already well advanced.
I created a LOGIN screen with the following code:
Code: Select all
// DEFINE WINDOW AT FLogin 0.0 WIDTH nPicWidth + 50 HEIGHT nPicHeight TITLE "SiCCoSV v4.01 - Entry Screen" BACKCOLOR aPicBackColor CHILD NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE;
DEFINE WINDOW AT FLogin 0.0 WIDTH nPicWidth + 50 HEIGHT nPicHeight TITLE "SiCCoSV v4.01 - Entry Screen" BACKCOLOR aPicBackColor NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE;
ON INTERACTIVECLOSE || {} NIL;
ON INIT SetCoords () ON MOUSEDRAG MoveForm () ON SetCoords mouseMove ()
ON KEY ESCAPE OF ACTION FLogin {|| ENCERRA_LOGIN ()}
ON KEY ALT + F4 OF ACTION FLogin {|| ENCERRA_LOGIN ()}
@ 50, 82 LABEL lblUserID VALUE "User:" TRANSPARENT YELLOW fontcolor BOLD AUTOSIZE
FLogin.txbPasswrd.SetFocus}
@ 45, 140 TEXTBOX txbUserID WIDTH 85 HEIGHT 21 fontcolor BLUE BOLD NUMERIC InputMask '999999' ON ENTER {|| ConfirmUser ()};
ON GotFocus FLogin.lblUserID.FontBold: = .T. ;
ON LOSTFOCUS FLogin.lblUserID.FontBold: = .F.
@ 80, 90 LABEL lblPaswrd VALUE "Password:" TRANSPARENT YELLOW fontcolor BOLD AUTOSIZE
@ 75, 140 TEXTBOX txbPasswrd WIDTH 85 HEIGHT 21 fontcolor BOLD BLUE ON ENTER PASSWORD MAXLENGTH 06 {|| ConfirmSenha ()};
ON GotFocus FLogin.lblPaswrd.FontBold: = .T. ;
ON LOSTFOCUS FLogin.lblPaswrd.FontBold: = .F.
DEFINE TOOLBAR barrasenha OF FLogin ButtonSize 200.40 FONT Arial SIZE 08 FLAT BOTTOM BORDER
CAPTION BUTTON btnApply '& Go' PICTURE BMPCONFIRMA ACTION {|| ConfirmUserSenha ()} TOOLTIP "Click here to confirm your User and Password and enter the SiCCoSV!" SEPARATOR
CAPTION BUTTON cancels '& Cancel' PICTURE BMPCANCELA ACTION {|| ENCERRA_LOGIN ()} TOOLTIP "Cancel entering the SiCCoSV!" END TOOLBAR
END WINDOW // FLogin
FLogin.Cursor: = "DragCurs"
FLogin.Center ()
FLogin.Activate ()
ELSE
MsgStop (cPictFNm + "! Missed Images Files The system will be aborted!", "ERROR 8 - SiCCoSV")
ENDIF
RETURN // // ALLOWED CheckUser ()
Well, the first line is commented out, because here's the problem.
It is similar to the second, but with two differences that have tested and you can also take the test:
1 - Instead of being CHILD did not put anything to it to be STANDARD.
2 - If you MODAL gives a series of errors.
Good, but if the problem was just that everything was OK, but not the problem is much greater.
Before logging in I create the main FORM as MAIN without the POPUP MENU and ItemSource / ITEMS. I put him in HIDE and MINIMIZE (I'm talking about the main form MAIN). Only after about three forms and several steps that I maximize.
So before that maximization step of the HOME FORM (WINDOW MAIN) one of them is the creation of the SPLASH screen, then LOGIN after the screen that verifies that the application is permanent or just demonstrative, even after the data configuration screen with the user who made the LOGIN.
After all these processes and closing of all screens, I give a MAXIMIZE the form WINDOW MAIN (here called F1.MAXIMIZE) is coming from the problem that I began to expose through the code above.
I do not know what it is, but the LOGIN form opens again and the two forms are open, as image below:
[attachment = 0] MAIN AND LOGIN.JPG [/attachment]
As seen above, both the main MENU (FORM WINDOW MAIN) as the LOGIN (CHILD form or does not get along. And if I close it closes the whole program).
Already I have reviewed all the code and paths running through the system via a simple thing, which is: every function that the system enters and at the end of it I put the code:
Code: Select all
? 'Beginning of the function'
wait
? 'End of the function'
wait [/ code]
With the above code I DEBUGei all paths taken to get the question if at any time I call the LOGIN form again.
But I realized that's not it. So imagine the following:
The login form is not picking up RELEASE (if this is the command / function to close definitely a form), even though he was clear in the system because when it logs in it off the screen.
The closing code LOGIN form is:
[Code] PROCEDURE ConfirmSenha ()
STATIC nAttempt: = 0
LOCAL n2Right, n2Left, nRepeat
LOCAL nColumn, nStep
CUserID LOCAL: = FLogin.txbUserID.Value ,;
cPassword: = standard (alltrim (upper (FLogin.txbPasswrd.Value)), 6), mPASSWORD: = space (6)
// Standard (alltrim (upper (cPassWord)), 6)
if .not. fUSUA (cUserID)
MsgStop ('Non Registered User. Try Again', 'SiCCoSV')
lConfirmed: = .f.
return lConfirmed
endif
mPASSWORD: = standard (alltrim (upper (cPassWord)), 6)
ALLOWED: = encrypt (mPASSWORD) == PASSWORD
set key to K_F4
September cursor off
if (ALLOWED) .and. (LastKey () <> K_ESC)
COD_ACESSO: = mCOD_USU: = cUserID
lConfirmed: = .T.
FLogin.HIde
// // FLogin.Release replace this line by below, thinking that was the problem here.
ThisWindow.Release
ELSE
MsgStop ("Invalid Password. Try Again!", "System Access")
ENDIF
RETURN lConfirmed // ConfirmUser ()
So if colleagues observe apparently everything is correct, but as we saw the LOGIN form back again.
What colleagues can help me clarify the operation of DEFINE WINDOW?
Code: Select all
ESPANISH/ESPANHOL (google tradutor/translate)
GENTE, buenas noches!
continuar el trabajo anterior ya muy avanzada.
He creado una pantalla de inicio de sesión con el siguiente código:
Code: Select all
// Definir VENTANA EN FLogin 0.0 ANCHO nPicWidth + 50 ALTURA nPicHeight TÍTULO "v4.01 SiCCoSV - Pantalla de entrada" BACKCOLOR aPicBackColor NIÑO NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE;
DEFINE WINDOW AT FLogin 0.0 ANCHO nPicWidth + 50 ALTURA nPicHeight TÍTULO "v4.01 SiCCoSV - Pantalla de entrada" BACKCOLOR aPicBackColor NOSYSMENU NOSIZE NOMINIMIZE NOMAXIMIZE;
EN INTERACTIVECLOSE || {} NIL;
EN SetCoords INIT () en MOUSEDRAG MoveForm () EN SetCoords mouseMove ()
EN ESCAPE CLAVE DE ACCIÓN FLogin {|| ENCERRA_LOGIN ()}
EN CLAVE ALT + F4 DE ACCIÓN FLogin {|| ENCERRA_LOGIN ()}
@ 50, 82 ETIQUETA lblUserID VALOR "Usuario:" fontcolor AMARILLO AutoSize BOLD TRANSPARENTE
FLogin.txbPasswrd.SetFocus}
@ 45, 140 TEXTBOX txbUserID ANCHO 85 ALTURA 21 fontcolor BLUE BOLD NUMÉRICO InputMask '999999' ON ENTER {|| ConfirmUser ()};
EN GotFocus FLogin.lblUserID.FontBold: = .T. ;
EN LOSTFOCUS FLogin.lblUserID.FontBold: = .F.
@ 80, 90 ETIQUETA lblPaswrd VALOR "Contraseña:" fontcolor AMARILLO AutoSize BOLD TRANSPARENTE
@ 75, 140 TEXTBOX txbPasswrd ANCHO 85 ALTURA 21 fontcolor BOLD AZUL EN INTRODUCIR CONTRASEÑA MAXLENGTH 06 {|| ConfirmSenha ()};
EN GotFocus FLogin.lblPaswrd.FontBold: = .T. ;
EN LOSTFOCUS FLogin.lblPaswrd.FontBold: = .F.
DEFINE LA BARRA DE HERRAMIENTAS DE barrasenha FLogin ButtonSize 200,40 fuente Arial 08 TAMAÑO PLANO FRONTERA INFERIOR
Botón de Título btnApply '& Go' IMAGEN BMPCONFIRMA ACCIÓN {|| ConfirmUserSenha ()} TOOLTIP "Haga clic aquí para confirmar su usuario y contraseña e introduzca la SiCCoSV!" SEPARADOR
Botón de Título cancela '& Anular el estilo' IMAGEN BMPCANCELA ACCIÓN {|| ENCERRA_LOGIN ()} TOOLTIP "Cancelar entrar en el SiCCoSV!" FIN BARRA DE HERRAMIENTAS
FIN DE LA VENTANA // FLogin
FLogin.Cursor: = "DragCurs"
FLogin.Center ()
FLogin.Activate ()
ELSE
MsgStop (cPictFNm + "! Imágenes perdidas Archivos El sistema será abortado!", "ERROR 8 - SiCCoSV")
TERMINARA SI
RETURN // // PERMITIDO CheckUser ()
Bueno, la primera línea está comentada, porque aquí está el problema.
Es similar a la segunda, pero con dos diferencias que han puesto a prueba y también se puede tomar la prueba:
1 - En lugar de ser NIÑO no puso nada para que sea STANDARD.
2 - Si MODAL da una serie de errores.
Bueno, pero si el problema era que todo estaba bien, pero no el problema es mucho mayor.
Antes de ingresar puedo crear el formulario principal como PRINCIPAL sin el menú emergente y ItemSource / ARTÍCULOS. Lo puse en esconder y minimizar (estoy hablando de la forma principal MAIN). Sólo después de cerca de tres formas y varios pasos que maximizar.
Así que antes de ese paso maximización del FORMULARIO PRINCIPAL (VENTANA PRINCIPAL) uno de ellos es la creación de la pantalla de inicio, a continuación, inicio de sesión tras la pantalla que verifica que la aplicación es permanente o simplemente demostrativo, incluso después de la pantalla de configuración de datos con la usuario que hizo el LOGIN.
Después de todos estos procesos y el cierre de todas las pantallas, le doy un MAXIMIZE forma VENTANA PRINCIPAL (aquí llamado F1.MAXIMIZE) viene de el problema que empecé a exponer a través del código de seguridad.
No sé lo que es, pero el formulario de acceso se abre otra vez y las dos formas están abiertos, como la imagen a continuación: [archivo adjunto = 0] PRINCIPAL Y LOGIN.JPG [/ archivo adjunto]
Como se ha visto anteriormente, tanto el menú principal (FORMULARIO VENTANA PRINCIPAL) como el Inicio de Sesión (forma NIÑO o no se llevan bien. Y si cierro cierra todo el programa).
Ya he revisado todo el código y los caminos que se ejecutan a través del sistema a través de una simple cosa, que es: todas las funciones que el sistema entra y al final de ella me puso el código:
[Código]? 'A partir de la función'
esperar
? 'Fin de la función'
espere [/ code]
Con el código anterior me DEBUGei todos los caminos tomados para conseguir la pregunta si en algún momento yo llamo el formulario de acceso nuevo.
Pero me di cuenta de que no es eso. Así que imagínate lo siguiente:
El formulario de inicio de sesión no está recogiendo LIBERACIÓN (si este es el comando / función para cerrar definitivamente una forma), a pesar de que era evidente en el sistema porque cuando se registra en ella fuera de la pantalla.
La forma de clave LOGIN cierre es:
Code: Select all
PROCEDIMIENTO ConfirmSenha ()
STATIC Nattempt: = 0
LOCAL n2Right, n2Left, Nrepetir
LOCAL nColumn, nPaso
Cuserid LOCAL: = FLogin.txbUserID.Value,;
cPassword: = estándar (alltrim (superior (FLogin.txbPasswrd.Value)), 6), mPASSWORD: = espacio (6)
// Estándar (alltrim (superior (cPassword)), 6)
si no. fUSUA (cuserid)
MsgStop ('Usuario no registrado. Try Again', 'SiCCoSV')
lConfirmed: = .f.
volver lConfirmed
terminara si
mPASSWORD: = estándar (alltrim (superior (cPassword)), 6)
ANIMALES: = cifrar (mPASSWORD) == CONTRASEÑA
establecer clave para K_F4
Septiembre cursor fuera
si (ANIMALES) .y. (LastKey () <> K_ESC)
COD_ACESSO: = mCOD_USU: = cuserid
lConfirmed: = .T.
FLogin.HIde
// // FLogin.Release reemplazar esta línea por abajo, pensando que era el problema aquí.
ThisWindow.Release
ELSE
MsgStop ("Contraseña no válida. Try Again!", "El acceso del sistema")
TERMINARA SI
RETURN lConfirmed // ConfirmUser ()
Así que si sus colegas observan aparentemente todo está correcto, pero como vimos la forma de la conexión de nuevo.
Qué colegas me puede ayudar a aclarar el funcionamiento de DEFINE WINDOW?