Ekrana sığmayan formda çıktı alma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
-
- Üye
- Mesajlar: 33
- Kayıt: 09 Ağu 2010 01:28
Ekrana sığmayan formda çıktı alma
Merhaba arkadaşlar
Benim 2-3 haftadır forumlarda dolaşıpta çözemediğim sorunum var, son çarem burası gibi gözüküyor. Benden eskiden A4 kağıdına yazdığımız, fabrikada kullandığımız talimatı delphide yazmamı istediler ve yazıcıya çıktı alalım dediler. Ben programı yazdım fakat ne yaptımsa ekrana sığdıramadım, formun auotoscrol özelliği ile sayfayı yukarı aşağı gösteriyorum fakat, yazıcıya çıktı gönderirken form1.print koduyla yolluyorum ve formda ekrana tam olarak sığmadığından bi 4-5 cm lik aşağıda kalan yazılar çıkmıyor. Bununla ilgili nasıl bi yöntem uygulamam gerekir. Quick report demeyin, çok karışık geldi bana. Başka bir yolu yokmu bunun. Yardımlarınız için şimdiden çok teşekkür ederim.
Benim 2-3 haftadır forumlarda dolaşıpta çözemediğim sorunum var, son çarem burası gibi gözüküyor. Benden eskiden A4 kağıdına yazdığımız, fabrikada kullandığımız talimatı delphide yazmamı istediler ve yazıcıya çıktı alalım dediler. Ben programı yazdım fakat ne yaptımsa ekrana sığdıramadım, formun auotoscrol özelliği ile sayfayı yukarı aşağı gösteriyorum fakat, yazıcıya çıktı gönderirken form1.print koduyla yolluyorum ve formda ekrana tam olarak sığmadığından bi 4-5 cm lik aşağıda kalan yazılar çıkmıyor. Bununla ilgili nasıl bi yöntem uygulamam gerekir. Quick report demeyin, çok karışık geldi bana. Başka bir yolu yokmu bunun. Yardımlarınız için şimdiden çok teşekkür ederim.
-
- Üye
- Mesajlar: 33
- Kayıt: 09 Ağu 2010 01:28
Re: Ekrana sığmayan formda çıktı alma
Şöle bi durum var, 1280 x 1024 ve 1440 x 900 ekran çözünürlüğünde 17'' lik bir monitörde çıktı gönderebiliyorum, çünkü zaten benim form o çözünürlüklerde iyice küçülüyo bende sayfanınsağ alt köşesinden tutup çektiğim zaman form altlı üstlü tam geliyor çıktı gönderdiğimde kağıda tam oalrak sığıyor.
Re: Ekrana sığmayan formda çıktı alma
formun kendisini mi yazdırıyorsunuz ? Bir liste mi yoksa form içindeki bir texti mi ? Bunları belirtin farklı çözümler gelebilir...Eğer bir Memo içinde bir yazı ise veya bir grid halinde liste ise ona göre kodlar yazılır...
Re: Ekrana sığmayan formda çıktı alma
s.a.
raporlama bileşenlerinden birini kullanmayı deneyin.
raporlama bileşenlerinden birini kullanmayı deneyin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 33
- Kayıt: 09 Ağu 2010 01:28
Re: Ekrana sığmayan formda çıktı alma
Formun kendisini yazdırıyorum, yani üzerinde editler, combobox lar, labellar falan var. Yani memo yada listbox gibi bir şeyi satır satır yazdırmıcam. form1.print metodu formu capture yapıp gönderiyor, benimde bu şekilde göndermem lazım fakat işte ekran küçük, form büyük geliyor
Aslında baskı önizleme gibi ya da formu ekran çözünürlüğüne göre ölçeklendirme gibi şeyler aradım ama bi sonuca ulaşamadım 


Re: Ekrana sığmayan formda çıktı alma
aklima gelen ilk fikir, ekranin capturesini alip, formun o anki pozisyonuna göre kesmek ve boyut karsilastirmasi yapip icabinda elde edilen resmi proporsyonel kücültüp bir raporlama araci ile yazdirmak. (resim yazdirdiginda kagit üzerinde net görünmez, yada ben netlik ayarini hic beceremedim)
ille de formun kendisi görünmesi gerekmiyorsa, o zaman raporlama araci ile cikti almak...
ille de formun kendisi görünmesi gerekmiyorsa, o zaman raporlama araci ile cikti almak...
kıdemsiz üye
Re: Ekrana sığmayan formda çıktı alma
Forma bir tane scrollbox koyup, tüm kontrollarını bunun içine yerleştir.
Aşagıda scrollbox i nasil yazdıracagin anlatılıyor.
http://groups.google.com.au/group/borla ... 5af57742c6
Aşagıda scrollbox i nasil yazdıracagin anlatılıyor.
http://groups.google.com.au/group/borla ... 5af57742c6
Re: Ekrana sığmayan formda çıktı alma
s.a.
raporlama bileşeninde ısrarlıyım ancak illada formu yazdıracağım diyorsan
scaleby metodunu araştır.
ayrıca form üzerindeki nesnelerin konumlarını formun resize ında tekrar ayarlaman,ayarlatman gerekebilir.
kolay gelsin.
raporlama bileşeninde ısrarlıyım ancak illada formu yazdıracağım diyorsan
scaleby metodunu araştır.
ayrıca form üzerindeki nesnelerin konumlarını formun resize ında tekrar ayarlaman,ayarlatman gerekebilir.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
-
- Üye
- Mesajlar: 33
- Kayıt: 09 Ağu 2010 01:28
Re: Ekrana sığmayan formda çıktı alma
emin verdiğin adreste procedure PrinterStretchBlt(DestDC: HDC; X, Y, Width, Height: Integer;
SrcBitmap: HBITMAP; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD); şu olayı çözemedim, hangi companentte bu, hepsine baktım ama bulamadım. Diolagta var bi tane print olayı fakat o değil, daha delphide başlangıçta sayılırım, biraz daha yrddımcı olur musun?
SrcBitmap: HBITMAP; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD); şu olayı çözemedim, hangi companentte bu, hepsine baktım ama bulamadım. Diolagta var bi tane print olayı fakat o değil, daha delphide başlangıçta sayılırım, biraz daha yrddımcı olur musun?
Re: Ekrana sığmayan formda çıktı alma
O component degil, fonksiyon.
Scrollbox in içerigini paintto ile bitmap e kopyalayıp, daha sonra da onu print fonksiyonuna yönlendirmen gerekiyor.
En basitinden bir tane image koy.
image1.height:=scrollbox1.height;
image1.width:=scrollbox1.width;
Scrollbox1.PaintTo(image1.canvas.handle,0,0);
ile bu image1 e scrollbox1 i kopyalarsın.
Daha sonra da
PrinterStretchBlt(Printer.Canvas.Handle, NewLeft, NewTop, NewWidth,
NewHeight, image1.canvas.Handle, 0, 0, image1.width, image1.Height, SRCCOPY);
Printer ina göre newwidth, newheight degerlerini ayarlayabilirsin.
Scrollbox in içerigini paintto ile bitmap e kopyalayıp, daha sonra da onu print fonksiyonuna yönlendirmen gerekiyor.
En basitinden bir tane image koy.
image1.height:=scrollbox1.height;
image1.width:=scrollbox1.width;
Scrollbox1.PaintTo(image1.canvas.handle,0,0);
ile bu image1 e scrollbox1 i kopyalarsın.
Daha sonra da
PrinterStretchBlt(Printer.Canvas.Handle, NewLeft, NewTop, NewWidth,
NewHeight, image1.canvas.Handle, 0, 0, image1.width, image1.Height, SRCCOPY);
Printer ina göre newwidth, newheight degerlerini ayarlayabilirsin.
-
- Üye
- Mesajlar: 33
- Kayıt: 09 Ağu 2010 01:28
Re: Ekrana sığmayan formda çıktı alma
valla emin kardeş kusura bakma, acemisim daha bu işin, hele fonksiyonlarda dahada acemiyim. SQL' e insert etmeyi ve sql'den çağarmayı yeni öğrendim, o derece yani. Dediklerini aşağıdaki gibi uyguladım.
butonun click olayına PrinterStretchBlt(Printer.Canvas.Handle, NewLeft, NewTop, NewWidth,
NewHeight, PrintBitmap.Handle, 0, 0, PrintBitmap.Width, PrintBitmap.Height,
SRCCOPY); bu kodu koymazsam scrolboxı kopyalayabiliyorum, ama koyduğumda 'PrinterStretchBlt(Printer.' tam şurda hata veriyor. aşağıda da hata tanımı undeclared identifier:'Printer' yazıyo. sen bana bu işi öğretceksinde biraz zor olcak
procedure PrinterStretchBlt(DestDC: HDC; X, Y, Width, Height: Integer;
SrcBitmap: HBITMAP; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD);
var
Info: PBitmapInfo;
InfoSize: DWORD;
Image: Pointer;
ImageSize: DWORD;
DIBWidth, DIBHeight: Longint;
begin
GetDIBSizes(SrcBitmap, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
Image := AllocMem(ImageSize);
GetDIB(SrcBitmap, 0, Info^, Image^);
with Info^.bmiHeader do
begin
DIBWidth := biWidth;
DIBHeight := biHeight;
end;
StretchDIBits(DestDC, X, Y, Width, Height, XSrc, YSrc, DIBWidth,
DIBHeight, Image, Info^, DIB_RGB_COLORS, Rop);
FreeMem(Info);
FreeMem(Image);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.height:=scrollbox1.height;
image1.width:=scrollbox1.width;
Scrollbox1.PaintTo(image1.canvas.handle,0,0);
PrinterStretchBlt(Printer.Canvas.Handle, NewLeft, NewTop, NewWidth,
NewHeight, PrintBitmap.Handle, 0, 0, PrintBitmap.Width, PrintBitmap.Height,
SRCCOPY);
end;
butonun click olayına PrinterStretchBlt(Printer.Canvas.Handle, NewLeft, NewTop, NewWidth,
NewHeight, PrintBitmap.Handle, 0, 0, PrintBitmap.Width, PrintBitmap.Height,
SRCCOPY); bu kodu koymazsam scrolboxı kopyalayabiliyorum, ama koyduğumda 'PrinterStretchBlt(Printer.' tam şurda hata veriyor. aşağıda da hata tanımı undeclared identifier:'Printer' yazıyo. sen bana bu işi öğretceksinde biraz zor olcak

procedure PrinterStretchBlt(DestDC: HDC; X, Y, Width, Height: Integer;
SrcBitmap: HBITMAP; XSrc, YSrc, SrcWidth, SrcHeight: Integer; Rop: DWORD);
var
Info: PBitmapInfo;
InfoSize: DWORD;
Image: Pointer;
ImageSize: DWORD;
DIBWidth, DIBHeight: Longint;
begin
GetDIBSizes(SrcBitmap, InfoSize, ImageSize);
Info := AllocMem(InfoSize);
Image := AllocMem(ImageSize);
GetDIB(SrcBitmap, 0, Info^, Image^);
with Info^.bmiHeader do
begin
DIBWidth := biWidth;
DIBHeight := biHeight;
end;
StretchDIBits(DestDC, X, Y, Width, Height, XSrc, YSrc, DIBWidth,
DIBHeight, Image, Info^, DIB_RGB_COLORS, Rop);
FreeMem(Info);
FreeMem(Image);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
image1.height:=scrollbox1.height;
image1.width:=scrollbox1.width;
Scrollbox1.PaintTo(image1.canvas.handle,0,0);
PrinterStretchBlt(Printer.Canvas.Handle, NewLeft, NewTop, NewWidth,
NewHeight, PrintBitmap.Handle, 0, 0, PrintBitmap.Width, PrintBitmap.Height,
SRCCOPY);
end;
Re: Ekrana sığmayan formda çıktı alma
Uses kısmına printers i eklemen gerekiyor.
-
- Üye
- Mesajlar: 33
- Kayıt: 09 Ağu 2010 01:28
Re: Ekrana sığmayan formda çıktı alma
ekledim printersı orayı atladık çok şükür, şimdide hemen yanında NewLeft, yazan yerde hata veriyo. Onunda var kesin bi kütüphanesi ama araştırdım google da çözemedim 
