none
Ejecutar ventanas en primer plano RRS feed

  • Pregunta

  • Hola a todos

    Estoy realizando una aplicacion en Visual C++ con Windows Forms.

    La aplicacion monitoriza una serie de sensores mediante comandos que son enviados a un PLC a traves del puerto serie.

    Tengo una serie de ventanas en las que se muestran los valores de estos sensores, y otra ventana en el que se van indicando las operaciones que se van realizando, por ejemplo:

    Monitor Entradas Analogicas

    Send: (comandos enviados)

    Received: (comandos recividos)

    Esta ventana esta formada basicamente por un richTextBox

    Todo funciona correctamente, pero el problema es que cuando hay varias ventanas abiertas, se llena el richTextBox, las ultimas lineas que van apareciendo no se ven, unicamente se va desplazando el scrollBar hacia arriba, para que se vean debo de picar con el raton dentro de la ventana.

    ¿Hay alguna opcion para que esta ventana siempre se ejecute en primer plano? O en su defecto, que los ultimos valores vayan apareciendo por arriba, en lugar de por abajo, para asi siempre poder ver las lineas nuevas que van apareciendo.

     

    Espero que se haya entendido el problema, me he intentado explicar lo mejor posible.

    Un saludo, y gracias

    jueves, 24 de junio de 2010 10:24

Todas las respuestas

  • Enviale al richTextBox un mensaje EM_LINESCROLL con los argumentos adecuados para que vaya haciendo scroll y ver siempre las últimas lineas.
    jueves, 24 de junio de 2010 10:44
  • No entiendo bien lo que me dices....¿podrias ponerme un ejemplo?

    Gracias

    jueves, 24 de junio de 2010 11:28
  • Yo no trabajo con Visual C++ ni Windows Form, lo hago con CBuilder y VCL, pero supongo que deben existir funciones y propiedades equivalentes y Windows tarde o temprano siempre funciona con mensajes, implicitos o explixitos cuando no hay más remedio, como es este caso.

    En VCL si el richTextBox se llama Texto, Texto->Handle me da un Handle válido para cualquier funcion de Windows que quiera. Por lo tanto en tu caso yo haría:

    SendMessage(Texto->Handle,  EM_LINESCROLL , 0, -Texto->Lines->Count);

    Siendo Texto->Lines->Count el número actual de lineas en el richTextBox, observa que hay un signo negativo. Haciendo esto siempre después de añadir una linea siempre verás la linea añadida.

    Dado que la función SendMessage es bastante comnún. En VCL tambien existe la función Perform para enviar mensajes a un objeto sin necesidad de utilizar explicitamente el handle y SendMessage. Por lo tanto en vez de la instrucción anterior normalmente se utiliza:

    Texto->Perform(EM_LINESCROLL , 0, -Texto->Lines->Count);

    que es ligeramente más cómodo.

    Supongo que Visual++ y Windows Form tendrán funciones equivalentes a Handle y/o Perform y/o Lines->Count . Ahora que tienes la pista pulsa F1 y consulta tu ayuda

         Suerte.

     

    jueves, 24 de junio de 2010 13:06
  • Pues no me funciona, primero y principal por que no me reconoce el identificador EM_LINESCROLL.

    Debe de haber una forma mas facil...

    De todas formas, muchas gracias

    jueves, 24 de junio de 2010 13:54
  • EM_LINESCROLL y SendMessage estan definidos en "winuser.h" mira de hacer el correspondiente include.

    Es un fichero con Copyright de Microsoft. Lo debes tener en algún directorio.

     

    jueves, 24 de junio de 2010 15:16