PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 745 Preguntas.<<  >> 

    Pregunta:  29812 - PROBLEMA AL DELIMITAR UNA VENTANA GRAFICA (SETBIEWPORT)
Autor:  Manuel Aguilar
Hola, alguno de ustedes me puede decir como se reestablecen las vetanas graficas despues de utilizar el (setviewport) a las cordenadas; 1,1, ya que despues de utilizarlo no puedo quitar la ventana y restablecerla
  Respuesta:  Eider Mauricio Aristizabal Erazo
Hola a todos los amantes del padre de los lenguajes de programación...
Espero que este ejemplo te ayude con algo...
cualquier duda enviamela a mi correo y con el código fuente.

1) Debes limpiar el puerto que tenias abiero con la funcion clearviewport
2)Debes hacer un nuevo setviewport que te abarque toda la panalla.
3)En el código que sigue, puse algunos valores que se salen del rango de la pantalla, esto para verificar la funcinalidad del setviewport

//Saludo a los de Colombia y Cali
#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
void RestaurarPantalla();
void main(void)
{
int gdriver = DETECT, gmode, errorcode;
int ht;
initgraph(&gdriver, &gmode, "c:\\tc\\bgi");
settextstyle(SMALL_FONT,HORIZ_DIR,4);setcolor(15);
outtextxy(10,10,"Estoy en la posicion 10, 10 con el puerto de la pantalla");
setcolor(1);line(10,12,getmaxx(),12);setcolor(15);
outtextxy(10,30,"Pulse Enter para pasar al nuevo puerto");
getch();
setviewport(100,100,getmaxx()-100,getmaxy()-100,1);
setcolor(1);line(-1000,12,1000,12);setcolor(15);
outtextxy(10,10,"Posicion 10, 10 del puerto setviewport(100,100,getmaxx()-100,getmaxy()-100,1);");
outtextxy(10,30,"Pulse Enter para regresar al puerto por defecto de la pantalla");
getch();
RestaurarPantalla();
outtextxy(10,10, "Estoy en la 10,10 de la pantalla por defecto, es decir que ya lo restaur‚");
getch();
}
void RestaurarPantalla(){
cleardevice();//opcional
clearviewport();//limpio el puerto que se encuentra abierto actualmente
setviewport(0,0,getmaxx(),getmaxy(),1);//Puerto por defecto
cleardevice();//opcional
}

    Pregunta:  29814 - PROGRAMACION HIBRIDA ENTRE ENSAMBLADOR Y COM. DE PUERTOS
Autor:  Alejandro Delgadillo Gómez
Hola que tal me podrian proporcionar informacion de programacion hibrida entre C-ensamblador y la comunicacion de puertos, instruciones de C y asm gracias
  Respuesta:  Ne0 Ph03n1x
Para usar el ensamblador en C se usa la palabra reservada asm, puede programarse linea a linea o bien un bloque completo, esto es:

/*codigo en c
....
*/
asm {
/*un bloque en ensamblador*/
mov ax,dx
}
asm jnc aqui /*una sola línea en ensamblador*/
aqui:
/*..... etc */

Para la comunicacion con los puertos se usa el "out" y el "in" en ensamblador: (si dato es byte saca un byte, si es word, saca un word, el primer byte en la direccion "puerto" y el restante en "puerto+1")

out puerto,dato
in puerto,dato

en "c" son los siguientes:

outportb(puerto,valor); /*saca un byte*/
valor=inportb(puerto); /*recibe un byte*/

y

outport(puerto,valor); /*saca una palabra*/
valor=inport(puerto); /*recibe una palabra*/

Ok. Hope this is useful.

Ne0.

    Pregunta:  29903 - COMO ES LA INTERRUPCION AL RELOJ
Autor:  Pedro Martinez
Pues quisiera saber que hace y como le hacemos para realizar la interrupcion al reloj de la maquina desde un programa en c/c++
  Respuesta:  ricardo ortega
Saludos. No puedo ser más específico porque tu pregunta no aclara el compilador ni el ambiente.
La interrupción más conocida para el reloj es la 1CH (la h es de hexadecimal) generalmente sirve para procesar algo con cada tick del reloj, esto es, 18,2 veces por segundo. Es preferible hacerla en ensamblador, si la haces en C o C++ puedes tener problemas si sobrecargas de trabajo a esta función de interrupción (no solo que el reloj se retrasará sino que todo el sistema estará lento).
Te puedo dar ejemplos en C y Asm, pero te aclaro que todo esto sirve solamente bajo DOS y ambientes de 16 bits. Para Windows se utiliza otro mecanismo que son los timers y los eventos,que no requieren interrupciones.

Adjunto ejemplo en MASM

    Pregunta:  30098 - CREAR INTERRUPCION
Autor:  Monica Perez
Hola, estoy programando en Visual C++ 6.0 y necesito crear una interrupcion, la cual tiene que ejecutar una funcion X, me podrian decir como hacerlo
o donde buscar informacion..

Gracias
  Respuesta:  Ricardo Jiménez
Estimada compañera.
No entiendo bien lo que quieres decir con "interrupción". Supongo que te refieres a eventos. Si es así espero que este mensaje te resulte de ayuda.
Para la gestión de eventos es necesario llamara a la función del API CreateEvent. Esta función retorna un manejador que te servirá al utilizar la función WaitForSingleObject. Esta función es la que se encarga de esperar los eventos y puedes configurarla como bloqueante hasta que se produce este.
Para activar el evento tienes que llamar a la función SetEvent.

Dentro de tu programa tendrás que hacer lo siguiente:
- en tu programa crear un evento, y después de esto
- Crear una hebra dedicada a esperar el mensaje. A esta hebra le pasarás como parámetro el manejador del evento
- dentro de la hebra llamarás a la función WaitForSingleObject (mira los valores de retorno que no me acuerdo de memoria) hay un valor de retorno que te indicará que el evento se ha producido., este valor de retorno lo utilizarás para controlar la ejecución de tu "función X"
- Allá donde necesites que se dispare tu función X sólo tendrás que llamar a SetEvent pasando el manejador del evento.

No se si te he ayudado en algo, espero que si,

Un saludo

    Pregunta:  30159 - COMO ENVIO Y RECEBO DE DATOS A TRAVEZ DEL PUERTO PARALELO
Autor:  baldomero galvan flores
como puedo enviar o recibir datos atravez del puerto paralelo o que aplicaciones se pueden realizar mediante el enviando datos a algun mecanismo o dispositivo(que no sea la impresora), en una aplicacion win32.
  Respuesta:  eider mauricio aristizabal erazo
buscate en la web una libreria que se llama
windows.h, la incluis en tu código fuente, y podes luego utilizar estos controles, debes saber bastante de programacion POO(Herencia, polimorfismo, sobrecarga).

Espero que te sirva de algo

    Pregunta:  30188 - COMO HACER UN DIR LISTBOX Y DRIVE LISTBOX EN C?
Autor:  miguel angel lopez
Como puedo hacer un Dir ListBox y un Drive ListBox al estilo de Visual Basic pero con C usando la API de windows?

Lo necesito para usarlo con un programa q tengo escrito en C normal y corriente y q quiero ponerle ventanas.

GRACIAS.
  Respuesta:  ELHOMBREINVISIBLE NOMELOSSE
facil solo tienes que enviar a la listbox un mensaje del tipo LB_DIR donde wparam contiene los atributos de los archivos a listar y lparam apunta a una cadena que contiene el path a volcar en la lista

    Pregunta:  30466 - VISUAL C++ CON ILOG
Autor:  Victor Jimenez
A la hora de linkar me sale el siguiente error. Estoy programando con librerias de Ilog para Visual C++.

--------------------Configuration: CoreStep1 - Win32 Debug--------------------
Compiling...
CoreStep1.cpp
Linking...
CoreStep1.obj : error LNK2001: unresolved external symbol "public: static class IlvSymbol * IlvGraphic::_nameSymbol" (?_nameSymbol@IlvGraphic@@2PAVIlvSymbol@@A)
msvcrtd.lib(crtexe.obj) : error LNK2001: unresolved external symbol _main
c:\ilogprueba\Debug\CoreStep1.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.

CoreStep1.exe - 3 error(s), 0 warning(s)
  Respuesta:  Jose Castellanos
Bueno no solo tienes que agregar el include en un programa en Visual C++, tambien tienes que agregar la libreria( Archivo lib ) que contiene la implementacion de las cabeceras del archivo Header que incluyes.

Esto es si incluyes una cabecera
include <tapi.h>
tambien deberas agregar la libreria
tapi32.lib

estas se agregan en Visual C++ 6.0 en
Proyect->Setting->pestaña LINK
en donde dice Object Library Modules

ahora cual libreria te falta no lo se, depende de las cabeceras que hayas agregado

    Pregunta:  30492 - ATRIBUTOS EN MODO TEXTO PARA COUT
Autor:  John Jairo Gamba Rincon
he tratado de muchas maneras hacer que el texto que saco con cout me salga con color o fondo y no he prodido, las ordenes textcolor, textbackground y textattr solo me funcionan con cprintf o similares.

si hay que hacer algun procedimiento especial o utilizar alguna orden especial porfavor colaborenme, se que no es muy complicado
  Respuesta:  David Cañadas
En particular no puedo responder dado que no conozco el método para hacer esto con cout. De todas formas, presupongo que estás trabajando sobre consola de DOS, en este caso debes saber que puedes controlar esto de otra forma.

Yo particularmente me programé en su momento una rutina de impresión a medida, algo como printf pero bastante más avanzado, capaz de reconocer saltos de línea, cambios de color, esperas a pulsación de una tecla, dibujo de ventanas, etc., todo controlable desde un string.

El caso es que si deseas controlar el color del modo texto, y hablamos de un PC, puedes usar el segmento 0xB800, donde se almacena la pantalla de texto.

Dicha pantalla ocupa 2000 bytes, de los cuales 1000 corresponden al texto y 1000 a los atributos. Van en grupos de dos (offset = 0 para carácter, offset = 1 para atributo, offset = 2 para carácter, offset = 3 para atributo, etc).

El atributo se divide en dos partes:

El byte 7 indica que ese carácter debe parpadear. Los bytes 6, 5 y 4 indican el color de fondo del carácter. Nótese que sólo pueden ser colores de brillo medio (del 0 al 7). El byte 3 indica si el color de primer plano del carácter será de brillo máximo o de brillo medio. Y los bytes 2, 1 y 0 indican el color de primer plano.

Quizás puedas aprovechar algo de esto.

Salu2.

    Pregunta:  30586 - REGLA FALSA EN C++
Autor:  Ele Sanc
Hola Gente
Sucede que un profesor nos solicito en un curso, que realizaramos el calculo de la Regla Falsa y la gráfica de la función(Cuestiones de Matemática) en C++, alguien que sepa la respuesta o a donde puedo hallar aunque sea una guía, le agradecería que me escribiera a mi correo.
Gracias.
  Respuesta:  JUAN PICO
EN ESTA MISMA PAGINA EN LA SECCION DE CODIGOS HAY UN CODIGO QUE HACE LO QUE ESTAS PIDIENDO

    Pregunta:  30726 - SOBRE TIME.H Y DIFFTIME( )
Autor:  Jaime Rojas Arriaga
No es C ni Visual C, pero es muy parecido; C++.

Tengo que registrar el tiempo que tarda mi computadora en ordenar un arreglo con el método InsertionSort, mi problema es que esto posiblemente lo hace en menos de un segundo y con el método difftime( ) solo puedo ver números cerrados (1 segundo, 2 segundos, etc.).

He intentado guardarlo en un float e inclusive desplegarlo con 50 puntos decimales pero aun así me sigue mostrando por ejemplo:
1.0000000000000000000000000000000...

Quisiera que alguien me aconsejara como le puedo hacer con esta función o que me recomendara otra función que determine el tiempo de ordenamiento y me lo despliegue con punto decimal.

De antemano muchas gracias.

Jaime.
  Respuesta:  Enic Cecilla Real
timeGetTime te dara el tiempo del sistema con precision de milisegundos, lo tienes declarado en <mmsystem.h>, deberás enlazar con winmm.lib.
  Respuesta:  chuidiang www.geocities.com/chuidiang
El problema es que las funciones de time trabajan en segundos y hagas lo que hagas, nunca obtendras algo inferior a 1 segundo.
Tienes que usar otra función. Suele haber una que te cuenta "ticks" del reloj interno y una constante en algún lado te dice, por ejemplo, que 100 ticks son un segundo. Con esto podrías afinar hasta la centésima de segundo.
En unix/linux, la función si no recuerdo mal, se llama getitimer. Te devuelve el tiempo de proceso en "ticks". Basta tomarlo antes y después de las cuentas.

Se bueno.

|<  <<  47 48 49 50 51 52 53 54 55 56 57  >>  >|