/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

utilizar la impresora, algo q 100pre kise saber...

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
spesmod



Registrado: 23 Ago 2007
Mensajes: 33

MensajePublicado: 01/09/2007 1:11 pm
Título: utilizar la impresora, algo q 100pre kise saber...

hola nunca me puede enterar de que funcion(es) debo utilizar para hacer un redireccionamiento del buffer (creo que asi se llama) y lograr utilizar la impresora,. osea lo que quiero es saber como imprimir un mensaje, fichero o cualquier caracter en un papel.
me entere de que se puede redirecionar la salida hacia otro fichero, pero no se como caraxo utilizar la #@*!$& impresora.
quiero imprimir lo que se me de la gana!!!
utilizo el Borlanc c++ v 3.1 ojala aklguien me de una respuesta... xf!!! como le hago? se supone que con el C puedo utilizar todos y cada uno de los dispositivos de entrada y salidad del ordenador. alguna respuesta???
gracias-
_________________
|--A--Q--U--A--|
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 01/09/2007 5:11 pm
Título:

Hola

Claro que con C puedes utilizar todos y cada uno de los dispositivos de entrada y salida del ordenador, pero con el ANSI C solo sería muy difícil hacerlo -creo-, deberías utilizar las funciones propias de tu S.O. (como el Win32API) o compilador para utilizar la impresora, sino alguna librería adicional que maneje los puertos serie/paralelo/USB. Hasta donde yo sé, ésto sería más fácil hacerlo con C++:

Mira esto: http://www.programacionenc.net/modules.php?name=faq&af_op=ShowDetail&id=10#10

Un saludo
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 01/09/2007 5:17 pm
Título:

Pregunto: Cómo sería éste código en CConfused

Código:

#include <windows.h>
#include <fstream>
#include <string>
#include <iostream>

using namespace std;

void Outtextxy(HDC hdc,int x,int y,LPCSTR Msg)
{
 TextOut(hdc,x,y,Msg,lstrlen(Msg));
}

void ShowError(LPCSTR strMsg)
{
  MessageBox (NULL,TEXT(strMsg),"Imprimir",MB_ICONERROR);
  exit(1);
}

void PrintFile(ifstream& f)
{
  PRINTDLG   pd;
  DOCINFO   di;
  string strLine;
  int y=300;
 
  memset (&pd, 0, sizeof(PRINTDLG));
  memset (&di, 0, sizeof(DOCINFO));

  di.cbSize = sizeof(DOCINFO);
  di.lpszDocName = "Imprimiendo";

  pd.lStructSize = sizeof(PRINTDLG);
  pd.Flags = PD_PAGENUMS | PD_RETURNDC;
  pd.nFromPage = 1;
  pd.nToPage = 1;
  pd.nMinPage = 1;
  pd.nMaxPage = 0xFFFF;
  //pd.hwndOwner   = hWnd;
 
  if(f.fail())
   ShowError("Error el archivo no se pudo abrir para lectura");             
 
 if (PrintDlg (&pd)){
  if (pd.hDC){
   if (StartDoc (pd.hDC, &di) != SP_ERROR){       
      cout << "Imprimiendo...\nEspere un momento" << endl;
      StartPage (pd.hDC);   
      while(!f.eof()){
          getline(f,strLine);
          Outtextxy(pd.hDC,500,y,strLine.c_str());
         y+=100;
      }         
      EndPage (pd.hDC);
      EndDoc (pd.hDC);   
                   
   }
   else{       
      ShowError("Error: No se pudo comenzar a imprimir.");
   }
  }
  else{     
     ShowError("Error: No se pudo crear el contexto de dispositivo");
  }
 }
 else{   
   MessageBox (NULL,TEXT("Error: Se cancelo la impresion"),"Imprimir",MB_ICONINFORMATION);
 }
 MessageBox (NULL,TEXT("Termino la impresion correctamente."),"Imprimir",MB_ICONINFORMATION);       
 
}

int main()
{
 ifstream in("texto.txt");
 PrintFile(in);
 in.close();
 return 0;
}


Confused
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 01/09/2007 5:46 pm
Título:

spesmod escribió:
se supone que con el C puedo utilizar todos y cada uno de los dispositivos de entrada y salidad del ordenador

Solo con C estandar no es posible ya que este solo define streams (o flujos) predeterminados para la entrada (stdin), salida (stdout) y salida de errores (stderr).

Algunos compiladores permiten el acceso a una impresora mediante extensiones como stdprn o nombres especiales de archivo pero como se acceda exactamente a la impresora depende de lo que diga la documentacion del compilador.

Y para pasar el codigo de digies de C++ a C solo hay que cambiar los headers y sustituir el uso de un "input file stream" y sus metodos por un objeto (lease variable) de tipo "FILE *" y las funciones ferror, feof (mala opcion), etc.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
spesmod



Registrado: 23 Ago 2007
Mensajes: 33

MensajePublicado: 02/09/2007 7:03 am
Título:

ok gracias pero existe o bueno podrian escribir el codigo en c(ansi) de una pequeña impresion en la impresora algo pequeño tal vez la estupida frase "hola mundo", quizas sea (si existira):

printprinter("hola mundo");

o algo asi, no se tal vez sea una o mas instrucciones pero algo pequeño, o es mas complicado de lo que pienso¿?¿?¿?
_________________
|--A--Q--U--A--|
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 02/09/2007 12:06 pm
Título:

Este tema de usar la impresora en C y no en C++ también me interesa.

Como te dijimos: en ANSI C solamente NO lo puedes hacer.

Todas las implementaciones que encontré dando vueltas por ahí están hechas en C++ y no en C.

Por lo que entendí, rir3760 NO aconseja pasar ese código C++ (que coloqué) a C.

Pero no todo está perdido para C: Si quieres usar la impresora en C (y no en C++) utiliza el Win32API y problema solucionado. Pienso que es la forma más segura de hacerlo.

¿Cómo enviar datos a la impresora desde un programa C o C++?:


Un saludo. Surprised
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 3657
Ubicación: Mexico

MensajePublicado: 05/09/2007 4:11 pm
Título:

digies escribió:
Como te dijimos: en ANSI C solamente NO lo puedes hacer.

Exacto.

digies escribió:
Por lo que entendí, rir3760 NO aconseja pasar ese código C++ (que coloqué) a C.

Por lo visto no me explique bien. Con "mala opcion" no me referia al paso de C++ a C sino al uso de la funcion feof para controlar un bucle, en el codigo que se publico se controla un bucle mediante el metodo feof:
Código:
while (!f.eof()){
   getline(f,strLine);
   Outtextxy(pd.hDC,500,y,strLine.c_str());
   y+=100;
}

Si trataramos de traducirlo de una forma tan exacta como sea posible y utilizamos en C la funcion feof:
Código:
while (!feof(_el_stream)){

   ...

}

Seria un error ya que la ultima linea del archivo seria procesada dos veces ya que feof devuelve verdadero solo despues de que una funcion trate de leer datos del archivo y falle.

digies escribió:
Pero no todo está perdido para C: Si quieres usar la impresora en C (y no en C++) utiliza el Win32API y problema solucionado. Pienso que es la forma más segura de hacerlo.

¿Cómo enviar datos a la impresora desde un programa C o C++?:

A eso me referia con extensiones, el primer ejemplo de esa pagina:
Código:
#include <fstream>

using namespace std;

int main()
{
   ofstream impresora;
   impresora.open("LPT1");

   impresora << "Hola, mundo\f" << endl;
   impresora.close();
   return 0;
}


Trata de imprimir utilizando el nombre de archivo especial "LPT1" y como comente antes si esto funciona o no depende del compilador y plataforma que se utilize.

Un saludo
_________________
The capacity to learn is a gift;
The ability to learn is a skill;
The willingness to learn is a choice.
--
Rebec of Ginaz
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 05/09/2007 6:54 pm
Título:

Gracias rir3760

Un saludo.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com