画布打印的问题,应该很多人都遇到过,请赐教,谢谢!

WangZWang 2006-06-07 05:18:09
var
DMode: PDevMode;
h: THandle;
Device, Drive, Port: PChar;
OldLeft: Integer;
begin
with Printer do
begin
Device := StrAlloc(255);
Drive := StrAlloc(255);
Port := StrAlloc(255);
GetPrinter(Device, Drive, Port, h);
DMode := LocalLock(h);
DMode.dmPaperSize := 256;
DMode.dmPaperLength := 2100;
DMode.dmPaperWidth := 2000;
LocalUnLock(h);
SetPrinter(Device, Drive, Port, h);
StrDispose(Device);
StrDispose(Drive);
StrDispose(Port);

BeginDoc;
OldLeft := MainPanel.Left;
MainPanel.Left := 1500;
try
MainPanel.ScaleBy(200, 100);
MainPanel.PaintTo(Handle, 30, 10);
MainPanel.ScaleBy(100, 200);
finally
MainPanel.Left := OldLeft;
end;
EndDoc;
end;
.................
end;
{ 以上代码实现Panel中打印,用针式打印机可以打印正常,但用喷墨,激光打印机
打印出来的内容就非常小,不是针式打印机打印出来的实际尺寸,请赐教,谢谢! }
...全文
331 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
WangZWang 2006-06-09
  • 打赏
  • 举报
回复
问题已经解决,产生原因有下面产生
MainPanel.ScaleBy(200*natio, 100*natio);
MainPanel.PaintTo(Handle, 30*natio, 10*natio);
MainPanel.ScaleBy(100*natio, 200*natio);
改为
MainPanel.ScaleBy(100*natio, 100);
MainPanel.PaintTo(Handle, 30*natio, 10*natio);
MainPanel.ScaleBy(100 , 100*natio);
WangZWang 2006-06-08
  • 打赏
  • 举报
回复
var
DMode: PDevMode;
h: THandle;
Device, Drive, Port: PChar;
OldLeft, pcdpi,prdpi,natio: Integer;
begin
with Printer do
begin
//------------------------------这段代码是不是在喷墨打印机上打有问题?
Device := StrAlloc(255);
Drive := StrAlloc(255);
Port := StrAlloc(255);
GetPrinter(Device, Drive, Port, h);
DMode := LocalLock(h);
DMode.dmPaperSize := 256;
DMode.dmPaperLength := 2100;
DMode.dmPaperWidth := 2000;
LocalUnLock(h);
SetPrinter(Device, Drive, Port, h);
StrDispose(Device);
StrDispose(Drive);
StrDispose(Port);
// -----------------------------------------------
BeginDoc;
//这里以x轴大小为例,还可以取得y的分辨率
{ --------------------------}
pcdpi:=getdevicecaps(getdc(0),LOGPIXELSX);
prdpi:=getdevicecaps(printer.handle,LOGPIXELSX);
natio:=round(prdpi/pcdpi);

OldLeft := MainPanel.Left *natio;
MainPanel.Left := 1500*natio;

try
MainPanel.ScaleBy(200*natio, 100*natio);
MainPanel.PaintTo(Handle, 30*natio, 10*natio);
MainPanel.ScaleBy(100*natio, 200*natio);
finally
MainPanel.Left := OldLeft*natio;
end;

EndDoc;
end;
end;


// 请高手提出一些建议呀,谢谢!
WangZWang 2006-06-08
  • 打赏
  • 举报
回复
绝对不是分辨率的问题,都一样。不要想其他原因。
就在同一台机子上,针式打印机打印的正常,而
喷墨打印机却非常的小,几乎看不见字体,请各位帮忙为谢。
zsr 2006-06-07
  • 打赏
  • 举报
回复
分辨率不一样,当然大小不一样。
内容概要:本文系统研究了基于雅可比伪逆迭代的双臂协同轨迹规划与跟踪误差收敛性问题,结合机械臂正向与逆向运动学建模、蒙特卡洛法分析工作空间、笛卡尔空间内的圆弧轨迹生成等关键技术,利用Matlab实现了双臂系统的协同控制与轨迹跟踪仿真。重点探讨了雅可比矩阵伪逆法在解决冗余自由度机械臂逆运动学问题中的应用,深入分析了轨迹跟踪过程中误差的收敛特性,并通过仿真实验验证了该方法在复杂任务场景下的有效性、稳定性与鲁棒性,为多臂机器人在工业自动化、精密操作等领域的协同作业提供了理论依据与技术支持。; 适合人群:具备机器人学、自动控制理论基础及Matlab编程能力的科研人员与工程技术人员,特别适合从事机械臂控制、轨迹规划、多机器人协同等方向的硕士、博士研究生及相关领域研究人员。; 使用场景及目标:①掌握基于雅可比伪逆法的机械臂逆运动学求解原理与实现方法;②理解双臂系统在笛卡尔空间中协同轨迹规划的机制;③分析并优化轨迹跟踪过程中的误差收敛性能;④为多机器人系统在复杂动态环境下的高精度协同控制提供算法设计与仿真验证支持。; 阅读建议:建议读者结合文中提供的Matlab代码进行实践操作,按照文档目录循序渐进地学习,重点关注算法实现细节、仿真参数设置与结果分析部分,同时可进一步探索将智能优化算法或深度学习方法引入轨迹规划与误差补偿的研究方向。

5,944

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧