PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  26640 - MAPEAR TECLAS EN VISUAL C++
Autor:  antonio moyano
Hola amigos,
necesito que me ayudeis si es posible. Estoy haciendo una aplicación muy tonta en la que solo quiero capturar una tecla y mapearla, es decir, por ejemplo capturar en un edit box cuando presiono la tecla 9 y sacar por pantalla la tecla 8.Os comento un poco lo que he hecho.
En primer lugar he abierto un proyecto del tipo single document. He creado un BOX EDIT y luego he hecho una subclasificacion para poder capturar eventos del tipo ONCHAR y otros, pero a la hora de capturar las teclas si lo consigo, lo que no consigo es visualizar el ascii que yo quiero. Puedo hacer que no se visualice cualquier tecla que presiono, simplemente no llamando a la funcion CEdit::OnKeyUp(nChar, nRepCnt, nFlags); Pero si quiero que aparezca por ejemplo el ascci del numero 8 no lo consigo y no sé porqué. Por favor que no hago o que hago mal.

codigo Ejemplo

void MapeoTeclado::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RETURN)
{
MessageBox(_T("Enter pulsada"));
//Esto lo hace bien
}
else
if(nChar==VK_ESCAPE)
MessageBox(_T("Scape pulsada"));
//Esto lo hace bien
else
{
MessageBox(_T("pulsada otra tecla"));
CEdit::OnChar((UINT)_T("8"), nRepCnt, nFlags);
//Aqui no obedece y en vez de sacar el ascii del numero 8 saca la telca //pulsada, cosa que no quiero pues la quiero mapear
}
}
  Respuesta:  anonymous
debes crear un hook para el teclado que capture las pulsaciones solo cuando el foco corresponda al control en cuestion,
CreateWindowsHookEx

    Pregunta:  26672 - CALCULO DE TIEMPO DE EJECUCION
Autor:  Jose Orellana
Alguien podria decirme como puedo calcular los tiempos de ejecucion de las distintas sentencias o instrucciones en C?
En los microcontroladores es facil calcular el tiempo de ejecucion de una instruccion: normalmente es de 4Tclk. Asi, para un clock de 4Mhz, el tiempo de ejecucion de una instruccion es de 1 microsegundo. Pero para C no tengo idea de como calcularlo...Help me please
  Respuesta:  ricardo ortega
Saludos.
Cada instrucción tiene diferentes tiempos, y son tan cortos que se necesita repetirla miles de veces sin for, sino en línea, para medir los tiempos.
No aclaras si lo que quieres es obtener la velocidad del microprocesador (en tal caso te recomiendo el fuente de linux en www.sourceforge.net) o si quieres medir el tiempo de una sentencia C en particular.
Te doy un ejemplo sencillo:

#include <time.h>
....
clock_t x:
x = clock();
aquí coloca tus instrucciones, repetidas muchas veces,
puedes ayudarte con #define o cortar y pegar.

printf ("Milisegundos: %lu ", clock() - x):

Ojo que en algunos compiladores, clock no son milisegundos sino dieciochoavos .2 de segundo, prueba con el tuyo.
Si usas linux, djgpp, microsoft c, son milisegundos.

    Pregunta:  26682 - COMO HACER QUE UN .EXE CAMBIE DE HUBICACIóN DURANTE SU EJEC.
Autor:  tincho b
Ante todo, muchas gracias por el tiempo dedicado las preguntas.

yo quiero saber como hacer para que por ejemplo mi archivo c:\archivo.exe mintras esta en ejecución, se copie en c:\DIR\archivo.exe

en C, con Borland 4.51

Desde ya muchas gracias
  Respuesta:  melpomene zeus
1.- Tienes que averigüar el nombre del propio programa con los argumentos de main()
2.- Puedes realizar a continuación una llamada al DOS para mover el fichero.

    Pregunta:  26780 - IMPRESION EN C
Autor:  Juan Andrés C.G
Hola a todos, hace poco enpece a intentar imprimir en C , un tema del cual se puede sacar bastante provecho,

mi problema es el siguiente;

al utilizar stdprn para imprimir, las líneas que van despues de la primera línea especificada con fprintf se imprimen despues de esta. He probado a utilizar \\n para saltar a la siguiente linea pero no hace caso.Mi pregunta es:
¿Como puedo imprimir mas de una linea y que las imprima una debajo de la otra?

fprintf(stdprn,\"Prueba de impresion\");
  Respuesta:  Juan Andrés C.G
la solución pasa por implantar retornos de carro.

de esta forma.

fprintf(stdprn,"Vamos a imprimir.......\n\r");

así saltará de línea correctanente, pudiendo insertar espacios en blanco entre líneas etc...

La impresión usando el stream stdprn funciona correctamente y no suele dar ningún problema. Gracias a todos por ayudarme¡

    Pregunta:  26787 - ES POSIBLE LIBERAR COM SERIE OCUPADO POR APLICACION CERRADA
Autor:  Josep Selles
He programado una aplicación windows que utiliza el control ActiveX communications de microsoft. Esta aplicación tiene que ser utilizada siempre despues de otra aplicación que corre bajo MS-DOS y que también utiliza el puerto serie (debe ser el mismo puerto).Esta aplicacion MS-DOS se ejecuta desde el mismo Windows.

El proceso siempre es: utilizo la aplicación MS-DOS que envia informacion a traves del puerto serie, cierro la aplicación (cierro la ventana MS-DOS que se abrió en windows) y, a continuación, arranco mi aplicación Windows.... el prblema es que me encuentro con que no puedo abrir el puerto serie porque me dice que está ocupado...

Estoy seguro que la aplicación MS-DOS esta cerrada, pero al parecer deja algún recurso ocupado que hace que el control de comunicaciones de mi aplicación detecte que el puerto está siendo utilizado.

Mi pregunta es si desde mi aplicación Windows puedo liberar el puerto de comunicaciones que ha abierto otra aplicación, al menos en este caso en que la antigua aplicación ha dejado de existir.

No sé si no utilizando el control este de comunicaciones de microsoft me evitaría este problema, es decir, utilizando para mis comunicaciones serie las tipicas funciones del API de Windows (CreateFile, etc...). Quizás de esta forma no detectaría el puerto ocupado y si me dejaría utilizarlo.

Para dar más datos, os diré que mi aplicación corre en Windows 9X y está hecha con MFC.

Bueno, agradezco de antemano vuestra atención y espero que alguién pueda orientarme algo... gracias
Josep Sellés
  Respuesta:  Jose angel Cañas Martinez
Yo tenia el mismo problema con una aplicacion que recibia del serie mediante un hilo. Justo antes de cerrar la aplicacion, cerraba el hilo. El problema estaba en que la aplicacion se cerraba antes de finalizar el hilo (la recepcion la hacia mediante eventos, WaitCommEvent()), quedandose éste huerfano y con el puerto cogido. Lo solucioné poniendo un pequeño retardo detras del cierre del hilo, para darle tiempo a que se cerrase antes de que se cerrase la aplicacion.
Si esto no te funciona y puedes averiguar el pid de la aplicacion de MS-DOS (si la ejecutas sobre windows, éste le asignará uno), con TerminateProcess() lo puedes matas tambien desde la otra aplicacion.

Espero te sirva de algo
Un saludo
  Respuesta:  Carmelo
En teoría no deberías tener ningún problema en que tu aplicacion Windows abra el puerto, a mi a veces me ha pasado que sino cierras totalmente la ventana donde se ejecuta la aplicación MS-DOS el
puerto no se libera, es decir te encuentras que el programa ha finalizado pero la ventana se mantiene.
También deberías especificar como realizas toda la operacion de cerrado y apertura de los programas, si lo haces manualmente o automatizado.
Los primeros programas que hice para el puerto serie los hice para MS-DOS desde el TC, luego en windows me pasé al VB y usé el control que microsoft destribuye el MSCommm y ahora definitivamente uso la api de windows con la librería MFC y para mí esta última opcion es sin duda la más cómoda y la mejor.
En este link encontrarás toda la información necesaria sobre la api y sobre el puerto serie, vale la pena http://pb.uv.es/pedrom/pedrom.htm.

Un saludo

    Pregunta:  26926 - COMO PASAR RUTINAS HECHAS EN ENSAMBLADOR A LENGUAJE C
Autor:  GASPAR DIMAS CARRYOP
hola disculpe q moleste vi su pagina y no se si ustedes me podrina informar donde puedo encontrar informacion o un ejemplo de como pasar un programa de lenguaje emsablador a lenguaje c es decir pasar una rutina de emsamblador a c, es q e edo informacion para saber como realizar estos ejercicios si de casalidad me podrian dar un ejemplo de ello gracias.
  Respuesta:  Armando Matamoros Rosabal
En lugar de pasar del lenguaje C a ensamblador, puedes trabajar a bajo nivel desde C.
Te recomiendo que busques el libro programación en C de Byron Gottfried, editorial MacGrawHill

    Pregunta:  26937 - COMO HACER UN SCREEN SAVER EN C
Autor:  DIANA KARINA CARDENAS MARIN
Un saludo a todos.
Me encuentro en segundo año en la universidad y como proyecto me dijron que creara un Screen Saver para lo cual debemos trabajar con las interrupciones del teclado, mouse, tiempo y ademàs con la memoria de video.
Estoy angustiada porque no se què hacer primero, no conozco la estructura de un protector de pantalla ni como funciona dentro de la memoria. El proyecto debe ser hecho en lenguaje C.
Agradezco por la atenciòn a mi preguanta.
Espero ansiosamente una respueta.
Gracias.
  Respuesta:  Daniel Azkona Coya
Prueba a echar un vistazo a la rutina
SystemParametersInfo
en la MSDN

    Pregunta:  27422 - COMO CREAR BLOQUES PL/SQL DESDE C++ BUILDER
Autor:  Juan Gabriel Flores Nisa
Me gustaria saber si se pueden utilizar bloques pl/sql en c++ builder, ya q se como se hacen sentencias sencillas como una insert, delete... pero lo q necesito es utilizar cursores, excepciones....
  Respuesta:  Rafael Hernampérez Martín
Utiliza el PS/SQL en procedimientos almacenados o en Triggers.

    Pregunta:  27424 - COMO INICIAR LOS MODOS GRAFICOS DE DOS.
Autor:  jean --
Hola, les quiero preguntar como puedo inicializar el modo grafico 13h de dos, utilizando Visual c++ 6.0. Sin utilizar las funciones de asm.
  Respuesta:  juan mamani
Si c++ 6.0 trae la funcion para hacer interrupciones, entonces debe
traer un estructura para leer o modificar los registros del procesador.
De lo contrario , echa un vistazo a esa función de llamadas de interrupciones. Si tienes que crear la estructura., contáctame.

    Pregunta:  27444 - LINKER ERROR: SEGMENT _TEXT EXCEED 64K, EN TURBO C++
Autor:  Mariano Bonatti
Tengo el borland turbo c++ 3.11, estoy haciendo un programa de gestion comercial y cuando compilo de da un error que dice:
"Linker Error: Segment _TEXT exceed 64k". Me gustaria saber como lo puedo solucionar

Desde ya, muchas gracias.
  Respuesta:  pepe pérez
Este error seguramente esté producido por la elección inadecuada del modelo de memoria. El segmento _TEXT es el segmento de código en lenguaje C para Ms-Dos (equivalente al .code de ensamblador) y en los modelos pequeños (Small y Tiny) no puede exceder de 64 Kb. Prueba con los modelos medianos (Medium y Compact) y si sigue sin funcionar prueba con Large y Huge (Options -> Compiler -> Code generation - > Model).

Si a pesar de todo esto, sigue sin funcionar, prueba activando el soporte para solapamieto (Options -> Compiler -> Code Generation -> Overlay Support)
  Respuesta:  Daniel Azkona Coya
Es debido a que en DOS el segmento de datos para cada fichero C es de 64Kb, supongo por este error que estas haciendo todo el programa en un solo fichero de código.
Prueba a separar el código en varios ficheros.
  Respuesta:  melpomene zeus
Sencillamente, el texto del fichero C es mayor de 64K. Debe dividirse en ficheros C separados, y crear ficheros OBJ de cada uno por separado (no valen #include) y enlanzarse con el TLINK luego. No hay que olvidarse de crear el fichero .MAK correspondiente. De todas formas, Turbo C++ 3.11 ya está muy obsoleto.

|<  <<  44 45 46 47 48 49 50 51 52 53 54  >>  >|