to:delhpi
多谢delphi,现在我用的是专用条码纸,间隙2mm,纸张最小高度为9mm,利用打印机配的软件打印没有问题,因为配套软件功能不能满足我们的要求,所以要通过程序来打,以下程式:
WITH PRINTERdo
begin
ScaleX := GetDeviceCaps(Handle, logPixelsX) div PixelsPerInch;
ScaleY := GetDeviceCaps(Handle, logPixelsY) div PixelsPerInch;
//showmessage(inttostr(ScaleX));
//SetPaperHeight(10);
//SetPaperWidth(90);
SetPaperSize(220,90);
//printer.Printers.IndexOfName(1);
Printer.begin
Doc;
for i:=0 to 3do
begin
Printer.Canvas.StretchDraw(Rect(i*22*ScaleX*3+interval*(i+1), 0,(22*ScaleX*3+interval)*(I+1),9*ScaleY*3), bitmap);
end;
Printer.EndDoc;
end;
//
------------------------------
procedure TMainForm.SetPaperSize(X, Y: Integer);
var
Device: array[0..255] of char;
Driver: array[0..255] of char;
Port: array[0..255] of char;
hDMode: THandle;
PDMode: PDEVMODE;
begin
Printer.PrinterIndex := Printer.PrinterIndex;
Printer.GetPrinter(Device, Driver, Port, hDMode);
if hDMode <> 0 then
begin
pDMode := GlobalLock(hDMode);
if pDMode <> nil then
begin
if (x = 0) or (y = 0) then
begin
{设置合法的纸张大小}
pDMode^.dmFields := pDMode^.dmFields or dm_PaperSize;
pDMode^.dmPaperSize := DMPAPER_FANFOLD_US;
// 合法的纸张大小标示
end
else
begin
{设置用户自定义纸张}
pDMode^.dmFields := pDMode^.dmFields or DM_PAPERSIZE or DM_PAPERWIDTH or DM_PAPERLENGTH;
pDMode^.dmPaperSize := DMPAPER_USER;
// 设置为用户自定义纸张标示
pDMode^.dmPaperWidth := x;
// 纸张宽度
pDMode^.dmPaperLength := y;
// 纸张长度
end;
{设定纸张来源}
pDMode^.dmFields := pDMode^.dmFields or DMBIN_MANUAL;
pDMode^.dmDefaultSource := DMBIN_MANUAL;
GlobalUnlock(hDMode);
end;
end;
end;
发现这与什么不设直接输出没有什么差别,还是多空跑几行纸,要再试我又要重新探测纸张
但是我问过厂商,他们说可以用自定义纸张,不过他发给我的东西没有什么用,我还得找他们:
----------
另外,换标签后,请先做纸张探测再打印!!!
用API函数:
DWORD DeviceCapabilities(
LPCTSTR pDevice, // pointer to a printer-name string
LPCTSTR pPort, // pointer to a port-name string
WORD fwCapability, // device capability to query
LPTSTR pOutput, // pointer to the output
CONST DEVMODE *pDevMode // pointer to structure with device data
);
具体用法看帮助,下面是个Delphi的调用:
var
szDeviceName: String;
szPort: String;
dwPapers: DWord;
lpwPapers: array[0..255] of Word;
...
begin
...
//取打印机支持的全部纸型,存储在数组lpwPapers中
dwPapers:=DeviceCapabilities(PChar(szDeviceName),
PChar(szPort),DC_PAPERS,@lpwPapers,nil);
if (dwPapers<1)or(dwPapers>256) then
ShowMessage('Error');
//判断打印机是否支持自定义、A3、A4、B5纸型
while (dwPapers > 0) do
begin
case DWORD(lpwPapers[dwPapers]) of
DMPAPER_USER: ShowMessage('自定义');
DMPAPER_A3: ShowMessage('A3');
DMPAPER_A4: ShowMessage('A4');
DMPAPER_B5: ShowMessage('B5');
end;
dwPapers:=dwPapers-1;
end;
---------
昨天我想先把图片转成PCX格式再用打印机的API来输出,但是发现什么也没印出来,他们周一才能给我答复,请帮帮忙,
不过我没有用过godex2100,
对于你所说的碳带,我在深圳,不知你们买的是什么价格,型号是什么。