Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

18/10/2005 #1


Como hago un entorno grafico programado en C
Bueno, reconozco que es un poco desubicado mi tema ya q como este es un foro de electrónica no podría estar haciendo esta pregunta de programación, pero como no conozco ningún foro confiable de programación, prefiero crear el tema acá.

Estoy haciendo un programa para un proyecto final de una materia de la facultad que se llama informática II, el proyecto consiste en: tener un software hecho en C (lenguaje de la materia) que controle dos motores paso a paso que muevan un espejo y teniendo un laser apuntando a ese espejo, poder formar figuras geométricas en la pared.

El tema es que como es el proyecto final de la materia, a mi me gustaría hacer este software con un pequeño entorno grafico como para darle un poco mas de presentación al proyecto, el entorno grafico solo lo quiero para los menus, etc bien simple !

El problema es que no se como hacer ese entorno grafico programando desde C

alguien me puede ayudar???
Gracias !
18/10/2005 #2


Mira, es dificil de explicar, ya que ademas de ser muchas cosas habria que ver que es lo que quieres hacer... pero puedes pegarle una revisada a este mini tutorial, es bastante sencillo.

http://www.ib.cnea.gov.ar/~icom/CursoC/graficos.shtml
19/10/2006 #3


Re: Como hago un entorno grafico programado en C
Si utilizas Linux el mismo SO tiene aplicaciones para realizar entornos graficos tanto en KDE como en Gnome y hay muchisima información en internet. La programacion en ambos es en C asi q no te costará mucho trabajo hacerlo.

Si usas windows necesitaras de algun programilla, tipo labwindows,..... son faciles de usar
25/10/2010 #4

Avatar de Meliklos

Respuesta: Como hago un entorno grafico programado en C
revivo este tema porque tengo el mismo problema...
lamentablemente el link de mamu ya no me lo toma....

aclaro que estoy en Win y no voy a usar linux! en realidad encontre un ejemplo de barra de progreso, el problema es que cuando pongo el ejecutable lo hace sin problemas, peo cuando habro el Turbo C y desde ahi abro el programa y lo quiero ejecutar, dice que no inicialice los graficos...cuando en realidad si!

:(
25/10/2010 #5

Avatar de elbrujo

Respuesta: Como hago un entorno grafico programado en C
a ver el codigo
25/10/2010 #6

Avatar de Meliklos

Respuesta: Como hago un entorno grafico programado en C
ups...cierto
bueno, problema resuelto...era cuestion de reacomodar, leer un poco mas y listo
igualmente subo lo que tengo hecho que puede servir!

Código:
#include <graphics.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>

#define CNT_ROW 5  //Counter in ProgressBar's --> Col position
#define CNT_COL 40  //Counter in ProgressBar's --> Row position

#define PROGRESS_X1 200//ProgressBar's --> Starting  position
#define PROGRESS_X2 460//ProgressBar's --> Ending position

#define PROGRESS_Y1 55 //ProgressBar's --> Starting Height
#define PROGRESS_Y2 85 //ProgressBar's --> Ending Height

#define delayTime 50  //Speed of ProgressBar

int main(void)
{
   /* request auto detection */
   int gdriver = DETECT, gmode, errorcode;
   int i,j,cnt=0,clrflag=0;
   clrscr();
   /* initialize graphics and local variables */
   initgraph(&gdriver, &gmode, "c:\\tc\\bgi");

   /*-------Introduction Line----------*/
   setcolor(LIGHTGREEN);
   settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);
   outtextxy(5,100,"Graphical ProgressBar");

   setcolor(CYAN);
   j=PROGRESS_X1;
   cnt=5;
   for(i=j;i<PROGRESS_X2;i++){
      delay(delayTime);
      gotoxy(CNT_COL,CNT_ROW);
      printf("%d",cnt);
      rectangle(j,PROGRESS_Y1,i,PROGRESS_Y2);
      if(i==(j+10)){
     j=j+13;
     i=j;
     if(clrflag==1){
       clrflag=0;
       setcolor(CYAN);
     }
     else{
       clrflag=1;
       setcolor(BLUE);
     }
     cnt=cnt+5;
      }
   }

   setcolor(WHITE);
   outtextxy(5,260,"Press Any Key to Return...");




   /* clean up */
   getch();
//   closegraph();
   return 0;
}
25/10/2010 #7

Avatar de albertoxx

Respuesta: Como hago un entorno grafico programado en C
A tan bonito que era el turbo C = que el turbo pascal todavia los tengo alli empolvados.... , pero lo malo es que ahora despues del windows vista ya no mucho que funcionan y mas para la comunicacion con los puertos LPT y Serial y no digamos con los USB, creo que le seria mas facil hacer el programa en visual C y con componentes de botoncitos y grafiquitas (Canvas) lo pueda hacer visual y controlar el motor por el LPT con una libreria tipo inpout32.dll
25/10/2010 #8

Avatar de elbrujo

Respuesta: Como hago un entorno grafico programado en C
Una rutina de esas como es interactiva con algun evento/accion/proceso tenes que engancharla para que el incremento sea representativo con la accion. Por ejemplo si reccorres una base de datos, que el puntero sea la referencia sobre donde esta y cuanto falta para EOF
25/10/2010 #9

Avatar de Meliklos

Respuesta: Como hago un entorno grafico programado en C
si, estaba haciedo ese enganche...
tengo otro programa que copia lineas de unos ficheros y las pasa a uno nuevo...
vos decis que la variable del for (que copia las lineas) sea la misma que el for para incrementar la barra de progreso??
25/10/2010 #10

Avatar de albertoxx

Respuesta: Como hago un entorno grafico programado en C
Se los hize un procedimiento asi es mas facil que lo puedan intercalar en cualquier despliegue de progreso solo tienen que saber el no. de veces a hacer y el procedimiento se encarga de la dibujada y del calculo del porcentaje aqui les va el codigo ya lo compile y lo probe y funciona bien. lo que no se es como se hace para que aparesca como codigo? aqui en el foro

#include <graphics.h>
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <IO.H>

#define delayTime 50 //Speed of ProgressBar

//Parametros
//XPos,YPos posiciones donde aparecera la barra de progreso
//Widht,Height ancho y alto de la barra de progreso
//Maximo : Cantidad maxima de veces ejemplo 500
//Actual : Valor actual del progreso ejemplo numero de 1 a 500

void DrawProgress(int XPos,int YPos,int PWidth,int PHeight,
int Maximo,int Actual){
int Prog;
char stPor[40];

setcolor(WHITE);
rectangle(XPos,YPos,XPos+PWidth,YPos+PHeight);
setfillstyle(1,BLACK);
bar(XPos+1,YPos+1,XPos+PWidth-1,YPos+PHeight-1);
setfillstyle(1,BLUE);
Prog = int((Actual*(PWidth-1)) / Maximo);
bar(XPos+1,YPos+1,XPos+Prog,YPos+PHeight-1);
Prog = int((Actual*100)/Maximo);
sprintf(stPor,"%d%%",Prog);
outtextxy(XPos+1,YPos,stPor);
}

int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int i,j,cnt=0,clrflag=0;
clrscr();
/* initialize graphics and local variables */
initgraph(&gdriver, &gmode, "P:\\PROGRAMS\\tc\\bgi");

/*-------Introduction Line----------*/
setcolor(LIGHTGREEN);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);
outtextxy(5,100,"Graphical ProgressBar");

setcolor(CYAN);
cnt=5;
for(i=1;i<50;i++){
DrawProgress(20,20,100,20,50,i);
delay(delayTime);
}

setcolor(WHITE);
outtextxy(5,260,"Press Any Key to Return...");
/* clean up */
getch();
// closegraph();
return 0;
}
25/10/2010 #11

Avatar de elbrujo

Respuesta: Como hago un entorno grafico programado en C
Meliklos dijo: Ver Mensaje
si, estaba haciedo ese enganche...
tengo otro programa que copia lineas de unos ficheros y las pasa a uno nuevo...
vos decis que la variable del for (que copia las lineas) sea la misma que el for para incrementar la barra de progreso??
En terminos generales una barra de proceso esta indicando proceso y debe ser representativa en terminos de porcentaje con el proceso que esta representando.. asi cuando inicia el proceso se evalua y en funcion al avance del mismo se vaya completando.

No es una barra grafica que varia en el tiempo o en un conteo independiente.
26/10/2010 #12

Avatar de Meliklos

Respuesta: Como hago un entorno grafico programado en C
bueno, la cosa es unir los siguientes pedazos de código...

la parte de la barra de progreso que esta en el post #6 con la parte de cargar copiar lineas de unos ficheros a otro...
Código:
void cargardatos(FILE *f,FILE *tabla1,FILE *tabla2,FILE *tabla3)
{
	char cadena[1000];
	char nombre[0x80];
	int m;

	unsigned long frec;
//	setcolor(WHITE);
//	settextstyle(3,0,1);
//	outtextxy(10,40,"\nIngrese la ruta de acceso a los archivos de datos:\n");

	//establecer una direccion que te lleve a la ruta dada
	tabla1=fopen("c:\\tc\\tabla1.txt","w");
	tabla2=fopen("c:\\tc\\tabla2.txt","w");
	tabla3=fopen("c:\\tc\\tabla3.txt","w");
	for(m=0;m<64;m++){
		fprintf(tabla1,"%d\t",m);
		fprintf(tabla2,"%d\t",m);
		fprintf(tabla3,"%d\t",m);
		sprintf(nombre,"c:\\tc\\fase\\%d.s2p",m);
		f=fopen(nombre,"r");
		if(f==NULL){
			printf("\nEl archivo no existe.\n");
			return;
		}
		else{
			while(!feof(f)){
				fgets(cadena, 1000,f);
				sscanf(cadena,"%lu",&frec);
				if(frec==1201000000)fputs(cadena,tabla1);
				if(frec==1300000000)fputs(cadena,tabla2);
				if(frec==1399000000)fputs(cadena,tabla3);
			}
		}
		fclose(f);
	}
	fclose(tabla1);
	fclose(tabla2);
	fclose(tabla3);
	return;
}
26/10/2010 #13

Avatar de albertoxx

Respuesta: Como hago un entorno grafico programado en C
No es como en el post 6 pero te puede dar una idea, ahora si quieres solo 1 barrita tendrias que hacer un ciclo donde sumes el largo de todos los archivos posibles y luego con ese dato ir calculando el progreso ( con 2 barras se mira bonito los setups de instalacion usan dos barras mientras 1 indica el progreso general la otra indica el progreso de modulo.

void DrawProgress(long XPos,long YPos,long PWidth,long PHeight,
long Maximo,long Actual){
long Prog;
char stPor[40];

setcolor(WHITE);
rectangle(XPos,YPos,XPos+PWidth,YPos+PHeight);
setfillstyle(1,BLACK);
bar(XPos+1,YPos+1,XPos+PWidth-1,YPos+PHeight-1);
setfillstyle(1,BLUE);
Prog = long((Actual*(PWidth-1)) / Maximo);
bar(XPos+1,YPos+1,XPos+Prog,YPos+PHeight-1);
Prog = long((Actual*100)/Maximo);
sprintf(stPor,"%d%%",Prog);
outtextxy(XPos+1,YPos,stPor);
}

void cargardatos(FILE *f,FILE *tabla1,FILE *tabla2,FILE *tabla3)
{
char cadena[1000];
char nombre[0x80];
int m;
long FileSize,CarLeidos;

unsigned long frec;

//establecer una direccion que te lleve a la ruta dada
tabla1=fopen("c:\\tc\\tabla1.txt","w");
tabla2=fopen("c:\\tc\\tabla2.txt","w");
tabla3=fopen("c:\\tc\\tabla3.txt","w");
for(m=0;m<64;m++){
//barra de progreso general
DrawProgress(1,1,200,20,64,m);
fprintf(tabla1,"%d\t",m);
fprintf(tabla2,"%d\t",m);
fprintf(tabla3,"%d\t",m);
sprintf(nombre,"c:\\tc\\fase\\%d.s2p",m);
f=fopen(nombre,"r");
if(f==NULL){
printf("\nEl archivo no existe.\n");
return;
}
else{
FileSize = filelength(f);
CarLeidos = 0;
while(!feof(f)){
fgets(cadena, 1000,f);
CarLeidos = CarLeidos + strlen(cadena);
//dibujando la barra de progreso de archivo
DrawProgress(1,30,200,20,FileSize,CarLeidos);
sscanf(cadena,"%lu",&frec);
if(frec==1201000000)fputs(cadena,tabla1);
if(frec==1300000000)fputs(cadena,tabla2);
if(frec==1399000000)fputs(cadena,tabla3);
}
}
fclose(f);
}
fclose(tabla1);
fclose(tabla2);
fclose(tabla3);
return;
}
26/10/2010 #14

Avatar de Meliklos

Respuesta: Como hago un entorno grafico programado en C
alberto lo pruebo y te digo

una dudilla....

tengo los parametros que decis...

void DrawProgress(long XPos,long YPos,long PWidth,long PHeight,
long Maximo,long Actual)

y en mi codigo serian:
#define CNT_ROW 5 //Counter in ProgressBar's --> Col position
#define CNT_COL 40 //Counter in ProgressBar's --> Row position

#define PROGRESS_X1 200//ProgressBar's --> Starting position
#define PROGRESS_X2 460//ProgressBar's --> Ending position

#define PROGRESS_Y1 55 //ProgressBar's --> Starting Height
#define PROGRESS_Y2 85 //ProgressBar's --> Ending Height

#define delayTime 50 //Speed of ProgressBar


cuales representan los que vos me decis??

se que tienen que ser el enganche con el proceso....pero me confuso en donde engancharlo...
maso menos sigo tus pasos alberto...del codigo que pusiste pero no va todavia...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.