Dicas - Informações da impressora

Uma dica bem interessante que mostra como mostrar informações de uma impressora.

Informações da impressora

 

Uma dica bem interessante que mostra como mostrar informações de uma impressora, confira as linhas do código abaixo.

 

uses Printers;

 

procedure GetDeviceSettings(DevCtrl: TRichEdit);

var

Sep: string;

//-----------------------------------------------

procedure MakeInt(S: string; key: Integer);

begin

S := UpperCase(S);

DevCtrl.Lines.Add(UpperCase(Format(' %36S = %d ',

[s, GetDeviceCaps(Printer.Handle, Key)])));

end;

//-----------------------------------------------

function StringToBits(S: string): string;

var

H: string;

i: Integer;

//-----------------------------------------------

function SubStr(C: Char): string;

begin

if c = '0' then SubStr := '0000';

if c = '1' then SubStr := '0001';

if c = '2' then SubStr := '0010';

if c = '3' then SubStr := '0011';

if c = '4' then SubStr := '0100';

if c = '5' then SubStr := '0101';

if c = '6' then SubStr := '0110';

if c = '7' then SubStr := '0111';

if c = '8' then SubStr := '1000';

if c = '9' then SubStr := '1001';

if c = 'A' then SubStr := '1010';

if c = 'B' then SubStr := '1011';

if c = 'C' then SubStr := '1100';

if c = 'D' then SubStr := '1101';

if c = 'E' then SubStr := '1110';

if c = 'F' then SubStr := '1111';

end;

//-----------------------------------------------

begin

StringToBits := '';

S := UpperCase(s);

H := '';

if Length(S) = 0 then Exit;

if Length(S) = 1 then S := '0000' + S;

if Length(S) = 2 then S := '000' + S;

if Length(S) = 3 then S := '00' + S;

if Length(S) = 4 then S := '0' + S;

for i := 1 to Length(s) do

H := H + ' ' + SubStr(S[i]);

StringToBits := H;

end;

//-----------------------------------------------

procedure MakeHex(S: string; key: Cardinal);

var

h: string;

begin

S := UpperCase(S);

h := Format('%X', [GetDeviceCaps(Printer.Handle, Key)]);

if Length(H) = 0 then Exit;

if Length(H) = 1 then H := '0000' + H;

if Length(H) = 2 then H := '000' + H;

if Length(H) = 3 then H := '00' + H;

if Length(H) = 4 then H := '0' + H;

DevCtrl.Lines.Add('');

DevCtrl.Lines.Add(SEP);

DevCtrl.Lines.Add('');

DevCtrl.Lines.Add(Format('%37S = Flags(%S) Key(%S)',

[s, h, StringToBits(H)]

));

// (( GetDeviceCaps(Printer.Handle,Key),

end;

//----------------------------------------------------

procedure MakeFlag(S: string; key, subKey: Cardinal);

var

i: Cardinal;

begin

S := UpperCase(S);

i := GetDeviceCaps(Printer.Handle, Key);

if i and SubKey <> 0 then

DevCtrl.Lines.Add(Format(' %34S = Flag(%4S) Key(%6D,%S)',

[s, 'ON ', SubKey, StringToBits(Format('%x', [SubKey]))]))

else

DevCtrl.Lines.Add(Format(' %34S = Flag(%4S) Key(%6D,%S)',

[s, 'OFF', SubKey, StringToBits(Format('%x', [SubKey]))]))

end;

//----------------------------------------------------

function TechnoToStr(i: Integer): string;

begin

TechnoToStr := '#ERROR# is Unknwon';

case i of

DT_PLOTTER: TechnoToStr := 'Vector Plotter';

DT_RASDISPLAY: TechnoToStr := 'Raster Display';

DT_RASPRINTER: TechnoToStr := 'Raster Printer';

DT_RASCAMERA: TechnoToStr := 'Raster Camera';

DT_CHARSTREAM: TechnoToStr := 'Character Stream';

DT_METAFILE: TechnoToStr := 'Metafile';

DT_DISPFILE: TechnoToStr := 'Display file';

end;

end;

 

//--Main Procedure

//----------------------------------------------------------

begin

DevCtrl.SetFocus;

DevCtrl.Visible := False;

if Printer.PrinterIndex < 0 then Exit;

// Device Organisation

try

 

if not (GetMapMode(Printer.Handle) = MM_TEXT) then

SetMapMode(Printer.Handle, MM_Text);

DevCtrl.Clear;

 

Sep := '______________________________________________________________________________________________';

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

DevCtrl.Lines.Add(' PRINTER : ' + Printer.Printers[Printer.PrinterIndex]);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

 

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

DevCtrl.Lines.Add(Format('%36S = %D', ['NUMBER Of COPIES', Printer.Copies]));

if Printer.Orientation = poLandscape then

DevCtrl.Lines.Add(Format('%36S = LANDSCAPE', ['ORIENTATION']));

if Printer.Orientation = poPortrait then

DevCtrl.Lines.Add(Format('%36S = PORTRAIT', ['ORIENTATION']));

 

 

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('DRIVERVERSION', DRIVERVERSION);

DevCtrl.Lines.Add(Format(' %36S = %S', ['TECHNOLOGY',

UpperCase(TechnoToStr(GetDeviceCaps(Printer.Handle, Technology)))]));

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('WIDTH [mm]', HORZSIZE);

MakeInt('HEIGHT [mm]', VERTSIZE);

MakeInt('WIDTH [pix]', HORZRES);

MakeInt('HEIGHT [pix]', VERTRES);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('Physical Width [pix]', PHYSICALWIDTH);

MakeInt('Physical Height[pix]', PHYSICALHEIGHT);

MakeInt('Physical Offset X [pix]', PHYSICALOFFSETX);

MakeInt('Physical Offset Y [pix]', PHYSICALOFFSETY);

MakeInt('SCALING FACTOR X', SCALINGFACTORX);

MakeInt('SCALING FACTOR Y', SCALINGFACTORY);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('horizontal [DPI]', LOGPIXELSX);

MakeInt('vertial [DPI]', LOGPIXELSY);

MakeInt('BITS PER PIXEL', BITSPIXEL);

MakeInt('COLOR PLANES', PLANES);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('NUMBER OF BRUSHES', NUMBRUSHES);

MakeInt('NUMBER OF PENS', NUMPENS);

MakeInt('NUMBER OF FONTS', NUMFONTS);

MakeInt('NUMBER OF COLORS', NUMCOLORS);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('ASPECT Ratio X [DPI]', ASPECTX);

MakeInt('ASPECT Ratio Y [DPI]', ASPECTY);

MakeInt('ASPECT Ratio XY [DPI]', ASPECTXY);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeInt('SIZE OF PALETTE', SIZEPALETTE);

MakeInt('RESERVED TO SYSTEM PALETTE **', NUMRESERVED);

MakeInt('ACTUAL RASTER RESOLUTION **', COLORRES);

DevCtrl.Lines.Add('');

DevCtrl.Lines.Add(' **...only true if KEY RASTERCAPS(RC_PALETTE)= ON');

MakeFlag('... KEY RASTERCAPS (RC_PALETTE)', RasterCaps, RC_PALETTE);

DevCtrl.Lines.Add('');

 

MakeHex('Clipping Capablities ', ClipCaps);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeFlag('No Support ', ClipCaps, CP_NONE);

MakeFlag('Support Rectangles', ClipCaps, CP_RECTANGLE);

MakeFlag('Support PolyRegion 32 Bit', ClipCaps, CP_REGION);

 

MakeHex('Raster Printing Flags ', RasterCaps);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeFlag('Support Bitmap Transfer', RasterCaps, RC_BITBLT);

MakeFlag('Support Banding', RasterCaps, RC_BANDING);

MakeFlag('Support Scaling', RasterCaps, RC_SCALING);

MakeFlag('Support Bitmaps > 64 kByte', RasterCaps, RC_BITMAP64);

MakeFlag('Support features of Win 2.0', RasterCaps, RC_GDI20_OUTPUT);

MakeFlag('Support Set~/GetDIBITS()', RasterCaps, RC_DI_BITMAP);

MakeFlag('Support Palette Devices', RasterCaps, RC_PALETTE);

MakeFlag('Support SetDIBitsToDevice()', RasterCaps, RC_DIBTODEV);

MakeFlag('Support Floodfill', RasterCaps, RC_FLOODFILL);

MakeFlag('Support StretchBlt()', RasterCaps, RC_STRETCHBLT);

MakeFlag('Support StretchBID()', RasterCaps, RC_STRETCHDIB);

MakeFlag('Support DIBS', RasterCaps, RC_DEVBITS);

 

MakeHex('Curve Printion Flages', CurveCaps);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeFlag('No Curve support', CurveCaps, CC_NONE);

MakeFlag('Support Circles', CurveCaps, CC_Circles);

MakeFlag('Support Pie', CurveCaps, CC_PIE);

MakeFlag('Support Arces', CurveCaps, CC_CHORD);

MakeFlag('Support Ellipses', CurveCaps, CC_ELLIPSEs);

MakeFlag('Support WIDE FRAMES', CurveCaps, CC_WIDE);

MakeFlag('Support STYLED FRAMES', CurveCaps, CC_STYLED);

MakeFlag('Support WIDE&STYLED FRAMES', CurveCaps, CC_WIDESTYLED);

MakeFlag('Support INTERIORS', CurveCaps, CC_INTERIORS);

MakeFlag('Support ROUNDRECT', CurveCaps, CC_ROUNDRECT);

 

MakeHex('Line & Polygon Printing Flags', LineCaps);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeFlag('No Line Support', LineCaps, LC_NONE);

MakeFlag('Support Polylines', LineCaps, LC_PolyLine);

MakeFlag('Support Marker', LineCaps, LC_Marker);

MakeFlag('Support PolyMarker', LineCaps, LC_PolyMarker);

MakeFlag('Support Wide Lines', LineCaps, LC_WIDE);

MakeFlag('Support STYLED Lines', LineCaps, LC_STYLED);

MakeFlag('Support WIDE&STYLED Lines', LineCaps, LC_WIDESTYLED);

MakeFlag('Support Lines Interiors', LineCaps, LC_INTERIORS);

 

MakeHex('Polygon (Areal) Printing Flags', POLYGONALCAPS);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeFlag('No Polygon Support', PolygonalCaps, PC_NONE);

MakeFlag('Filling Alternate Polygons', PolygonalCaps, PC_POLYGON);

MakeFlag('Drawing Rectangles', PolygonalCaps, PC_RECTANGLE);

MakeFlag('Filling Winding Polygons', PolygonalCaps, PC_WINDPOLYGON);

MakeFlag('Drawing Trapezoid (??Flag)', PolygonalCaps, PC_Trapezoid);

MakeFlag('Drawing a ScanLine', PolygonalCaps, PC_SCANLINE);

MakeFlag('Drawing Wide Border', PolygonalCaps, PC_WIDE);

MakeFlag('Drawing Styled Border', PolygonalCaps, PC_STYLED);

MakeFlag('Drawing WIDE&STYLED Border', PolygonalCaps, PC_WIDESTYLED);

MakeFlag('Drawing Interiors', PolygonalCaps, PC_INTERIORS);

 

MakeHex('Text Printing Flags', TEXTCAPS);

DevCtrl.Lines.Add(sep);

DevCtrl.Lines.Add('');

MakeFlag('Support Character Output Precision', TextCaps, TC_OP_CHARACTER);

MakeFlag('Support Stroke Output Precision', TextCaps, TC_OP_STROKE);

MakeFlag('Support Stroke Clip Precision', TextCaps, TC_CP_STROKE);

MakeFlag('Support 90° Character Rotation', TextCaps, TC_CR_90);

MakeFlag('Support any Character Rotaion', TextCaps, TC_CR_ANY);

MakeFlag('Support Character Scaling in X&Y', TextCaps, TC_SF_X_YINDEP);

MakeFlag('Support Character Scaling REAL', TextCaps, TC_SA_DOUBLE);

MakeFlag('Support Character Scaling RATIONAL', TextCaps, TC_SA_INTEGER);

MakeFlag('Support Character Scaling EXACT', TextCaps, TC_SA_CONTIN);

MakeFlag('Support Character Weight REAL', TextCaps, TC_EA_DOUBLE);

MakeFlag('Support Character Italic', TextCaps, TC_IA_ABLE);

MakeFlag('Support Character Underline', TextCaps, TC_UA_ABLE);

MakeFlag('Support Character Strikeout', TextCaps, TC_SO_ABLE);

MakeFlag('Support Character as RASTER FONT', TextCaps, TC_RA_ABLE);

MakeFlag('Support Character as VECTOR FONT', TextCaps, TC_VA_ABLE);

MakeFlag('Reserved Flag ???', TextCaps, TC_Reserved);

MakeFlag('DEVICE NOT USE a SCROLLBIT BLOCK ?', TextCaps, TC_SCROLLBLT);

DevCtrl.Lines.Insert(0, '..THE RESULTS ARE:');

except

// MessageDlg('The Current Printer is not valid ! ',

// mtError,[mbok],0);

Printer.PrinterIndex := -1;

DevCtrl.Lines.Add(' ! The Printer is not valid !');

end;

DevCtrl.Visible := True;

DevCtrl.SetFocus;

end;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

  GetDeviceSettings(richedit1);

end;

 

Veja a foto de uma aplicação utilizando a função acima:

 

Ebook exclusivo
Dê um upgrade no início da sua jornada. Crie sua conta grátis e baixe o e-book

Artigos relacionados