üzerinde 4 grid olan bir formu yazdırma
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
üzerinde 4 grid olan bir formu yazdırma
merhaba
formu önce print metodu ile yazdırdım ancak 4 te 3 ü boş çıkıyordu. aramalarım sonucu bir kod buldum ama bundada büyük çözünürlük olan ekranlarda çıktı byutu inanılmaz büyüyor ve kağıda sığmıyor.
4 gridde sql den çekilen sorgular listelenmekte.
işin özü bu listelemeleri tek bir componentte yapmak mümkünmü ... (4 listview ile yapmayı düşündüm ama pratikte bir fark olacak gibi değil)
2. yazdırma için daha başka bir yol varmıdır ....
formu clipboarda atıp oradan yazdırmayı düşündüm ama bu seferde resim olarak göreceğinden çıktıda boyulmalar olabilir diye düşünüyorum.
saygılar.
formu önce print metodu ile yazdırdım ancak 4 te 3 ü boş çıkıyordu. aramalarım sonucu bir kod buldum ama bundada büyük çözünürlük olan ekranlarda çıktı byutu inanılmaz büyüyor ve kağıda sığmıyor.
4 gridde sql den çekilen sorgular listelenmekte.
işin özü bu listelemeleri tek bir componentte yapmak mümkünmü ... (4 listview ile yapmayı düşündüm ama pratikte bir fark olacak gibi değil)
2. yazdırma için daha başka bir yol varmıdır ....
formu clipboarda atıp oradan yazdırmayı düşündüm ama bu seferde resim olarak göreceğinden çıktıda boyulmalar olabilir diye düşünüyorum.
saygılar.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: üzerinde 4 grid olan bir formu yazdırma
merhaba, bu işi raporlama bileşeni ile yapsanız daha kolay olmaz mı ? Böylece yazdırma işi ile siz uğraşmış olmazsınız.
Re: üzerinde 4 grid olan bir formu yazdırma
mümkün olsa neden istemeyeyim. ama 4 ayrı sorgu 4 ayrı grid. bir fikriniz varmı nasıl yapabiliriz ?
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: üzerinde 4 grid olan bir formu yazdırma
Neden raporlama bileşenleri ile yapamadığınızı yada yapmak istemediğinizi anlayamadım ama, madem dataset'ler üzerinden raporlama bileşenleri ile gitmek istemiyorsunuz bu durumda; Printer.BeginDoc/Printer.EndDoc ile kendiniz yazdırabilirsiniz. Formu print ile yazdırdım bazı noktalarda boşluklar oluyordu diyorsunuz ardından da grafiksel olarak yazıdırmak istemiyorum diyorsunuz, inanın onu da anlamadım. Formu yazdırdı iseniz o zaten grafiksel olarak yazılmıştır. Sizin için grafiksel olarak yazdırmak bir sorun teşkil etmiyor ise her bir gridi birer bitmap'in içine yazdırabilir ardından istediğiniz gibi ölçekleyebilir(StretchBlt vb) ardından da yazdırabilirsiniz.
İşinize yarama ihtimali olan metod;
olabilir.
İşinize yarama ihtimali olan metod;
Kod: Tümünü seç
TWinControl.PaintTo(DC: HDC; X, Y: Integer);
Re: üzerinde 4 grid olan bir formu yazdırma
ekranda ölçüleri farklı 4 gridim var. 4ü birbirinden ayrı datasetler. bunu tek sayfadaki bir raorda çıktıl almak hiç yapmadığım bir konu.
normal form1. print komutu ile büyük kısmı boş çıkıyor sayfanın.
bulduğum kod ile yazdırmada büyük küçük davası oluyor.
print scrren ile alıp yazıdırnca yazıların netlliği diğeri gibi olmuyor.
bizde sizin dediğinizi deneyelim.
normal form1. print komutu ile büyük kısmı boş çıkıyor sayfanın.
bulduğum kod ile yazdırmada büyük küçük davası oluyor.
print scrren ile alıp yazıdırnca yazıların netlliği diğeri gibi olmuyor.
bizde sizin dediğinizi deneyelim.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Re: üzerinde 4 grid olan bir formu yazdırma
raporun columns özelligini kullan ve her bir column da ayri dataset'i yazdir.
kıdemsiz üye
Re: üzerinde 4 grid olan bir formu yazdırma
Form1.Printte büyük boşluk çıkması muhtemelen sizin formu ekrana yaymanız ve ekranın çözünürlüğünün de yüksek olması olabilir. Eğer öyle ise yazdırma esnasında formu yeniden boyutlandırmak gibi birşey olabilir.ikutluay yazdı: normal form1. print komutu ile büyük kısmı boş çıkıyor sayfanın.
Aklıma delphide ilk defa çıktı almaya çalışıp da çözüm olarak form1.print ediğim günler geldi

Ek olarak sql sorgusu ise bunları joinliyerek tek bir gride çekebilirsiniz. Aralarında bir ilişki yok ise
mysql için row_number firebird için de bir ara bana lazım olan şu soruya ve cevabına bakabilirsiniz
Raporlama atla deve bişey değil. Bir kaç küçük deneme ile eminim şu soruya beklediğiniz cevap için geçen süreden daha kısa bir zamanda güzel bir çalışma yapabileceksiniz (gridelerin sayısı önemli değil)ikutluay yazdı: ekranda ölçüleri farklı 4 gridim var. 4ü birbirinden ayrı datasetler. bunu tek sayfadaki bir raorda çıktıl almak hiç yapmadığım bir konu.
forumda fastreport, ravereport ve cyristalreport kullanımları için örnekler ve makaleler var.
kolay gelsin.
örneğin (denemedim ama) fastreportta kayıt sayısını datasete bağlamak yerine ilgiliband.RowNumber := (4 tablodan en çok kayıt sayısına sahip olan kayıt sayısı) diyip 4 tablonun kayıtlarını tek bantta gösterebilirsiniz.
ya da sayfayı 4 sütuna bölebilirsiniz. vesaie vesaire.
Bu cevapları yazarken biraz çekinerek yazdım zira (eğer hesabı başkasından devralmadıysanız) ikutluay olaraktan hem forumun eski bir üyesisisiniz hem de ikibinküsür mesajınız var ve Yazmış olduğum Bu tip cevaplar delphiyi bir kaç haftadır kullanan birisine verilecek türden cevaplar. Ya da aslında soruyu ben hâla anlayabilmiş değilim

Re: üzerinde 4 grid olan bir formu yazdırma
form print metodunda boşluklar olması genel bir sorunmuş. karşılaşan çok kişiye rastladım.
öte yandan çekinecek birşey yok. İnsanız ve şaşarız. Benim kullandığım raporlar genelde düz mantık raporlardı. Haliyle insan çözmek zorunda olmadığı bir kayaya rastladığında kırmak için yardım gerekebiliyor.
Benim formu yazdırmak için kullandığım kod burada ama bir yerinde mantıksal bir sorun var.
Kısmında ekran çözünürlüğü büyükse çıktı devasa oluyor. Kontrol edilebilir elbette ama bu seferde ızgaraları kullanıcının genişletmeyeceği belli değil. En sağlamı arkadaşların önerdiği gibi rapor olacak.
öte yandan çekinecek birşey yok. İnsanız ve şaşarız. Benim kullandığım raporlar genelde düz mantık raporlardı. Haliyle insan çözmek zorunda olmadığı bir kayaya rastladığında kırmak için yardım gerekebiliyor.
Benim formu yazdırmak için kullandığım kod burada ama bir yerinde mantıksal bir sorun var.
Kod: Tümünü seç
ScaleX := Self.Width*5;
ScaleY := Self.Height*5;
Kod: Tümünü seç
procedure TFrmCiro.BitBtn2Click(Sender: TObject);
var
abc:tcolor;
DC: HDC;
isDcPalDevice: Bool;
MemDC: HDC;
MemBitmap: HBITMAP;
OldMemBitmap: HBITMAP;
hDibHeader: THandle;
pDibHeader: Pointer;
hBits: THandle;
pBits: Pointer;
ScaleX: Double;
ScaleY: Double;
pPal: PLOGPALETTE;
pal: HPALETTE;
OldPal: HPALETTE;
i: Integer;
begin
abc:=FrmCiro.Color;
PnlFilterRecs.Visible:=false;
FrmCiro.Color:=clWhite;
clbrMn.Visible:=false;
BitBtn2.Visible:=False;
//****
{Get the screen dc}
DC := GetDC(0);
{Create a compatible dc}
MemDC := CreateCompatibleDC(DC);
{create a bitmap}
MemBitmap := CreateCompatibleBitmap(DC, Self.Width, Self.Height);
{select the bitmap into the dc}
OldMemBitmap := SelectObject(MemDC, MemBitmap);
{Lets prepare to try a fixup for broken video drivers}
isDcPalDevice := False;
if GetDeviceCaps(DC, RASTERCAPS) and RC_PALETTE=RC_PALETTE then
begin
GetMem(pPal, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)));
FillChar(pPal^, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)),
#0);
pPal^.palVersion := $300;
pPal^.palNumEntries := GetSystemPaletteEntries(DC, 0, 256, pPal^.palPalEntry);
if pPal^.palNumEntries<>0 then
begin
pal := CreatePalette(pPal^);
OldPal := SelectPalette(MemDC, pal, False);
isDcPalDevice := True
end
else
FreeMem(pPal, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)));
end;
{copy from the screen to the memdc/bitmap}
BitBlt(MemDC, 0, 0, Self.Width, Self.Height, DC, Self.Left, Self.Top, SRCCOPY);
if isDcPalDevice=True then
begin
SelectPalette(MemDC, OldPal, False);
DeleteObject(pal);
end;
{unselect the bitmap}
SelectObject(MemDC, OldMemBitmap);
{delete the memory dc}
DeleteDC(MemDC);
{Allocate memory for a DIB structure}
hDibHeader := GlobalAlloc(GHND, SizeOf(TBITMAPINFO)+(SizeOf(TRGBQUAD)*
256));
{get a pointer to the alloced memory}
pDibHeader := GlobalLock(hDibHeader);
{fill in the dib structure with info on the way we want the DIB}
FillChar(pDibHeader^, SizeOf(TBITMAPINFO)+(SizeOf(TRGBQUAD)*
256), #0);
PBITMAPINFOHEADER(pDibHeader)^.biSize := SizeOf(TBITMAPINFOHEADER);
PBITMAPINFOHEADER(pDibHeader)^.biPlanes := 1;
PBITMAPINFOHEADER(pDibHeader)^.biBitCount := 8;
PBITMAPINFOHEADER(pDibHeader)^.biWidth := Self.Width;
PBITMAPINFOHEADER(pDibHeader)^.biHeight := Self.Height;
PBITMAPINFOHEADER(pDibHeader)^.biCompression := BI_RGB;
{find out how much memory for the bits}
GetDIBits(DC, MemBitmap, 0, Self.Height, nil, TBITMAPINFO(pDibHeader^),
DIB_RGB_COLORS);
{Alloc memory for the bits}
hBits := GlobalAlloc(GHND, PBITMAPINFOHEADER(pDibHeader)^.BiSizeImage);
{Get a pointer to the bits}
pBits := GlobalLock(hBits);
{Call fn again, but this time give us the bits!}
GetDIBits(DC, MemBitmap, 0, Self.Height, pBits, PBitmapInfo(pDibHeader)^,
DIB_RGB_COLORS);
{Lets try a fixup for broken video drivers}
if isDcPalDevice=True then
begin
for i := 0 to (pPal^.palNumEntries-1) do
begin
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbRed := pPal^.palPalEntry[i].peRed;
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbGreen := pPal^.palPalEntry[i].peGreen;
PBitmapInfo(pDibHeader)^.bmiColors[i].rgbBlue := pPal^.palPalEntry[i].peBlue;
end;
FreeMem(pPal, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)));
end;
{Release the screen dc}
ReleaseDC(0, DC);
{Delete the bitmap}
DeleteObject(MemBitmap);
{Start print job}
Printer.Orientation:=poLandscape;
Printer.BeginDoc;
{Scale print size }
ScaleX := Self.Width*5;
ScaleY := Self.Height*5;
if Printer.PageWidth < Printer.PageHeight then
begin
ScaleX := Printer.PageWidth;
ScaleY := Self.Height*(Printer.PageWidth/Self.Width);
end
else
begin
ScaleX := Self.Width*(Printer.PageHeight/Self.Height);
ScaleY := Printer.PageHeight;
end;
{Just incase the printer drver is a palette device}
isDcPalDevice := False;
if GetDeviceCaps(Printer.Canvas.Handle, RASTERCAPS) and RC_PALETTE=RC_PALETTE
then
begin
{Create palette from dib}
GetMem(pPal, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)));
FillChar(pPal^, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)),
#0);
pPal^.palVersion := $300;
pPal^.palNumEntries := 256;
for i := 0 to (pPal^.palNumEntries-1) do
begin
pPal^.palPalEntry[i].peRed := PBitmapInfo(pDibHeader)^.bmiColors[i].rgbRed;
pPal^.palPalEntry[i].peGreen := PBitmapInfo(pDibHeader)^.bmiColors[i].rgbGreen;
pPal^.palPalEntry[i].peBlue := PBitmapInfo(pDibHeader)^.bmiColors[i].rgbBlue;
end;
pal := CreatePalette(pPal^);
FreeMem(pPal, SizeOf(TLOGPALETTE)+(255*SizeOf(TPALETTEENTRY)));
OldPal := SelectPalette(Printer.Canvas.Handle, pal, False);
isDcPalDevice := True
end;
{send the bits to the printer}
StretchDiBits(Printer.Canvas.Handle, 0, 0, Round(ScaleX), Round(ScaleY),
0, 0, Self.Width, Self.Height, pBits, PBitmapInfo(pDibHeader)^,
DIB_RGB_COLORS, SRCCOPY);
{Just incase you printer drver is a palette device}
if isDcPalDevice=True then
begin
SelectPalette(Printer.Canvas.Handle, OldPal, False);
DeleteObject(pal);
end;
{Clean up allocated memory}
GlobalUnlock(hBits);
GlobalFree(hBits);
GlobalUnlock(hDibHeader);
GlobalFree(hDibHeader);
{end the print job}
Printer.EndDoc;
//**
end;
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog