yazıcıda koordinat sorunu

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

yazıcıda koordinat sorunu

Mesaj gönderen celalatak »

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
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

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...
Resim
Resim ....Resim
celalatak
Üye
Mesajlar: 70
Kayıt: 27 Şub 2004 12:41

Mesaj gönderen celalatak »

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;
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4740
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Bu garip durumu ve çözümü bizimle paylaştığın için teşekkürler... :)

- Çalışmalarında başarılar dilerim...

- Ek : :idea:

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.)
Resim
Resim ....Resim
Cevapla