Kendi Preview Ekranımızı Oluşturmak
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Kendi Preview Ekranımızı Oluşturmak
Arkadaşlar ben yazdırma ile ilgili yaşadığım problemi programcılıkta hiç bi hususta yaşamadım.
normal raporlama bileşenleri ve hatta devexpress in rapor bileşenleri bile isteklerime cevap vermedi.
çünkü benim şu anki projemde rapor ekranı ve rapor ekranında hesaplanan kısımlar var çünkü benim raporlarım veritabanındaki bir tablo veya grid deki bilgileri göstermek değil.
iş emri vermek için kullanabileceğim bir raporlama sistemi bulamadım çünkü gelen projeye göre iş emrinin yuapısı sürekli değişiyor.
her birine qreporda rapor hazırlamak olmuyor çünkü sürekli yenileri çıkıyor hesaplanan değerleri tektek qreportlabel lara eşlmek felan gerekiyor o da çook uzun iş.
ben şöyle birşey arıyom
istenen kordinatlara satır ve sütun sayısına göre tablo çizip istediğim kordinatlara yazı yazı yazıp ve gerektiğindede sayfaya sığdır diye bileceğim bir component veya source code pas dosyası varmıdır?
yardım ve önerilere şimdiden teşekürler.
Saygılarımla.
normal raporlama bileşenleri ve hatta devexpress in rapor bileşenleri bile isteklerime cevap vermedi.
çünkü benim şu anki projemde rapor ekranı ve rapor ekranında hesaplanan kısımlar var çünkü benim raporlarım veritabanındaki bir tablo veya grid deki bilgileri göstermek değil.
iş emri vermek için kullanabileceğim bir raporlama sistemi bulamadım çünkü gelen projeye göre iş emrinin yuapısı sürekli değişiyor.
her birine qreporda rapor hazırlamak olmuyor çünkü sürekli yenileri çıkıyor hesaplanan değerleri tektek qreportlabel lara eşlmek felan gerekiyor o da çook uzun iş.
ben şöyle birşey arıyom
istenen kordinatlara satır ve sütun sayısına göre tablo çizip istediğim kordinatlara yazı yazı yazıp ve gerektiğindede sayfaya sığdır diye bileceğim bir component veya source code pas dosyası varmıdır?
yardım ve önerilere şimdiden teşekürler.
Saygılarımla.
Süleyman Çelik
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
Merhaba;
İndirdiğiniz preview bileşenini,
1. Yol :
C:\Program Files\Borland\Delphi versiyon klasörü\Lib
klasörünün içine atın ve Delphi'de companent menüsünden Install Companent diyerek ekleyin.
2. Yol :
İndirdiğiniz preview klasörünü delphi'deTools menüsünden Environment Options kısmından library bölümüne path'ini gösterek ekleyin ve daha sonra yine companent menüsünden install companent diyerek delphi'ye ekleyin,
ve güle güle kullanın..
Kolay gelsin.
İndirdiğiniz preview bileşenini,
1. Yol :
C:\Program Files\Borland\Delphi versiyon klasörü\Lib
klasörünün içine atın ve Delphi'de companent menüsünden Install Companent diyerek ekleyin.
2. Yol :
İndirdiğiniz preview klasörünü delphi'deTools menüsünden Environment Options kısmından library bölümüne path'ini gösterek ekleyin ve daha sonra yine companent menüsünden install companent diyerek delphi'ye ekleyin,
ve güle güle kullanın..
Kolay gelsin.
Var olmaya değer her şey bilinmeye de değerdir. Çünkü bilgi varlığın bir imgesidir. Onda iyi ve kötü aynı anda bulunmaktadır...
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
arkadaşlar teşekkürler aynen dediğiniz gibiymiş 
bununla ilgili olarak preview ekranına bizim direk tablo cizdirmemiz mümkünmüdür buna benzer örnek veya kod varmı ? veya ben başlangıç kordinatını satır ve sütün sayısını vercem otomatik tablo cizidrecek bir kod
bulabileceğim bi yerler varmı sitesinde pek bişey yok
Saygılarımla.

bununla ilgili olarak preview ekranına bizim direk tablo cizdirmemiz mümkünmüdür buna benzer örnek veya kod varmı ? veya ben başlangıç kordinatını satır ve sütün sayısını vercem otomatik tablo cizidrecek bir kod
bulabileceğim bi yerler varmı sitesinde pek bişey yok
Saygılarımla.
Süleyman Çelik
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
murat hocam sorunu tam 12 den tesbit ettiniz başta zor geliyor bunu bi aşşam gerisini getirecem biliyom ama burda takıldım
dediğin gibi açık örnekler var ama o örnekler dogrudan bir dosyanın yüklendiği örnekler.
yardımı inceledim mesela ordan
function PaintWinControl(X, Y: Integer; WinControl: TWinControl): TPoint
fonksiyonu var denedim yazıcı hatası verdi anlayamadım.
eğer bu fonk çalışıyorsa ben gridi sayfaya yazdırabilirmiyim ?
ayrıca mesela 5 satır 7 kolondan oluşan bir tablo çizecem ama nasıl ?
bunlara dair örnekler yok.
elinizde sizin yaptığınız örnek uygulama varsa vede mümkünse gönderebilirmisiniz.
Saygılarımla.
dediğin gibi açık örnekler var ama o örnekler dogrudan bir dosyanın yüklendiği örnekler.
yardımı inceledim mesela ordan
function PaintWinControl(X, Y: Integer; WinControl: TWinControl): TPoint
fonksiyonu var denedim yazıcı hatası verdi anlayamadım.
eğer bu fonk çalışıyorsa ben gridi sayfaya yazdırabilirmiyim ?
ayrıca mesela 5 satır 7 kolondan oluşan bir tablo çizecem ama nasıl ?
bunlara dair örnekler yok.
elinizde sizin yaptığınız örnek uygulama varsa vede mümkünse gönderebilirmisiniz.
Saygılarımla.
Süleyman Çelik
- Murat DİCLE
- Kıdemli Üye
- Mesajlar: 702
- Kayıt: 19 Nis 2006 04:12
- Konum: İstanbul
- İletişim:
şimdi bu verdiğin örneğe bakacak olursak iki şekilde bu raporu hazırlayabilirsin.
ilki en basiti, bu şablonu JPG, BMP olarak boş şekilde kaydedersin, sonra sayfanın CANVAS'ına atarsın. yazıları ise manuel olarak eklersin. Bu en kolayı gibi..
ikinci olarak ise, aynen eskiden DOS uygulamalarında yaptığımız gibi, şekilleri kendin çizersin.
PrintPreview komponenti, QReport gibi değildir karıştırılmaması gerekir. PrintPreview'de herşeyi kendiniz koymalısınız. Bu komponrnt size sayfalandırma, sayfalara yazma gibi kolaylıklar sağlar, aynı zamanda Preview yaparak (ön izleme) baskı almanıza yardımcı olur.
Şimdi bir fatura yazdırma işi vardı, onun için yaptığım kodları aynen buraya yazıyorum. Umarım bu örnek işinizi görür..
Fakat şimdi farkettim, bu bildiğimiz (uses Printers) ile gelen Printer nesnesi ile yapılan bir örnek. Ama sizlere lazım olabilir diye veriyorum. Şimdi PrintPreview ile gelen örneği inceleyelim.
Formun üstüne TPrintPreview nesnesi koyalım. Bu satırlar printpreview ile gelen GENERAL adlı örnekten alındı.
Valla karma karışık oldu
umarım işin içinden çıkarsın. Şimdi hatırladım, ben ön izleme aracı olarak PrintPreview'i kullanıyordum birde sayfalama mantığı kolay diye. Ancak Fatura ya da tek sayfalık baskılar için Printers unitindeki sabit Printer nesnesinden faydalanıyordum.
Eğer uygulamanda Veri tabanından bağlantılı birşeyler yapacaksan QReport'a da bakmanı öneririm. Ama ben eski kafalıyım (aynı benim gibi) diyorsan PrintPreview yada Printers nesneleriylede çok iyi sonuçlar elde edebilirsin..
Saygılar..
ilki en basiti, bu şablonu JPG, BMP olarak boş şekilde kaydedersin, sonra sayfanın CANVAS'ına atarsın. yazıları ise manuel olarak eklersin. Bu en kolayı gibi..
ikinci olarak ise, aynen eskiden DOS uygulamalarında yaptığımız gibi, şekilleri kendin çizersin.
PrintPreview komponenti, QReport gibi değildir karıştırılmaması gerekir. PrintPreview'de herşeyi kendiniz koymalısınız. Bu komponrnt size sayfalandırma, sayfalara yazma gibi kolaylıklar sağlar, aynı zamanda Preview yaparak (ön izleme) baskı almanıza yardımcı olur.
Şimdi bir fatura yazdırma işi vardı, onun için yaptığım kodları aynen buraya yazıyorum. Umarım bu örnek işinizi görür..
Kod: Tümünü seç
procedure TForm5.SpeedButton2Click(Sender: TObject);
Var Y, I : Integer;
GT1, GT2 : Real;
S : String;
begin
DBEdit1Change(Sender);
DeiiklikleriKAYDET1Click(Sender);
If Not (MessageDlg('Bu faturayı yazdırmak istiyor musunuz?', mtConfirmation, [mbYes, mbNo], 0) = mrYes) Then Exit;
Y := 4;
with Printer do
begin
BeginDoc;
Printer.Canvas.Font.Name := 'ARIAL';
Printer.Canvas.Font.Size := 10;
Printer.Canvas.Font.Style:= [fsBold];
Printer.Canvas.TextOut(330, 330+Y, ADI.Caption);
Printer.Canvas.Font.Style:= [];
Printer.Canvas.TextOut(210, 360+Y, DBMemo1.Lines[0]); // Adres Satırı 1
Printer.Canvas.TextOut(210, 380+Y, DBMemo1.Lines[1]); // Adres Satırı 2
Printer.Canvas.TextOut(210, 400+Y, DBMemo1.Lines[2]); // Adres Satırı 3
Printer.Canvas.TextOut(210, 420+Y, DBMemo1.Lines[3]); // Adres Satırı 4
Printer.Canvas.TextOut(425, 494+Y, DBText1.Caption); // Vergi Daire Adı
Printer.Canvas.TextOut(425, 525+Y, DBText2.Caption); // Vergi Daire Numarası
Printer.Canvas.TextOut(1595, 438+Y, DBEdit1.Text); // Fatura Tarihi
Printer.Canvas.TextOut(1595, 486+Y, DBEdit3.Text); // İrsaliye No
Printer.Canvas.TextOut(1595, 533+Y, DBEdit4.Text); // İrsaliye Tarihi
//Fatura Kalemleri Yazdırılıyor!
I := 0;
Y := 10;
Printer.Canvas.Font.Size := 9;
DM.tblFatHar2.First;
While Not DM.tblFatHar2.Eof Do
Begin
Printer.Canvas.TextOut(210, 645+Y+I, DM.tblFatHar2UrunAdi.Value); // Malın Cinsi
Printer.Canvas.TextOut(675, 645+Y+I, DM.tblFatHar2Kesafet.DisplayText); // Kesafet
Printer.Canvas.TextOut(835 +
(Printer.Canvas.TextWidth('99999') - Printer.Canvas.TextWidth(DM.tblFatHar2Kilo.AsString)),
645+Y+I,
DM.tblFatHar2Kilo.AsString); // Kilo
Printer.Canvas.TextOut(1035 +
(Printer.Canvas.TextWidth('99999') - Printer.Canvas.TextWidth(DM.tblFatHar2Litre.AsString)),
645+Y+I,
DM.tblFatHar2Litre.AsString); // Litre
Printer.Canvas.TextOut(1235 +
(Printer.Canvas.TextWidth('999,999,999') - Printer.Canvas.TextWidth(DM.tblFatHar2Fiyat.DisplayText)),
645+Y+I,
DM.tblFatHar2Fiyat.DisplayText); // Birim Fiyatı
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(DM.tblFatHar2Tutar.DisplayText)),
645+Y+I,
DM.tblFatHar2Tutar.DisplayText); // Tutarı
DM.tblFatHar2.Next;
Inc(I, 20);
End;
Y := 645+Y;
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
Y+I,
'=================='); // Kalem bitti çizgisi
//
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'TOPLAM');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [Toplam]))),
Y+I,
Format('%0.2n', [Toplam+ISK])); // Tutarı
If DM.tblFatura2Iskonto.Value > 0 Then
Begin
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'İSKONTO');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [ISK]))),
Y+I,
Format('%0.2n', [ISK])); // Tutarı
Inc(I, 20);
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
Y+I,
'=================='); // Tutarı
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'ARA TOPLAM');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [Toplam]))),
Y+I, Format('%0.2n', [Toplam])); // Tutarı
End;
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'KDV %' + DBEdit5.Text);
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [KDV]))),
Y+I,
Format('%0.2n', [KDV])); // Tutarı
Inc(I, 20);
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
Y+I,
'==================');
If SP <= 0 Then
Begin
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'G.TOPLAM');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam+SP]))),
Y+I,
Format('%0.2n', [GToplam])); // Tutarı
End
Else
Begin
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'ARA TOPLAM');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam+SP]))),
Y+I,
Format('%0.2n', [GToplam+SP])); // Tutarı
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'Sigorta Primi');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [SP]))),
Y+I,
Format('%0.2n', [SP])); // Tutarı
Inc(I, 20);
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth('==================')),
Y+I,
'==================');
Inc(I, 20);
Printer.Canvas.TextOut(1160, Y+I, 'G.TOPLAM');
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
Y+I,
Format('%0.2n', [GToplam])); // Tutarı
End;
Printer.Canvas.Font.Size := 8;
GT1 := Int(GToplam);
GT2 := GToplam - GT1;
S := Yaziyle(GT1) + ' YTL';
if GT2 > 0 then
begin
GT2 := (GT2 * 100);
S := S + ' ' + Yaziyle(GT2) + ' YKr';
end;
Printer.Canvas.TextOut(210, 1120, S); // Yaziyle
Printer.Canvas.Font.Size := 10;
Printer.Canvas.Font.Style:= [fsBold];
Printer.Canvas.TextOut(535, 1280, DM.tblFatura2Vade.DisplayText); // Vade Tarihi
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
1100,
Format('%0.2n', [GToplam])); // Tutarı
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
1140, 'DAHiL'); // KDV Dahil
Printer.Canvas.TextOut(1585 +
(Printer.Canvas.TextWidth('999,999,999,999') - Printer.Canvas.TextWidth(Format('%0.2n', [GToplam]))),
1190,
Format('%0.2n', [GToplam])); // G.Toplam
EndDoc;
end;
end;
Formun üstüne TPrintPreview nesnesi koyalım. Bu satırlar printpreview ile gelen GENERAL adlı örnekten alındı.
Kod: Tümünü seç
procedure Printle;
begin
//bu örnekte sadecde ön izleme oluşturuluyor.
// siz ayrıca print etmek isterseniz.
// PrintPreview.Print; komutu verin ENDDOC'tan sonra..
with PrintPreview1 do
begin
BeginDoc;
CreateImageTextPage;
NewPage; // ikinci sayfaya başlamak için..
// ikinci sayfa için bişiler yazabilirsiniz..
finally
EndDoc;
end;
end;
end;
procedure TMainForm.CreateImageTextPage;
var
R: TRect;
OneCM: TPoint;
SavedBottom: Integer;
begin
with PrintPreview do
begin
// Don't forget that we have already drawn a frame for the page with 1cm
// margin. We have to exclude it from the paper size. The content would
// have 1cm margin relative to the frame.
// 1cm yi yazıcı için çeviriyor
OneCM := ConvertXY(100, 100, mmLoMetric, Units);
R := PageBounds;
InflateRect(R, -(2 * OneCM.X), -(2 * OneCM.Y));
// We want to place an image horizontally in center of the paper and
// under the frame's top. In addition, we want the image height does
// not exceed 3cm limit.
SavedBottom := R.Bottom;
R.Bottom := R.Top + 3 * OneCM.Y;
//burda Image1 içindeki resmi sayfaya yazıyoruz.
PaintGraphicEx(R, Image1.Picture.Graphic, True, True, True);
// We are going to draw a frame and write some text inside it. The new
// frame is 1cm under the image boundary.
R.Top := R.Bottom + OneCM.Y;
R.Bottom := SavedBottom;
// Here, we draw the frame.
Canvas.Rectangle(R.Left, R.Top, R.Right, R.Bottom);
// To write the frame's dimensions under the frame
Canvas.Font.Size := 8;
//basitçe bir text'i sayfaya yazıyoruz.
Canvas.TextOut(R.Left, R.Bottom, Format('%d (%s) x %d (%s)',
[R.Right - R.Left, UnitComboBox.Items[UnitComboBox.ItemIndex],
R.Bottom - R.Top, UnitComboBox.Items[UnitComboBox.ItemIndex]]));
// For the first line of the sample text, we set the font size to 12.
Canvas.Font.Size := 12;
// While we have not reached to the frame's bottom...
InflateRect(R, -OneCM.X div 5, -OneCM.Y div 5);
while R.Top - Canvas.Font.Height <= R.Bottom do
begin
// Randomly we select a font color
Canvas.Font.Color := RGB(Random(256), Random(256), Random(256));
// draw the text,
Canvas.TextRect(R, R.Left, R.Top, 'Powered by Borland Delphi.');
// move the frame's top to the next line,
Inc(R.Top, -Canvas.Font.Height);
// and we increase the font size by 1
Canvas.Font.Size := Canvas.Font.Size + 1;
end;
end;
end;

Eğer uygulamanda Veri tabanından bağlantılı birşeyler yapacaksan QReport'a da bakmanı öneririm. Ama ben eski kafalıyım (aynı benim gibi) diyorsan PrintPreview yada Printers nesneleriylede çok iyi sonuçlar elde edebilirsin..
Saygılar..
aynen hocam bende eski kafatım.....
zaten benim rapor ekranım sabit olsa ben qreportu hemen kullanıurım ancak bende satır ve sütunlar sürekli her üründe değişior o yüzden qreport ta her ürüne bi sayfa hazırlamak ölüm...
kodlar için teşekkürler burdan anladımki tek tek kordinatlara biz yazacagız tablolarıda line comutu ile biz cizeceyiz
Saygılarımla.

zaten benim rapor ekranım sabit olsa ben qreportu hemen kullanıurım ancak bende satır ve sütunlar sürekli her üründe değişior o yüzden qreport ta her ürüne bi sayfa hazırlamak ölüm...
kodlar için teşekkürler burdan anladımki tek tek kordinatlara biz yazacagız tablolarıda line comutu ile biz cizeceyiz
Saygılarımla.
Süleyman Çelik