Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-05-2012
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por roman Ver Mensaje
No es una cuestión de creer o no creer. Todas las vueltas de tu bucle se ejecutan con exactamente el mismo contexto. GetClassName obtendrá siempre el mismo valor, así que no tiene ningún caso estar calculándolo una y otra vez. Quizá lo que tenga algo que ver es el sleep, o simplemente el ligero tiempo que toma entrar al bucle, pero, desde luego, no la llamada reiterada a GetClassName.

Pero, en todo caso, si así te sirve, pues ¿quiénes somos nosotros para contradecirte?

// Saludos
Exactamente lo que tiene que ver ahí es el Sleep(250) por el retardo que tienen las VM que uso. GetClassName debería devolver siempre el mismo valor, pero ese bucle es solamente una forma de asegurarse de que ya lo tiene focuseado. Al hacer doble click sobre el componente de texto (en el caso de un usuario interactuando con la plataforma) el componente tarda unos instantes en focusearse, por eso mi aplicación pone ese bucle que en definitiva solamente espera hasta que Buffer sea el nombre del componente que acabo de clickear.
Responder Con Cita
  #2  
Antiguo 22-05-2012
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
Cita:
Empezado por BrunoBsso Ver Mensaje
por eso mi aplicación pone ese bucle que en definitiva solamente espera hasta que Buffer sea el nombre del componente que acabo de clickear.
Esto es lo que no es cierto. Tu programa está funcionando debido al sleep. El valor de Buffer es el mismo que obtienes desde que llamaste a GetForegroundWindow. Si, por alguna razón, Buffer no tuviera el valor que esperas, nunca lo obtendrá dentro del ciclo y éste jamás terminará.

Por otro lado, hay algo que no queda claro. Si tú tienes un formulario con un control de edición, GetForegroundWindow y GetFocus no devuelven lo mismo. El primero te devolverá el formulario y el segundo el control de edición.

Seguramente percibes que tu programa funciona bien, y me alegro por ello. Pero cuando algo funciona por las razones equivocadas, habría que poner atención en ello en lugar de obstinarse, pues en algún momento o circunstancia, te puede fallar.

// Saludos
Responder Con Cita
  #3  
Antiguo 22-05-2012
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Thumbs down

Cita:
Empezado por roman Ver Mensaje
Esto es lo que no es cierto. Tu programa está funcionando debido al sleep. El valor de Buffer es el mismo que obtienes desde que llamaste a GetForegroundWindow. Si, por alguna razón, Buffer no tuviera el valor que esperas, nunca lo obtendrá dentro del ciclo y éste jamás terminará.

Por otro lado, hay algo que no queda claro. Si tú tienes un formulario con un control de edición, GetForegroundWindow y GetFocus no devuelven lo mismo. El primero te devolverá el formulario y el segundo el control de edición.

Seguramente percibes que tu programa funciona bien, y me alegro por ello. Pero cuando algo funciona por las razones equivocadas, habría que poner atención en ello en lugar de obstinarse, pues en algún momento o circunstancia, te puede fallar.

// Saludos
Empecemos por no llamarme obstinado, no hay por qué.
Con el procedimiento WaitUntilFieldFocused intento poner un modo de asegurar que esté seleccionado el campo, nada más. Es muy probable que sea innecesario ese procedimiento, pero lo uso para asegurarme que ningún retraso o lag del SO interfiera con lo que hago.
GetForegroundWindow lo uso para obtener el handle de la ventana como varias veces dije. En ningún momento usé el GetFocus. El handle lo llamo desde ahí solamente para poder pasárselo al GetClassName, pero en todo momento sé cuál es el handle, antes y después del procedimiento.
Entonces, si GetClassName me pide un handle, guardo en una variable el handle de la ventana que abrí yo mismo. Como GetClassName me va a devolver el nombre del campo de texto, antes de llamar al procedimiento hago doble click en ese campo de texto. Teóricamente siempre que llame a WaitUntilFieldFocused voy a estar en ese campo de texto, por lo que teóricamente no es necesario. Pero repito que es pura y exclusivamente para asegurarme.

Remarco, dejá de llamar obstinados a las personas porque no hagan las cosas de la misma manera que vos lo harías. No podemos ser todos tan perfectos como vos.
Tu actitud me hace recordar un topic sobre los users que no aparecen más por el foro, y que la gran mayoría se fueron a otros foros. Tal vez debas rever tu actitud para con las personas.

Hasta acá llegaron mis ganas de usar este foro. Ya me encontré anteriormente con vos y otros users "sabiondos" que se ponen en posición absolutamente pedante y rebajan a los que preguntan. Eso no es un foro.

Suerte a todos.


FIN
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
abrir aplicación externa desde delphi y detectar su cierre petete2008 API de Windows 2 10-02-2012 11:44:23
Ejectuando una aplicacion externa jandrorm Varios 5 09-02-2011 16:13:56
Manipular aplicación externa oabel5 API de Windows 30 27-05-2010 07:04:41
Aplicacion externa a c++ alloger C++ Builder 1 28-10-2006 00:37:09
Manipular una aplicacion externa lookmydoom API de Windows 2 09-08-2006 22:22:52


La franja horaria es GMT +2. Ahora son las 19:51:24.


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