Ekrana sığmayan formda çıktı alma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
emrahozten
Üye
Mesajlar: 33
Kayıt: 09 Ağu 2010 01:28

Ekrana sığmayan formda çıktı alma

Mesaj gönderen emrahozten »

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.
emrahozten
Üye
Mesajlar: 33
Kayıt: 09 Ağu 2010 01:28

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emrahozten »

Şö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.
Kullanıcı avatarı
Battosai
Üye
Mesajlar: 1316
Kayıt: 01 Eki 2007 12:02
Konum: Ankara

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen Battosai »

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...
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen aslangeri »

s.a.
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
emrahozten
Üye
Mesajlar: 33
Kayıt: 09 Ağu 2010 01:28

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emrahozten »

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 :(
ikra
Üye
Mesajlar: 901
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen ikra »

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...
kıdemsiz üye
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emin_as »

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
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen aslangeri »

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.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
emrahozten
Üye
Mesajlar: 33
Kayıt: 09 Ağu 2010 01:28

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emrahozten »

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?
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emin_as »

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.
emrahozten
Üye
Mesajlar: 33
Kayıt: 09 Ağu 2010 01:28

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emrahozten »

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;
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emin_as »

Uses kısmına printers i eklemen gerekiyor.
emrahozten
Üye
Mesajlar: 33
Kayıt: 09 Ağu 2010 01:28

Re: Ekrana sığmayan formda çıktı alma

Mesaj gönderen emrahozten »

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 :(
Cevapla