用delphi6.0中如何定位打印。例如:我想在第一行9厘米的地方打印“11”,在13厘米的地方打印“22”,在第二行6厘米的地方打印“33”,18厘米的地方打印“44”,这样该如何解决。请大家指教。
解决方案 »
- 哥发的不是分,是寂寞
- 怎么实现登录网页?
- 十六进制的几个数 $30 $23 $23 $45 $21 $24 $40 使用什么方法能把这些数据存成常量, 最好能存成字符串或者是字符数组.
- crpe控件连接不上数据库有哪些原因?
- 5000人民币招程序员,送:传奇木马原代码
- 谁用xpmenu控件
- 为什么我在我的机子上编译的EXE文件在有些机子上不能运行
- 我的excel中的数据导入进access再转换成interbase的数据库,进行控制?
- 有谁知道代码大全
- 关于ReceiveBuf
- 急:为什么delphi6.0的ClientSocket在WIN98下不能访问远程的服务器?
- 求stringGrid控件的详细用法????????????????????????????????????
unit AJCPrntW;{$F+,O+,S-}interfaceuses WinTypes, WinProcs, OPrinter;type
PAJCPrinter = ^TAJCPrinter;
TAJCPrinter = object(TPrinter)
function SetPageOrientation(Orientation: Integer): Integer; virtual;
function SetPageSize(PageID, NewLength, NewWidth : Integer) : Integer; virtual;
end;const
pm_Size = 1;
pm_Print = 2;type
PAJCPrintOut = ^TAJCPrintOut;
TAJCPrintOut = object(TPrintOut)
VUnitsPerInch: Integer;
HUnitsPerInch: Integer;
LMarginUnits: Integer;
TMarginUnits: Integer;
RMarginUnits: Integer;
BMarginUnits: Integer;
OriginalAlignmentOptions: Word;
constructor Init(ATitle: PChar);
destructor Done; virtual;
procedure SetPrintParams(ADC: HDC; ASize: TPoint); virtual;
function VLogPos(Pos: Integer): Integer; virtual;
function HLogPos(Pos: Integer): Integer; virtual;
function VInches(Inches: Real): Integer; virtual;
function HInches(Inches: Real): Integer; virtual;
function Points(APoints: Integer): Integer; virtual;
function PrintHeader(Mode, Page: Word): Integer; virtual;
function PrintFooter(Mode, Page: Word): Integer; virtual;
procedure JustifyLeft;
procedure JustifyCenter;
procedure JustifyRight;
end;var
DevModeOut, DevModeIn : PDevMode;implementationfunction TAJCPrinter.SetPageOrientation(Orientation: Integer): Integer;
var
DevMode: PDevMode;
Result: Integer;
begin
SetPageOrientation := -1;
if (Orientation <> dmOrient_Portrait) and
(Orientation <> dmOrient_Landscape) then
exit;
if @ExtDeviceMode = nil then exit;
if DevSettings^.dmFields or dm_Orientation = 0 then exit; if DevSettings^.dmOrientation = Orientation then
begin
SetPageOrientation := 1;
exit;
end; GetMem(DevMode, DevSettingSize);
Move(DevSettings^, DevMode^, DevSettingSize);
DevMode^.dmOrientation := Orientation;
Result := ExtDeviceMode(0, DeviceModule, DevSettings^, Device, Port,
DevMode^, nil, dm_In_Buffer or dm_Out_Buffer);
FreeMem(DevMode, DevSettingSize);
if Result = IDOK then
SetPageOrientation := 0;
end;function TAJCPrinter.SetPageSize(PageID, NewLength, NewWidth : Integer): Integer;
var
DevModeIn: PDevMode;
Result: Integer;
Size : Integer;
begin
SetPageSize := -1;
if @ExtDeviceMode = nil then exit;
GetMem(DevModeIn, DevSettingSize);
Result := ExtDeviceMode(0, DeviceModule, DevSettings^, Device, Port,
DevModeIn^, nil, dm_Out_Buffer);
DevModeIn^.dmDeviceName := DevSettings^.dmDeviceName;
DevModeIn^.dmSpecVersion := DevSettings^.dmSpecVersion;
DevModeIn^.dmDriverVersion := 0;
DevModeIn^.dmFields := dm_PaperSize or dm_Paperlength or dm_PaperWidth;
DevModeIn^.dmPaperSize := PageId {eg dmPaper_User, dmPaper_Letter};
DevModeIn^.dmPaperLength := NewLength; {in 1/10 of millimeters}
DevModeIn^.dmPaperWidth := NewWidth {in 1/10 of millimeters};
Result := ExtDeviceMode(0, DeviceModule, DevSettings^, Device, Port,
DevModeIn^, nil, dm_In_Buffer or dm_Out_Buffer);
FreeMem(DevModeIn, DevModeIn^.dmSize + DevModeIn^.dmDriverExtra);
if Result = IDOK then
SetPageSize := 0;
end;constructor TAJCPrintOut.Init(ATitle: PChar);
begin
inherited Init(ATitle);
OriginalAlignmentOptions := 0;
end;destructor TAJCPrintOut.Done;
begin
if OriginalAlignmentOptions <> 0 then
SetTextAlign(DC, OriginalAlignmentOptions); inherited Done;
end;procedure TAJCPrintOut.SetPrintParams(ADC: HDC; ASize: TPoint);
var
lpOffset, lpDimensions : TPoint;
begin
inherited SetPrintParams(ADC, ASize); OriginalAlignmentOptions := GetTextAlign(DC); VUnitsPerInch := GetDeviceCaps(DC, LogPixelsY);
HUnitsPerInch := GetDeviceCaps(DC, LogPixelsX); Escape(DC, GetPhysPageSize, 0, nil, @lpDimensions);
Escape(DC, GetPrintingOffset, 0, nil, @lpOffset); TMarginUnits := lpOffset.Y;
LMarginUnits := lpOffset.X;
BMarginUnits := (lpDimensions.Y - (Size.Y+lpOffset.Y));
RMarginUnits := (lpDimensions.X - (Size.X+lpOffset.X));
end;function TAJCPrintOut.VLogPos(Pos: Integer): Integer;
begin
if Pos < 0 then
VLogPos := Size.Y + Pos + TMarginUnits
else
VLogPos := Pos - TMarginUnits;
end;
function TAJCPrintOut.HLogPos(Pos: Integer): Integer;
begin
if Pos < 0 then
HLogPos := Size.X + Pos + LMarginUnits
else
HLogPos := Pos - LMarginUnits;
end;function TAJCPrintOut.VInches(Inches: Real): Integer;
begin
VInches := round(Inches * VUnitsPerInch);
end;function TAJCPrintOut.HInches(Inches: Real): Integer;
begin
HInches := round(Inches * HUnitsPerInch);
end;function TAJCPrintOut.Points(APoints: Integer): Integer;
begin
Points := APoints * (VUnitsPerInch) div 72;
end;function TAJCPrintOut.PrintHeader(Mode, Page: Word): Integer;
begin
PrintHeader := 0;
end;function TAJCPrintOut.PrintFooter(Mode, Page: Word): Integer;
begin
PrintFooter := 0;
end;procedure TAJCPrintOut.JustifyLeft;
var
AlignmentOptions: Word;
begin
AlignmentOptions := GetTextAlign(DC);
AlignmentOptions := AlignmentOptions and not (ta_left or ta_center or ta_right);
AlignmentOptions := AlignmentOptions or ta_left;
SetTextAlign(DC, AlignmentOptions);
end;procedure TAJCPrintOut.JustifyCenter;
var
AlignmentOptions: Word;
begin
AlignmentOptions := GetTextAlign(DC);
AlignmentOptions := AlignmentOptions and not (ta_left or ta_center or ta_right);
AlignmentOptions := AlignmentOptions or ta_center;
SetTextAlign(DC, AlignmentOptions);
end;procedure TAJCPrintOut.JustifyRight;
var
AlignmentOptions: Word;
begin
AlignmentOptions := GetTextAlign(DC);
AlignmentOptions := AlignmentOptions and not (ta_left or ta_center or ta_right);
AlignmentOptions := AlignmentOptions or ta_right;
SetTextAlign(DC, AlignmentOptions);
end;
begin
end.