Crear un punto de venta (4 de 10)

InicioAnteriorSiguienteFinal

Creación de una Librería de Clases (Dll)

El objetivo de este ejercicio es mostrar al alumno la manera de crear sus propias Librerías de Clases.
Nos ubicamos en la parte en donde dice Solution ‘proTienda_MATRICULA’ y con el botón derecho seleccionamos “Add>New Project...”



Creamos una librería de clase llamada Ticket:



Borramos la clase que nos ofrece por defecto:



Agregamos una nueva clase llamada mPrintDocument:



Antes de continuar, agregamos varias referencias al nuevo proyecto (utilizando el botón derecho del Mouse sobre “References”:



Una para System.Drawing





Y otra para System.Windows.Forms:

Nuestro proyecto quedará así:



Nota: en la imagen se muestran algunos formularios que aun no se han realizado. Éstos se desarrollarán posteriormente.

Agregamos las siguientes directivas using (únicamente si no están), para que quede mas o menos así:

using System.Drawing.Printing;
using System;
using System.Windows.Forms;
using System.Drawing;

namespace Ticket
{
class mPrintDocument
{
//Aqui irá todo el código
}
}


En la parte que dice “Aquí irá todo el código” poner lo siguiente:

//Aqui irá todo el código
/// <summary>
/// Punto de entrada de la clase
/// </summary>
/// <param name=prmText">Texto que será impreso</param>"
public mPrintDocument(string prmText){
//Constructor
InitializeComponent();
txtDocument.Text = prmText;
leftmargin = pdoc.DefaultPageSettings.Margins.Left;
topmargin = pdoc.DefaultPageSettings.Margins.Top;
}
private PrintDocument pdoc = new PrintDocument();
private TextBox txtDocument = new TextBox();
static int intCurrentChar;
private string text = "UAT-UAMCAV";
private int fontsize = 10;
private string fontname = "Courier New";
int leftmargin = 0;
int rightmargin = 0;
int topmargin = 0;
int bottommargin = 0;
protected void InitializeComponent(){
pdoc.PrintPage += new
PrintPageEventHandler(pDoc_PrintPage);
}

public string Text{
get{
return (text);
}
set{
text = value;
}
}
/// <summary>
/// Propiedad FontSize, Representa
/// el tamaño de la fuente
/// </summary>
/// <value>Representa el tamaño de la fuente</value>
public int FontSize{
set{
fontsize = value;
}
get{
return (fontsize);
}
}
/// <summary>
/// Propiedad FontName, Representa
/// el nombre de la fuente
/// </summary>
public string FontName{
set{
fontname = value;
}
get{
return (fontname);
}
}
/// <summary>
/// Representa la distancia entre el contenido
/// y el borde izquierdo de la página
/// </summary>
public int LeftMargin{
set{
leftmargin = value;
}
get{
return (leftmargin);
}
}

/// <summary>
/// Representa la distancia entre el contenido
/// y el borde derecho de la página
/// </summary>
public int RightMargin{
set{
rightmargin = value;
}
get{
return (rightmargin);
}
}
/// <summary>
/// Representa la distancia entre el contenido
/// y el borde superior de la página
/// </summary>
public int TopMargin{
set{
topmargin = value;
}
get{
return (topmargin);
}
}
/// <summary>
/// Representa la distancia entre el contenido y
/// el borde inferior de la página
/// </summary>
public int BottomMargin{
set{
bottommargin = value;
}
get{
return (bottommargin);
}
}
/// <summary>
/// Mostrar en pantalla
/// </summary>
public void PrintPreview(){
PrintPreviewDialog ppd = new PrintPreviewDialog();
try{
ppd.Document = pdoc;
ppd.ShowDialog();
}
catch{
MessageBox.Show("Error al intentar cargar " +
"la vista preeliminar el documento", this.Text,
MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

/// <summary>
/// Mandar directamente a la impresora
/// </summary>
public void Print(){
PrintDialog dialog = new PrintDialog();
dialog.Document = pdoc;
if (dialog.ShowDialog() == DialogResult.OK){
pdoc.Print();
}
}
void pDoc_PrintPage(object sender, PrintPageEventArgs e){
Font font = new Font(fontname, fontsize);
int intPrintAreaHeight;
int intPrintAreaWidth;
intPrintAreaHeight = pdoc.DefaultPageSettings.PaperSize.Height -
pdoc.DefaultPageSettings.Margins.Top -
pdoc.DefaultPageSettings.Margins.Bottom;
intPrintAreaWidth = pdoc.DefaultPageSettings.PaperSize.Width -
pdoc.DefaultPageSettings.Margins.Left -
pdoc.DefaultPageSettings.Margins.Right;
if (pdoc.DefaultPageSettings.Landscape){
int intTemp = intPrintAreaHeight;
intPrintAreaHeight = intPrintAreaWidth;
intPrintAreaWidth = intTemp;
}
int intLineCount = (int)(intPrintAreaHeight / font.Height);
RectangleF rectPrintingArea = new RectangleF(leftmargin, topmargin,
intPrintAreaWidth, intPrintAreaHeight);
StringFormat fmt = new StringFormat(StringFormatFlags.LineLimit);
int intLinesFilled;
int intCharsFitted;
e.Graphics.MeasureString(txtDocument.Text.Substring(intCurrentChar), font,
new SizeF(intPrintAreaWidth, intPrintAreaHeight), fmt,
out intCharsFitted, out intLinesFilled);
e.Graphics.DrawString(txtDocument.Text.Substring(intCurrentChar), font,
Brushes.Black, rectPrintingArea, fmt);
intCurrentChar += intCharsFitted;
if (intCurrentChar < (txtDocument.Text.Length - 1)){
e.HasMorePages = true;
}
else{
e.HasMorePages = false;
intCurrentChar = 0;
}
}


Una vez terminado lo anterior, nos vamos donde dice “proTienda_MATRICULA” y, con el botón derecho del mouse, seleccionamos “Add Reference…” como se muestra a continuación:



Nos vamos a la pestaña “Projects” y seleccionamos “Ticket”



Le damos OK.

Nuestro proyecto, finalmente quedará así:



El objetivo principal de la Librería Ticket es poder mandar a la pantalla el ticket correspondiente a la venta, pero en realidad se podrá imprimir prácticamente cualquier texto. En el ejercicio 5 podremos comprobarlo.

Suerte ...

5 comentarios:

  1. muchas gracias de nuevo tengo una duda sobre el anterios ejercicios de administracion de usuarios cuando creo el ususario solo me crea uno solo vuelvo a crear y me crea una encima me refiero para permisos de usuarios cual es el error que estoy cometiendo gracias...
    richardt_2000@hotmail.com

    ResponderEliminar
  2. Hola me sale este erro al mandar a imprimir el ticket en el metodo generar ticket

    Especific sast is not valid me podrias ayudar.

    ResponderEliminar
  3. Alguien me podria facilitar la base de datos??

    S_Juanito@outlook.com

    ResponderEliminar
  4. Alguien me podria facilitar la base de datos??
    leurysacevedo@hotmail.com

    ResponderEliminar
  5. Alguien me podría facilitar la base de datos??

    masoriaj@gmail.com

    ResponderEliminar