štampanje određenih komponenti koje se nalaze na formi

štampanje određenih komponenti koje se nalaze na formi

offline
  • Pridružio: 19 Nov 2005
  • Poruke: 11
  • Gde živiš: Novi Sad

imam sledeći problem za koji mi je logično da bi trebalo da postoji jednostavno rešenje. naime, hteo bih da odštampam sadržaj određenog groupboxa koji se nalazi na formi (u tom groupboxu se nalaze labeli, slike, buttoni itd.). sadržaj čitave forme nije problem odštampati preko naredbe print(), međutim kako odštampati samo sadržaj određenog groupboxa koji se nalazi na toj formi?

Dopuna: 07 Maj 2006 5:02

ocito stampanje u delphiju nije bas tako jednostavna stvar. zato sam napravio novu formu koja ne bi bila vidljiva u aplikaciji, a u koju sam smestio komponente koje treba da budu odstampane. medjutim, da bi kvalitet stampe bio odgovarajuci trebalo je da povecam velicinu forme. nazalost, ustanovio sam da to nije moguce, tj visina ne moze biti preko 680... zar je moguce da postoji takvo ogranicenje? postoji li neka mogucnost da se ovo prevazidje? ako nije moguce povecati visinu forme, da li je onda moguce povecati kvalitet stampe? mada mi ne ide u glavu ni to da je nemoguce povecati dimenzije forme.



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • Emil Beli
  • Pridružio: 03 Jan 2005
  • Poruke: 2990
  • Gde živiš: Beograd

Ne postoji ogranicenje za visinu forme. Ne znam odakle ti to.. Da nisi stavio "constraint"?
Inace, ne znam kako se stampaju komponente, znam da stampam vrednosti u njima, ali ne graficki, pa zato nisam odgovorio.

Ali, forma nema ogranicenje za visinu i sirinu.



offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Mozes koristiti bilo koji report engine kojem mozes da prosledjujes slike ili da sam iscrtavas slike po Canvas-u printera.

Kontrola se iscrtava ovako:
WinControl.PaintTo(Canvas, X, Y);
ili
WinControl.PaintTo(DC, X, Y);
Gde je Canvas Canvas property nekog drugog objekta, DC je handle koji se dobija pozivom funkcije GetDC, GetWindowDC, ... ili Canvas.Handle. X i Y su koordinate na kojima ce se kontrola iscrtati.

Mozes crtati kontrolu direktno na stampac ili prvo u, recimo, TBitmap objekat i zatim ga prosledis nekom report engine-u.

offline
  • Pridružio: 19 Nov 2005
  • Poruke: 11
  • Gde živiš: Novi Sad

pa i mene čudi otkud to. jednostavno kad ukucam vrednosti za širinu i visinu u object inspector, ako je širina veća od 1036, a visina veća od 780, vrednosti će se vratiti na 1036, odnosno 780. ili ako formu kreiram na neku akciju preko sledećeg koda
var frmStampa: Tform; begin Application.CreateForm(TForm, grmStampa); frmStampa.Caption := 'Za štampu'; frmStampa.Position := poScreenCenter; frmStampa.Height := 1000; frmStampa.Width := 800; frmStampa.Show; ShowMessage('visina: '+IntToStr(grmStampa.Height)+' sirina: '+IntToStr(grmStampa.Width)) end;
forma će se podići, ali će ipak njena visina biti vraćena na 780, što se vidi i u poruci.
što se tiče WinControl, to mi ne radi. kaže da je undeclared identifier. da li je to deo neke dodatne biblioteke koju treba navesti?

Dopuna: 07 Maj 2006 16:24

ispravka: svugde treba frmStampa, i to radi. to sam ja nešto prepravljao bezveze

Dopuna: 07 Maj 2006 16:25

mislim radi kod, ali visina se vraća na 780, što je očito limit

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Samo sam stavio naziv WinControl bezveze... umesto WinControl stavi kontrolu koju zelis da stampas Smile
Npr: btnOtvori, Button1, Edit1, txtNesto... neka kotrola koja treba da se odstampa Smile

offline
  • Pridružio: 19 Nov 2005
  • Poruke: 11
  • Gde živiš: Novi Sad

pa to sam prvo i probao, sa buttonom npr, ali mi uopšte ne nudi opciju PaintTo. zato sam i mislio da je WinControl nešto drugo:).
e sad, kako pozvati PaintTo?? možda ipak treba neka biblioteka?

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Ne znam sta da ti kazem... evo... na formu sam postavio 3 komponente:

Memo1 (tip TMemo)
Button1 (tip TButton)
Image1 (tim TImage) (AutoSize sam postavio na True)

Od koda sam napisao samo OnClick event za dugme:
procedure TForm1.Button1Click(Sender: TObject); var   B: TBitmap; begin   B := TBitmap.Create;   B.Width := Memo1.Width;   B.Height := Memo1.Height;   Memo1.PaintTo(B.Canvas, 0, 0);   Image1.Picture.Bitmap.Assign(B);   B.Free; end;

Ovo kod mene radi lepo... sad... ti umesto da crtas na Image komponentu crtaj direktno na printer.

offline
  • Pridružio: 19 Nov 2005
  • Poruke: 11
  • Gde živiš: Novi Sad

lep primer... i radi! na mom Timageu zaista crta kontrolu. jedino što se procedura PaintTo uopšte ne pojavljuje u listi procedura i svojstava koji se nude posle WinControl. (???). ali kad se ukuca PaintTo, debuger ipak ne prijavljuje grešku i program radi. izgleda da moj delphi gadno brljavi. ne znam koji ti koristiš. ja koristim 2005 koji integriše u sebi više delphi aplikacija. videću kako će ići sa printerom. danas sam već izgubio živce pokušavajući da pomoću canvasa eksperimentalno štampam bitmape i neke pravougaonike na svoj printer, a i na virtualni adobe štampač kako bih video šta se dešava sa dimenzijama. i, naravno, dobijam različite dimenzije štampanih objekata na svom štampaču u odnosu na isti format na virtualnom adobe štampaču što znači da treba da očekujem da će se na različitm štampačima sve štampati drugačije. adobe štampač nikad nije pravio problem, tj. uvek je verno oslikavao izgled štampane strane, pa i sad to radi kad štampam iz drugih programa. da li tu treba neko dodatno podešavanje ili je problem kod mene na računaru?! btw. nisam uspeo da instaliram na njemu delphi 7 (javljao je neku grešku), ali sam posle toga uspeo ovaj 2005.

Dopuna: 08 Maj 2006 2:42

vidiš, srki_82. to zapravo i jeste odgovor na moje prvo pitanje jer ja pomoću metode PaintTo čitav groupbox sa svim svojim sadržajem pretvaram u bitmapu, a odatle u Timage. naravno, isto tako ću moći na printer.canvas, ali to ću pokušati sutra. izgleda da ti je ovaj primer bio pun pogodak:)
još samo kad ne bi bilo problema sa printerima.

offline
  • Srđan Tot
  • Am I evil? I am man, yes I am.
  • Pridružio: 12 Jul 2005
  • Poruke: 2483
  • Gde živiš: Ljubljana

Problem kod velicine objekata na stampi se vavlja zbograzlicite rezolucije ekrana i stampaca. Na ekranu imas po default-u 96 tacaka po incu dok je na stampacu taj broj verovatno drugaciji (krece se od oko 60 do oko 9600 u zavisnosti od stampaca... mozda sam dao pogresne podatke, ali sustina je da se rezolucije razlikuju).

Na osnovu rezolucija odredi koliko treba da povecas/smanjis objekat na stampacu.

Ko je trenutno na forumu
 

Ukupno su 1108 korisnika na forumu :: 50 registrovanih, 9 sakrivenih i 1049 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: acatomic, alkatraz080, Apok, armor, Bane san, bokisha253, coaaco, Dannyboy, darkojbn, Denaya, Djordje29, djordje92sm, dolinalima, DonRumataEstorski, drimer, flash12, Frunze, GAGI, Georgius, ikan, Komentator, kunktator, ladro, Litostroton, mackenzie, Marko Marković, MB120mm, Mercury, Metanoja, mile23, nemkea71, Prašinar, procesor, RED4G-304, royst33, ruger357, S-lash, Sirius, Srle993, ss10, Tandrkalo, vathra, Vlad000, Vlada1389, vlahale, W123, yrraf, YU-UKI, Žoržo, šumar bk2