printer.Canvas.TextOut(x,y,text)
bu komutta bildiğiniz gibi x ve y pixel cinsinden ve printer değiştiğinde yazının kağıt üzerindeki yeride değişiyor.
vusual basicde Printer.ScaleMode = 6 komutunu verdiğinizde x ve y'yi mm olarak ifade edebiliyorsunuz. aynı işlemi delphide nasıl yapabilirim
yazıcıda koordinat sorunu
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Selam..
- Bir daha teyid eder misiniz ? Çünkü burada printer değişmesi yazının kağıt üzerindeki yerine etki etmez...
- Sadece printer kağıt tray ayarlarında (mesela HP lazer yazıcıda sağdan soldan sıkıştırarak ortalayan bir sistem var) gibi bir durum vardır diye düşünüyorum... Yani kağıt yerleştirmedeki farklılıktan dolayı kayma olur diye değerlendirdim...
- Bazı yazıcılarda veya FinePrint gibi yazıcı önbellekleme arabirim driver/programlarında da özel marjin ayarları yapılabiliryor... Bunları bir kontrol edip tekrar bilgi verirseniz seviniriz...
- Bir daha teyid eder misiniz ? Çünkü burada printer değişmesi yazının kağıt üzerindeki yerine etki etmez...
- Sadece printer kağıt tray ayarlarında (mesela HP lazer yazıcıda sağdan soldan sıkıştırarak ortalayan bir sistem var) gibi bir durum vardır diye düşünüyorum... Yani kağıt yerleştirmedeki farklılıktan dolayı kayma olur diye değerlendirdim...
- Bazı yazıcılarda veya FinePrint gibi yazıcı önbellekleme arabirim driver/programlarında da özel marjin ayarları yapılabiliryor... Bunları bir kontrol edip tekrar bilgi verirseniz seviniriz...
size bu mesajı yazdıktan sonra bu sorunu çözdüm. neyazıkki değişiyor deneyle sabittir. hatta printer değişmese sadece drive değişse bile yazının kağıda basıldığı yer değişiyor.
benzer sorunla karşılaşanlar için pixel mm çeviren kodu aşağıda veriyorum. Bu kodla küçük bir yuvarlama hatası dıında doğru sonuç veriyor
uses printers,math;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
dikeyMM, yatayMM,dikeyPix,yatayPix: Integer;
dikey,yatay:integer; // pixeli mm çeviren çarpanlar
mmx, mmy: Extended;
begin
Printer.BeginDoc;
mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
dikeyMM := Trunc(mmy) ;
yatayMM := Trunc(mmx) ;
dikeyPix:=printer.PageHeight;
yatayPix:=printer.PageWidth;
dikey:=floor(dikeyPix/dikeyMM+0.5);
yatay:=floor(yatayPix/yatayMM+0.5);
Printer.Canvas.TextOut(80*yatay,20*dikey, 'deneme1');
Printer.Canvas.TextOut(80*yatay,100*dikey, 'denem2');
printer.EndDoc;
end;
benzer sorunla karşılaşanlar için pixel mm çeviren kodu aşağıda veriyorum. Bu kodla küçük bir yuvarlama hatası dıında doğru sonuç veriyor
uses printers,math;
{$R *.dfm}
procedure TForm1.BitBtn1Click(Sender: TObject);
var
dikeyMM, yatayMM,dikeyPix,yatayPix: Integer;
dikey,yatay:integer; // pixeli mm çeviren çarpanlar
mmx, mmy: Extended;
begin
Printer.BeginDoc;
mmx := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALWIDTH) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSX) * 25.4;
mmy := GetDeviceCaps(Printer.Canvas.Handle, PHYSICALHEIGHT) /
GetDeviceCaps(Printer.Canvas.Handle, LOGPIXELSY) * 25.4;
dikeyMM := Trunc(mmy) ;
yatayMM := Trunc(mmx) ;
dikeyPix:=printer.PageHeight;
yatayPix:=printer.PageWidth;
dikey:=floor(dikeyPix/dikeyMM+0.5);
yatay:=floor(yatayPix/yatayMM+0.5);
Printer.Canvas.TextOut(80*yatay,20*dikey, 'deneme1');
Printer.Canvas.TextOut(80*yatay,100*dikey, 'denem2');
printer.EndDoc;
end;
- Bu garip durumu ve çözümü bizimle paylaştığın için teşekkürler...
- Çalışmalarında başarılar dilerim...
- Ek :
Delphi'nin Helpinden gördüğüm kadarıyla şunları da eklemekte fayda var...
LOGPIXELSX : Inch başına düşen yatay nokta sayısı. (Number of pixels per logical inch along the screen width.)
LOGPIXELSY : Inch başına düşen dikey nokta sayısı. (Number of pixels per logical inch along the screen height.)
PHYSICALWIDTH : Yazıcı için: Fiziksel sayfa genişliği. Not: Fiziksel sayfa hemen her zaman yazdırılabilir bölgeden büyük olur. (For printing devices: the width of the physical page, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper has a physical width value of 5100 device units. Note that the physical page is almost always greater than the printable area of the page, and never smaller. )
PHYSICALHEIGHT : Yazıcı için: Fiziksel sayfa yüksekliği. Not: Fiziksel sayfa hemen her zaman yazdırılabilir bölgeden büyük olur. (For printing devices: the height of the physical page, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper has a physical height value of 6600 device units. Note that the physical page is almost always greater than the printable area of the page, and never smaller.)
PHYSICALOFFSETX : Yazıcı için: Fiziksel sayfanın solundan, yazdırılabilir bölgenin soluna kadar olan mesafe. (For printing devices: the distance from the left edge of the physical page to the left edge of the printable area, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper, that cannot print on the leftmost 0.25" of paper, has a horizontal physical offset of 150 device units. )
PHYSICALOFFSETY : Yazıcı için: Fiziksel sayfanın en tepesinden, yazdırılabilir bölgenin tepesine kadar olan mesafe. (For printing devices: the distance from the top edge of the physical page to the top edge of the printable area, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper, that cannot print on the topmost 0.5" of paper, has a vertical physical offset of 300 device units.)
- Çalışmalarında başarılar dilerim...
- Ek :
Delphi'nin Helpinden gördüğüm kadarıyla şunları da eklemekte fayda var...
LOGPIXELSX : Inch başına düşen yatay nokta sayısı. (Number of pixels per logical inch along the screen width.)
LOGPIXELSY : Inch başına düşen dikey nokta sayısı. (Number of pixels per logical inch along the screen height.)
PHYSICALWIDTH : Yazıcı için: Fiziksel sayfa genişliği. Not: Fiziksel sayfa hemen her zaman yazdırılabilir bölgeden büyük olur. (For printing devices: the width of the physical page, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper has a physical width value of 5100 device units. Note that the physical page is almost always greater than the printable area of the page, and never smaller. )
PHYSICALHEIGHT : Yazıcı için: Fiziksel sayfa yüksekliği. Not: Fiziksel sayfa hemen her zaman yazdırılabilir bölgeden büyük olur. (For printing devices: the height of the physical page, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper has a physical height value of 6600 device units. Note that the physical page is almost always greater than the printable area of the page, and never smaller.)
PHYSICALOFFSETX : Yazıcı için: Fiziksel sayfanın solundan, yazdırılabilir bölgenin soluna kadar olan mesafe. (For printing devices: the distance from the left edge of the physical page to the left edge of the printable area, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper, that cannot print on the leftmost 0.25" of paper, has a horizontal physical offset of 150 device units. )
PHYSICALOFFSETY : Yazıcı için: Fiziksel sayfanın en tepesinden, yazdırılabilir bölgenin tepesine kadar olan mesafe. (For printing devices: the distance from the top edge of the physical page to the top edge of the printable area, in device units. For example, a printer set to print at 600 dpi on 8.5"x11" paper, that cannot print on the topmost 0.5" of paper, has a vertical physical offset of 300 device units.)