FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour Detect Type of Printer whether DOT Matrix or Inkjet/Laser
Posts: 1335
Joined: Fri Jun 13, 2008 11:04 AM
Detect Type of Printer whether DOT Matrix or Inkjet/Laser
Posted: Tue Oct 28, 2008 04:51 AM

Hi All,

Is there a way I could determine if a printer is DOT Matrix (Text) or Laser/InkJet (Graphics) when a user select a printer especially from the print preview

My Intention :-

I want my users to select any printer while generating reports. If the user selects a DOT Matrix printer then I'll use TDosPrn.Prg to have a fast DOS mode printing to the LPT Port (without any graphics), If my users select an inkjet or laser printer then they get print out in graphics mode (much more neat with lines and grids etc). So the program behave little bit intelligently.

But for the above to happen, I should be able to identify the user selected printer is a DOT matrix or Inkjet/Laser

Regards

Anser

Posts: 1335
Joined: Fri Jun 13, 2008 11:04 AM
Detect Type of Printer whether DOT Matrix or Inkjet/Laser
Posted: Tue Oct 28, 2008 11:40 AM
Solution for my above post but it is in Delphi. Can anybody help me to convert the same to FWH

Delphi code to determine if a printer is a Dot-Matrix or Laser (or InkJet) ?


{$APPTYPE CONSOLE}
uses Windows, Printers, WinSpool, Variants;
{
 Using only API calls, determinate which type is the active printer:
 Dot-Matrix or Laser (or InkJet)
 
}

function IsPrinterMatrix: Boolean;
var
  DeviceMode: THandle;
  Device, Driver, Port: array [0..79] of Char;
  pDevice, pDriver, pPort: PChar;
begin

  // Determinate that active printer is a Dot-Marix
  Result:= False;
  pDevice := @Device;
  pDriver := @Driver;
  pPort   := @Port;

  Device  := #0;
  Driver  := #0;
  Port    := #0;

  Printer.GetPrinter(pDevice, pDriver, pPort, DeviceMode);

  // Printer can be dot-matrix when number of colors is maximum 16
  // and when printer is capable to print only for TRUETYPE
  // fonts as graphics (dot-matrix and PCL printers are capable for that).

  if (GetDeviceCaps(Printer.Handle,NUMCOLORS)<=16) and
     (DeviceCapabilities(pDevice, pPort,DC_TRUETYPE,nil,nil) = DCTT_BITMAP)
  then
    Result := True;
end;

begin
  writeln ('Active printer is ', Printer.Printers[Printer.PrinterIndex]);

  if IsPrinterMatrix then
    writeln('This is a Dot-Matrix printer')
  else
    writeln('This is a LaserJet or InkJet printer');
end.


Regards

Anser
Posts: 117
Joined: Mon Aug 13, 2007 05:22 PM
Detect Type of Printer whether DOT Matrix or Inkjet/Laser
Posted: Tue Oct 28, 2008 03:56 PM

Uma maneira de vc pegar isso como um paleativo é assim
IF(oPrn:nLogPixelX() <= 350,"JATO/LSER","MATRICIAL") // 1 é igual a JATO OU LASER e 2 matricial e 3 Arquivo

Marcelo Ferro da Silveira

Fwh14.04/xHarbour 1.2.3 Simplex / Bcc582 / Pelles 8

SqlLib /xMate/WS
Posts: 1335
Joined: Fri Jun 13, 2008 11:04 AM
Detect Type of Printer whether DOT Matrix or Inkjet/Laser
Posted: Wed Oct 29, 2008 06:33 AM
Thank you Mr.Marcelo Ferro

If oPrn:nLogPixelX() <= 350 then it is a Dot Matrix printer

	IF oPrn:nLogPixelX() <= 350
		MsgInfo("Dot Matrix  nLogPixel is "+str(oPrn:nLogPixelX()))
	else
		MsgInfo("InkJet/Laser nLogPixel is "+str(oPrn:nLogPixelX()))
	Endif


I checked the above code with different types of printers (Inkjet, Laser and Dot matrix) and I am getting the correct results to identify whether the selected printer is Dot Matrix or InkJet/Laser, eventhough there are differences in the pixels from one dot matrix to another dot matrix printer

Regards

------------------------------------------------------------------------------------

Obrigado Mr.Marcelo Ferro

Se oPrn: nLogPixelX () <= 350 então é uma impressora matricial

[code] IF oPrn: nLogPixelX () <= 350
MsgInfo ( "Dot Matrix nLogPixel é" + str (oPrn: nLogPixelX ()))
Diferente
MsgInfo ( "InkJet / Laser nLogPixel é" + str (oPrn: nLogPixelX ()))
Endif [/ code]

Eu chequei o código acima, com diferentes tipos de impressoras (Inkjet, Laser e Dot matriz) e estou obtendo os resultados corretos para identificar se a impressora está seleccionada Dot Matrix ou InkJet / Laser, apesar existem diferenças no pixels de uma matricial para outra impressora matricial

Atenciosamente

Anser
Posts: 117
Joined: Mon Aug 13, 2007 05:22 PM
Detect Type of Printer whether DOT Matrix or Inkjet/Laser
Posted: Wed Oct 29, 2008 04:04 PM

Ola Anser

Esta maneira q. te passei é somente um paliativo pos também não conheço nenhuma função no xHarbour q. faça isso q. vc quer

mas ela ainda apresenta problemas como por exemplo

JATO DE TINTA
EPSON STYLUS C79 em modo economico oPrn:nLogPixelX () = 120
e isso ira te trazer problemas

pos uma matricial
MATRICIAL
EPSON LX 300 oPrn:nLogPixelX () = 240 X 144 maior q. a jato de tintas

Seria muito interessante se o xHarbour tivesse uma função q. nos desse mesta informação seria muito util

Marcelo Ferro da Silveira

Fwh14.04/xHarbour 1.2.3 Simplex / Bcc582 / Pelles 8

SqlLib /xMate/WS

Continue the discussion