PREGUNTAS CONTESTADAS - C/Visual C

 Hay un total de 744 Preguntas.<<  >> 

    Pregunta:  642 - CREAR UNA APLICACIÓN CLIENT/SERVER CON C++ BUILDER
Autor:  Toni
Hola soy un estudiante de administración de sistemas informaticos, y estoy interesado en crear una aplicacion cliente servidor con C++ Buider client/server y me gustaria saber como conseguir que el ejecutable resultante consulte la base de datos en access, estando ambos ficheros en el servidor y ejecutando la aplicacion desde el cliente.
  Respuesta:  Luis Mendez
Pues lo que tu preguntas es una de las muy buenas caracteristicas que tiene C++BUILDER, no hay distinciones entre una aplicacion que utilice archivos en modo local (dBASE,PARADOX,MSACCESS), de otra que lo haga en modo Cliente/Servidor (ORACLE/SYBASE/MS-SQL Server), porque lo unico que debes hacer es crear un alias mediante BDEAdmin y referenciar, ya sea al directorio de tu disco rígido o a la ubicación dentro del servidor de la base de datos a la que quieres acceder. Y a esta referencia la puedes hacer tanto en tiempo de diseño como en tiempo de ejecución. Hay varios sitios de donde puedes obtener información (en ingles-sorry), estos son www.bcbdev.com, bcb.copystar.com.tw/HighPerformanceBcb, cbuilder.dthomas.co.uk/sitemap.htm, y algun otro que podrán encontrar en los links de los que he referenciado.
Que tengas suerte !! y me gustaría comunicarme contigo por e-mail para que me cuentes como te va y que estas haciendo, yo estoy haciendo mis primeros sistemas utilizando esta herramienta.

    Pregunta:  669 - COMO SE PERSONALIZAN LAS CAJAS STANDAR CFILEDIALOG
Autor:  Jose de la Cruz
Quisiera saber si alguien me puede dar alguna informacion sobre como personalizar las cajas de dialogo estandar de Abrir y Guardar Como tipo explorador de la clase CFileDialog de Visual C++ 5, es decir como agregar mas controles dentro de la caja, a parte de los que vienen por defecto. Porque hasta ahora solo he logrado modificar las cajas 1536 y 1537 que visual trae en fileopen.dlg, pero estas cajas no son las del tipo explorarador.Gracias.
  Respuesta:  Manuel
Crea una clase derivada de la que quieres modificar.
Intenta a continuación crear botones, cajas de textos,... "a mano", es decir, sin utilizar el "Resources", sino haciéndolo dentro del código.
Si sabes hacer botones y todo eso dentro del código, ya lo tienes hecho, sino, luego te mando un trozo de código. Luego me lo dices.

    Pregunta:  707 - IMPRIMIR PANTALLA (800x600x256C) EN MODO GRAFICO
Autor:  Orly
Necesito saber donde puedo encontrar alguna funcion, algoritmo o libreria que pueda implementar para el compilador turboc++ de Borland que me permita imprimir en una impresora una pantalla completa de 800*600 pixeles de resolucion y 256 colores. El entorno operativo es MS-DOS. Gracias.
  Respuesta:  Hugo Aquino Navarrete
Desarrollé una función para poder capturar la pantalla completa en formato BMP y hacerla útil para el entorno de Windows.
  Respuesta:  Gustavo Muro
hice un programa que imprime en laser el desplegado de la pantalla, utilizando GENUS que es una serie de drivers para impresoras, si te interesa, te mando una copia

    Pregunta:  717 - FUNCION RECURSIVA EN C++
Autor:  Jairo Alberto Cardenas
Amigos de la lista necesito su apoyo para realizar el siguiente codigo o funcion en C++ asi:

Funcion recursiva llamada Maxima que encuentre el entero mas grande en una lista encadenada llamada Lista. Se asume que la cabeza de la lista es de tipo nodo*, en donde nodo es una estructura con un miembro llamado Dato de tipo entero y un miembro llamado Siguiente de tipo nodo*.

Gracias por su ayuda

  Respuesta:  DANIEL ANDRADE GIRON
la funcion recursiva es:

int nodo::maximo(int *A,int n)
{
if(n==0)
return(A[0]);
else
if(maximo(A,n-1)<A[n])
return(A[n]);
else
return(maximo(A,n-1));
}

/* si deseas el detalle escribeme tengo muchos programas recursivos suerte*/
  Respuesta:  CHRISTIAN LOPEZ URBINA
Por la largada de la respuesta, esta en el archivo resp717.txt
  Respuesta:  Eduardo
Aca te mando un ejemplo. Si queres el programa completo escribime y te lo mando (es 100 % recursivo) y pienso que te va a servir.
int Maximo(Lista MiLista)
{
if( MiLista ) {
int n = Maximo(MiLista->next);
return ( MiLista->Dato > n ) ? MiLista->Dato : n;
}

return 0;}

como te daras cuenta no funciona si todos los valores de la lista son menores que cero. pero se vera alguna solucion.

Archivo fuente
Suerte

    Pregunta:  729 - BUSCAR EN EL DISCO DURO
Autor:  Sergio Quintero Rojas
Quisiera saber como puedo hacer para rebisar en todo el disco duro incluyendo subcarpetas un fichero con una extencion especifica, lo que quiero es algo parecido al Find que trae incorporado W95, ademas quisiera saber como puedo extraer la version, nombre, shareware, es decir las propiedades de un fichero ejecutable. Lo anteriormente mencionado lo deseo hacer en Borland C++ 3.0 para D.O.S.. Muchas gracias
  Respuesta:  maelpomene zeus
No hagas caso a los demas. Hacer una ventana de DOS y un DIR para saberlo es una guarrada. Utiliza las funciones que te digo, existentes desde las primeras versiones de Turbo C y antes:

findfirst
busca el primer fichero que coincida con las especificaciones que le des
findnext
busca todos los siguientes ficheros que coincidan con esas especificaciones, uno por cada llamada

Busca los parámetros en la ayuda de Borland C. Si se lo especificas, te buscará archivos de sistema, ocultos, archivados, directorios, etc.

Lo de la versión y si es shareware es absurdo, no existen funciones para eso en DOS, porque está almacenado internamente en cada programa y éstos no tienen porqué tener parámetros para facilitarlos. Puedes imaginarte la versión por el tamaño y la fecha, pero eso es adivinarlo, no saberlo realmente.
  Respuesta:  Richard Mac
Hay un pequeño dilema en esto, el C fue hecho para UNIX en donde los directorios se tratan como archivos "fopen", pero en DOS no funciona.
Pero por suerte, tenemos la funciones de dir.h y dirent.h que son:

struct dirent{
d_name[13];
bla bla bla
};

DIR *opendir("nombre dir");

struct dirent *readdir(DIR *apuntadordir);

closedir(DIR *apuntadordir);

si usas midirent=readdir(miapundir);
midirent->d_name es un puntero al nombre de arch. o direct. y lo podrías ver por ej:
printf("%s",midirent->d_name);
  Respuesta:  Fidel Portilla M.
Bueno, yo creo que si estas en el entorno de DOS., es probable hacer un "RUN" desde tu aplicacion o ejecutar una llamada a un comando de DOS. y con el DIR, de DOS., se puede buscar un archivo en todo tu disco duro y mandar el resultado a un archivo ASCII. Ej.:
"C:\>DIR *.EXE /S > NOMBRE.TXT" te mandará todos los archivos que tengan extención "EXE" al archivo de texto "NOMBRE.TXT", así como el "PATH" en el disco, solo hace falta saber que vas a leer en tu archivo ASCII y asignar el resultado a una variable. Lo de la versión y el tipo de software eso no tengo idea. Si requieres de más información enviame un e-mail.
  Respuesta:  Carlos Fernandez
bueno la respuesta anterior esta superbuena pero hay veces que los archivos estan ocultos no es necesario que esten en el path de dos en el autoexec.bat pero puedes hacer un dir asi c:\dir nombre_del_archvio.extencion /a/s este buscara si esta escondido y en todos los direcctorios si hay muchos pues pon un /p para que se detenga ok y si quieres un reporte en un texto usa ">" para mas ayuda usa el help del MSO-dos

    Pregunta:  740 - COMO HACER UN SISTEMA OPERATIVO EN C++ USANDO ASM
Autor:  Carlos Fernández
necesito saber como puedo copiar archivos en c++ usando asm, como puedo cambiar la etiqueta del disco duro usando asm en c++, como colocar este sistema operativo en el sector 0 pista 0 en el disco de arranque bueno son muchas las preguntas pero cualquiera que sepa programar en c++ y asm porfavor escribame si tienen algunos programas fuentes me los mandan y yo estare en contacto asi me ayudaran (estoy haciendo un sistema operativo)
  Respuesta:  Carlos Molina V
Yo puedo ayudarte, me encanta programar a bajo nivel y tengo mucha información, pero no puedo enviarte en este momento porque debo buscarla (hay un gran desorden en mi disco), de cualquiier forma, si me escribes a mi E-Mail yo te puedo ayudar un poco, tal vez ponernos en contacto en un CHAT (NET Meeting u otro) e intercambiar información.... Lo de escribir en el sector 0 del disco yo lo tengo.... pero porque no sencillamente haces una partición para DOS (solo de arranque) y desde ahi cargas tu programa que se adueñará del sistema y modifiicará todas las interrupciones a tu gusto.
Por ejemplo eso es lo que hace un servidor NOVELL.... OK!!!

    Pregunta:  747 - MANEJO DE MATRICES EN VISUAL C++ 6.0
Autor:  Lucía
No manejo bien el Visual C++ 6.0, y tengo que hacer un programa que ingrese datos a una matriz de 20 por 20, calcule la inversa de esa matriz y muestre la matriz resultante por pantalla, en lo posible con una muy buena presentación.
Si alguien me puede orientar sobre como hacerlo, le estaría eternamente agradecida.
  Respuesta:  Willser F. González C.
Esto te puede ayudar, es el algoritmo que calcula la inversa de una matriz.

/*-----
Función que calcula la inversa de una matriz cuadrada.

Parámetros :

vfMtriz : Recibe la dirección de la matriz Inicial a la que se le calculará la Inversa.
bError : Recibe la dirección de una variable donde se indicará sí fue posible o no calcular la matriz Inversa, asignándole un valor de TRUE o FALSE respectivamente.
-----*/

void MtrizInvrsa(float vfMtriz[][], BOOL &bError)
{
int i, j, k;

float fPbte1 = 0.0f, fPbte2 = 0.0f;

float vfInvrsa[20][20];

// Asignar unos (1) a su Diagonal - Matriz Identidad.

for (i = 0; i < 20; i++) // Asignar unos.
vfInvrsa[i][i] = 1.0f;

// Calcular la Inversa de la matriz.

for (j = 0; j < 20; j++) // Para cada Columna.
for (i = 0; i < 20; i++) // Para cada Fila.
{
if (i == j || vfMtriz[i][j] == 0)
continue;

fPbte1 = vfMtriz[j][j];
fPbte2 = vfMtriz[i][j];

for (k = 0; k < 20; k++)
{
vfInvrsa[i][k] = vfInvrsa[i][k] * fPbte1 - vfInvrsa[j][k] * fPbte2;
vfMtriz[i][k] = vfMtriz[i][k] * fPbte1 - vfMtriz[j][k] * fPbte2;
}
}

// Convertir la diagonal de la
  Respuesta:  Jose Luis De la Cruz
Hola, te recomiendo que para que implementes una matriz en VC, crees un objeto CMatriz que que pinte en la vista los m*m elementos de la matriz como rectangulos solidos dispuestos en m filas y m columnas, y que responda al evento WM_CHAR cada vez que escribas un numero, luego este se asignara al elemento, ademas cada rectangulo debe responder al evento click para asi tener el foco cada elemento.......al final recien implementas tu rutina para hacer los calculos. si quieres averiguar mas sobre los objetos en la vista echale un vistazo al ejemplo DRAWCLI en el CD de VC.
Yo tambien estoy trabajando en un programa que maneja matrices en Visual C++, y tengo rutinas que calculan la inversa de una matriz, por reduccion gausiana o tambien por cofactores, pero estan implementadas en C++ para DOS( que no es problema para pasarlo a VC). Si quieres algunas de las rutinas solo escribeme, SUERTE..

    Pregunta:  794 - SONIDO Y GRAFICOS EN C (NO C++)
Autor:  Victor Gonzalo
Me gustaría saber como puedo tratar ficheros BMP y ficheros de sonido para programas DOS desde C (sin utilizar clases ni herramientas C++, ya que es para una practica de C).
  Respuesta:  Hugo Aquino Navarrete
Tengo una función tanto para poder capturar e insetar imágenes en formato BMP a 256 colores
  Respuesta:  J. A. Sanchez
Para el fichero BMP, puedes crear estructuras como las definidas en el fichero windows.h (yo utilizo borland C), y leer asi los datos del grafico, abriendo el fichero binario y leyendo estas estructuras. para presentarlo, utiliza el sistema BGI de borland, o el equivalente de tu compilador.

    Pregunta:  814 - COMO MANEJAR EL PUERTO SERIAL DE UNA IMPRESORA
Autor:  Martha C
La pregunta consiste en saber como hago para imprimir ya sea una letra o numero a traves del manejo del puerto serial de una impresora por medio de un programa en C/C++
  Respuesta:  Fabián Sierra C
Si deseas acceder al puerto serie para imprimir,no hay necesidad de ello. Los programas en C para DOS abren automáticamente un archivo stdprn,análogo a stdout,al cual se le debe enviar la salida impresa.Por ejemplo:
#include "stdio.h"
main(){
if(!stdprn){
printf("Impresora no disponible");
return;
}
fprintf(stdprn,"Esto es un ejemplo");
}
Así de sencillo.También puedes abrir un archivo especial de impresora y escribir de la misma forma.El nombre del archivo especial,en Dos,es "PRN".
File *impresora;
impresora=fopen("PRN","w");
if(!impresora){
printf("Impresora no disponible");
return;
}
fprintf(impresora,"Otro ejemplo");
En Unix o variantes,el archivo especial lo encontrarás seguramente en etc/dev/printer, y se usa igual.
Carácteres de control:los mismos de siempre;\fo\l avanzan una página.
Si quieres usar el puerto serie con otros fines,puedes usar llamadas a interrupciones mediante int86 (TurboC) o alguna función específica de puertos,como outport.

    Pregunta:  819 - PUNTEROS Y ARBOLES AVL
Autor:  Mauricio Murgas
Estimados compañeros, necesito información de arboles AVL implementados en el lenguaje C++ (estructuras, balanceo), información avanzada de punteros en C++
(Ej. nodos apuntando a una lista enlazada). de antemano Gracias!!
  Respuesta:  Felipe Navarro Juillet
Mira loko... aca tengo un codigo implementado por mi de arboles avl.
Voy a postear solo los balanceos... si quieres mas informacion sobre la funcion ingresar, declarar y balancear, escribeme al correo.

Arbol *RotacionDI(Arbol *nodoarb)
{
Arbol *nda=NULL;
nda = nodoarb->der->izq;
nodoarb->der->izq = nda->der;
nda->der = nodoarb->der;
nodoarb->der = nda->izq;
nda->izq = nodoarb;
nodoarb = nda;
return nodoarb;
}

Arbol *RotacionDD(Arbol *nodoarb)
{
Arbol *nda=NULL;
nda=nodoarb->der;
nodoarb->der=nda->izq;
nda->izq=nodoarb;
nodoarb=nda;
return nodoarb;
}

Arbol *RotacionII(Arbol *nodoarb)
{
Arbol *nda=NULL;
nda=nodoarb->izq;
nodoarb->izq=nda->der;
nda->der=nodoarb;
nodoarb=nda;
return nodoarb;
}

Arbol *RotacionID(Arbol *nodoarb)
{
Arbol *nda=NULL;
nda = nodoarb->izq->der;
nodoarb->izq->der = nda->izq;
nda->izq = nodoarb->izq;
nodoarb->izq = nda->der;
nda->der = nodoarb;
nodoarb=nda;
return nodoarb;
}

Dependiendo del tipo de recursion de tus funciones, aveces no es necesario implementar las rotaciones dobles, ya que la recusion se encarga de hacerlo solo con las simples....
  Respuesta:  Marcos
hola:
Para poder encender los LEDS del teclado debes tenes dos posibilidades:
1-Usando la interrupción 16 para leer el byte de estado del teclado y activar cada uno de los bits que corresponden a los LEDS.
2-Accediendo a la dirección de memoria [$0040:$0017], poniendo la siguiente instrucción
var1=mem[$0040:$0017]
y lo que tenes que hacer es activar cada bit correspondiente a los LEDS.
Con eso creo que queda solucionado el problema, contestame si es que te solucione el problema.
  Respuesta:  Meganuke
Creo que la direccion es 0040:0017, porueva introduciendo los valores 10 , 30 , y 70 (hex)
  Respuesta:  Rogelio
Por la largada de la respuesta, esta en el archivo resp819.txt
  Respuesta:  Javier Juambeltz
El estado de los leds (mejor dicho de las teclas) se guarda en el byte ubicado en la posición de memoria 0040h:0097h.

Manipulando los bits de este byte podés encender o apagar los leds

Por la documentación que tengo yo el detalle de los bits es el siguiente:
Bit 0: Estado de Scroll Lock (1=encendido)
Bit 1: Estado de Num Lock
Bit 2: Estado de Caps Lock

Los Bits 3 a 7 son para teclas como INSERT pero varían.

Bit 4 --> SCROLL LOCK
Bit 5 --> NUM LOCK
Bit 6 --> CAPS LOCK
Bit 7 --> INSERT

Los 4 bits inferiores son de sólo lectura, los 4 bits superiores pueden tanto leerse (para saber los estados de las teclas) como escribirse (para activar o desactivarlas).

En todos los casos el bit igualado a 1 significa Led encendido, tecla presionada o tecla activada según el caso.

Espero que te ayude

  Respuesta:  Cristóbal Tello
Por la largada de la respuesta, esta en el archivo resp819b.txt
  Respuesta:  Aníbal Villalobos
Por la largada de la respuesta, esta en el archivo resp819c.txt
  Respuesta:  Ellery Villalobos Vargas
Hola Amigo.
Mira sobre arboles AVL´s te recomiendo un libro que se llama : Algoritmos y estructuras de datos, de Niklaus Wirth, ahi econtraras las implementaciones de insercion y borrado en arboles AVL´s, ahora bien el unico inconveniente es que esta implementado en Modula-2, pero pasarlo C, es facil.
Si tienes posibilidad de conseguir el libro esta bien , si no yo creo que puedo conseguir esa implementacion en algun lado.
Sobre punteros en C, como que tipo de informacion ocupas y yo te puedo contestar.
Hasta Luego
  Respuesta:  Jose L. De la Cruz
Hola, esta pequeña rutina activa la led de la tecla Mayusculas:
mov ax,40h
mov ds,ax
mov bx,17h
xor byte ptr [bx] , 01000000b
Espero que te sirva de ayuda...
  Respuesta:  Antoni Sanoguera
En la posición &H0040:0017 se encuentra un byte que contiene el estado de las teclas Num Lock,Caps Lock y Scroll Lock. Los bit que activan y desactivan los leds son los siguientes:
0:Scroll Lock
1:Num Lock
2:Caps Lock
La operatoria seria modificar el valor de este byte y luego llamar a la interrupcion &H16 con el registro ax=256.
  Respuesta:  JRC
La única forma que se me ocurre (y no te garantizo que funcione) es escribir en los puertos que controlan el estado del teclado por medio de la instrucción de ensamblador OUT.

Estos puertos son el 417h y el 418h.
El byte del 417h es:
BIT - FLAG 417h - FLAG 418h
7 - Ins (estado) - Ins (pulsado)
6 - Caps Lock (estado) - CL (pulsado)
5 - Num Lock (estado) - NL (pulsado)
4 - Scroll Lock (estado) - SL (pulsado)
3 - Alt (pulsado) - Crtl NumLock (estado
2 - CTRL (pulsado) - No se usa
1 - Left Mays (pulsado) - No se usa
0 - Right Mays (pulsado) - No se usa

Con una máscara que fuerce los bits 6,5 y 4 a 1 (encendido), quizá se enciendan los LEDS. Prueba a escribir en ambos puertos.

  Respuesta:  Gregorio Cobá Gala
En el area de datos del BIOS de la PC existe un área de memoria que contiene los status de los leds del teclado, sólo tienes que leerlos, determinar cuales están activos y los que deseas activar.

Si quieres más información envíame un e-mail detallando tu problema para ayudarte mas.

Con mucho gusto deseo ampliar mi respuesta para todos los usuarios que lo necesiten. Como mencioné en el correo anterior: El BIOS tiene un área de datos que utiliza para el control del hardware de la pc que a continuación te desglozo:

Seg:offset - Descripción
0040:0000 - Dirección de base de COM1
0040:0002 - Dirección de base de COM2
0040:0004 - Dirección de base de COM3
0040:0006 - Dirección de base de COM4
0040:0008 - Dirección de base de LPT1
0040:000A - Dirección de base de LPT2
0040:000C - Dirección de base de LPT3
0040:000E - Dirección de base de LPT4
0040:0010 - Byte menos significativo del hardware instalado
0040:0011 - Byte mas significativo del hardware instalado
0040:0013 - Tamaño de la memoria base desde 0kb hasta 640kb.
0040:0017 - Byte de estado del teclado
0040:0018 - Byte de estado del teclado

0040:001A - Cabeza de la memoria intermedia del teclado
0040:001C - Cola de la memoria intermedia del teclado
0040:001E - Memoria intermedia del teclado
0040:003E - Estado de recalibración del lector del diskette
0040:003F - Estado del motor del lector del diskette
0040:0040 - Contador de parada del motor del lector del diskette
0040:0041 - Estado de la operación anterior del lector del diskette
0040:0042 - Estado (7 bytes) del controlador del diskette
0040:0049 - Modo de video actual
0040:004A - No. de columnas de la pantalla
0040:0060 - Ultima línea del cursor
0040:0061 - Primera línea del cursor
0040:0062 - Página de video actual
0040:0063 - Dirección de base del controlador de video
0040:0065 - Contenido del registro 3x8
0040:0066 - Contenido del registro 3x9
0040:006C - Clicks del cronómetro desde la media nochoe
0040:0070 - Descarga del cronómetro desde la última lectura (pasada media noche)
0040:0071 - Estado de la tecla break
0040:0072 - Indicador de reinicio del sistema
0040:0074 - Estado de la última operación del disco duro
0040:0075 - Números de discos fijos
0040:0078 - Valor de intervalo de la impresora 1
0040:0079 - Valor de intervalo de la impresora 2
0040:007A - Valor de intervalo de la impresora 3
0040:007B - Valor de intervalo de la impresora 4
0040:007C - Valor de intervalo de COM1
0040:007D - Valor de intervalo de COM2
0040:007e - Valor de intervalo de COM3
0040:007f - Valor de intervalo de COM4
0040:0080 - Puntero de inicio de la memoria intermedia del teclado
0040:0082 - Puntero final de la memoria intermedia del teclado
0040:0084 - Número de líneas de video - 1
0040:0085 - Altura de un caracter en bytes por caracter
0040:0087 - Estado del control de video
0040:0088 - Estado del control de video
0040:0089 - Bits de control del VGA
0040:008B - Estado de control de soportes
0040:008C - Estado del controlador de disco duro
0040:008D - Estado de error de disco duro
0040:008E - Control de interrupión del disco duro
0040:0090 - Estado de soporte de la unidad de disco 0
0040:0091 - Estado del soporte de la unidad de disco 1
0040:0094 - Cilindro actual de la unidad de disco 0
0040:0095 - Cilindro actual de la unidad de disco 1
0040:0096 - Estado del modo del teclado
0040:0097 - Indicadores de los leds del teclado
0040:0098 - Desplazamiento del indicador de espera del usuario
0040:009A - Segmento del indicador de espera del usuario
0040:009C - Byte de menor peso del contador de espera del usuario
0040:009E - Byte de mayor peso del contador de espera del usuario
0040:00A0 - Indicador de espera del usuario activo
0050:0000 - Valor del estado de imprimir pantalla

Como podrás observar, te estoy señalando 3 direcciones que corresponden a los controles del teclado. Las dos primeras corresponden a las teclas que se están pulsando (shift, ctrl, alt, etc). y la última corresponde a los leds del teclado. Esta última dirección es un byte que en el que segun el estado de cada bit (0 ó 1) es el led del teclado que está encendido. Si cambias el estado de ese bit, también cambia el estado del led. En ensamblador puedes hacer lo siguiente:

PUSH ES
MOV AX, 0040h
MOV ES, AX
MOV AL, BYTE PTR ES:[0097h],

Con AND y OR lees y cambias el estado de los leds y para terminar restauras el valor del registro ES

POP ES

|<  <<  1 2 3 4 5 6 7 8 9 10 11  >>  >|