Mirsaid Aripov, Nurillo Otaxanov


Listing 16.1. DemoPrint loyihasining listingi



Download 9,81 Mb.
bet165/209
Sana16.01.2022
Hajmi9,81 Mb.
#371485
1   ...   161   162   163   164   165   166   167   168   ...   209
Bog'liq
DELPHI dasturlash titli 2018

Listing 16.1. DemoPrint loyihasining listingi.

unit DemoPrint;

unit Printp;

interface

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Printers;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

RadioGroup1: TRadioGroup;

16.1-rasm. DemoPrint loyihasining bosh oynasi

 

Button1: TButton;

Memo1: TMemo;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var f, printtxt: textfile; S : string;

begin

if RadioGroup1.ItemIndex q 0

then Memo1.Lines.LoadFromFile(edit1.text)

else begin

AssignFile(f, edit1.text);

AssignPrn(PrintTxt);

Reset(F);

Rewrite(PrintTxt);

while Not EOF(f) do

begin Readln(f, s);

Writeln(printtxt, s)

end;

CloseFile(f);

CloseFile(PrintTxt);

RadioGroup1.ItemIndex:= 0;

end;

end;

end.

Ushbu listing hech bir izohga muhtoj emas. Faqat shuni aytish mumkinki, listingdagi



RadioGroup1.Itemlndex:= 0;

ko`rsatmasi ma`lumotlar printer orqali chop qilingandan so`ng, printerni uzib qo`yadi.

Ma`lumotlarni chop qilish jarayonida quyidagi boshqaruvchi belgilardan foydalanish mumkin:

#9 — tabulyatsiya; # 10 —yangi satr;

#13 — ENTER tugmasi; ^L — yangi sahifa.

Masalan:



Write(FPrint, 'Shu satrdan so`ng yangi satrga o`tiladi', #10, #13);

Writeln (FPrint, 'Bu sahifa ohiriga aylantiriladi', ^L);

Matnli fayllarni chop qilishda to`g’ridan-to`g’ri 10 o`lchamli System shrifti o`rnatiladi. ehtiyojga ko`ra bu shrift va o`lchamlarni o`zgartirish mumkin. Buning uchun Printer ob’yektining Canvas hususiyatidan foydalaniladi. Quyidagi namunaga e`tibor bering:



with Printer.Canvas.Font do

begin

Name := 'Times Neww Roman';

Size := 12;

end;

17.3. Tasvirlarni chop qilish

Tasvirlarni chop qilishda Tprinter klassidagi TCanvas ob’yektining Canvas hususiyatlaridan foydalaniladi. Bu kanva turli tasviriy hamda rastrli grafik elementlarini tasvirlash uchun yetarlicha imkoniyatlarga ega.

Tasvirlarni kanvadan printerga uzatish jarayonining o`ziga hos tomonlari foydalanuvchilar ko`zidan yashirib qo`yilgan.

Tasvirlarni chop qilish uchun quyidagi amallar ketma-ketligini bajarish lozim:

- Chop qilish jarayoni BeginDoc metodi yordamida boshlanadi;

- Tasvir hosil qilinadi va maxsus metodlar yordamida printerga jo`natiladi;

- Chop qilish jarayoni EndDoc metodi yordamida yakundlanadi.

Printerning kanvasiga murojaat qilish chop qilish jarayoni boshlangandan so’ng bajarilishiga e`tibor bering. Aks holda bajarish vaqtidagi hatolik yuz beradi.

Chop qilingan ma`lumot va uning ekrandagi ko’rinishi printerning parametrlariga bog’liq bladi. SHuning uchun iloji boricha chop qilish jarayonini boshlashdan avval tasvirlarning o’lchamlarini aniqlash va zarur bo’lsa masshtablashtirish ishlarini bajarish lozim. Masshtablashtirish amali faqat katta tasvirlar uchungina emas, balki kichik rasmlarni qog’oz o’lchamlarini hisobga olgan holda kattalashtirishda ham qllanadi. Qog’oz o’lchamlarini Tprinter klassining PageHeight va PageWidth hususiyatlari yordamida aniqlash mumkin. Bundan tashqari, tasvirning ekran va qog’oz-dagi ko’rinishi printer va ekranning ruhsat etilgan imkoniyatlariga qarab, sifat jihatidan katta farq qilishi mumkin. Printerning joriy imkoniyatlarini Windows API GetDeviceCaps funksiyasi yordamida aniqlash mumkin. U masshtabning bir dyuym masofaga tog’ri keladigan gorizontal va vertikal yo’nalishlardagi nuqtalar sonidan iborat qiymatlarni qabul qiladi.

17.4. Rastrli tasvirlarni chop qilish

Ilovalarda TImage komponentasi yoki TBitMap tipidagi ob’yektlar-dan foydalanish qulay hisoblanadi. Rastrli tasvirlarni chop qilish uchun ularni TBitMap klassidagi ekzemplyarga yuklash va tasvirni maxsus metodlar yordamida printer kanvasiga jo`natish lozim. Tprinter klassi uni chop qilinishini ta`minlaydi. Masalan, sahifa markazida masshtabni o`zgartirmay turib chop qilish quyidagicha amalga oshirilishi mumkin.



Procedure TForml.ButtonlClick(Sender: TObject);

begin

with Printer, Imagel do

begin

if (Picture.Width > PageWidth) or (Picture.Height > PageHeight)

then begin

ShowMessage('Tasvir o`lchamlari sahifadan katta ');

Exit;

end;

BeginDoc;

Canvas.Draw((PageWidth - Picture.Width) div 2,(PageHeight –

Picture.Height) div 2, Picture.Bitmap);

EndDoc;

end; end;

Agar tasvir qog’ozdan kichik bo`lsa, Canvas.Draw metodi uni sahifa o`rtasiga chiqarilishini ta`minlaydi.

Noproportsional masshtablashtirish amalini sahifa o`lchamlarini hisobga olgan holda quyidagicha bajarish mumkin:

procedure TFormI.ButtonlClick(Sender: TObject);

var ImageRect: TRect;

begin

with Printer, Imagel do begin

ImageRect.Top :=0;

ImageRect.Left := 0;

ImageRect.Right := PageWidth;

ImageRect.Bottom := PageHeight;

BeginDoc;

Canvas.StretchDraw(ImageRect, Picture.Bitmap);

EndDoc;

end;

end;

Bu holda masshtablashtirish bo`yicha barcha ishlarni kanvaning StretchDraw metodi bajaradi. U tasvir o`lchamlarini ImageRect to`rtburchak o`lchamlariga mos ravishda o`zgartiradi.

Proportsional masshtablashtirish masalasi to`rtburchak o`lchamlarini hisobga olgan holda elementar hisob ishlari orqali hal qilinadi.

17.5. Sodda tasvirlarni chop qilish

Ixtiyoriy grafik figura va matnlarni tasviriy element sifatida rastrli tasvirlarni yaratmay turib ham Printer ob’yektining Canvas hususiyatlaridan foydalanib chop qilish mumkin.

procedure Tform1.Button1Click(Sender: TObject);

var R: TRect;

P: TPoint;

begin

Printer.BeginDoc;

with Printer.Canvas do begin

Pen.Color := clBlack;

Brush.Color := clBlue;

Brush.Style := bsCross;

Font.Size := 14;

R := Rect( 10, 10, 160, 160);

Ellipse(R.Left, R.Top, R.Right, R.Bottom);

P := Point(60, 180);

TextOut (P.X, P.Y, 'Ellips');

end;

Printer.EndDoc;

end;

Ushbu kod ostiga “Ellips” so`zi yozilgan aylana tasvirini chizadi. Bu holda matnni grafik vositalardan foydalanib chop qilinmoqda.



TPrinter klassining Canvas hususiyati yana bir qiziq imkoniyatni taklif qiladi: forma kanvasidagi tasvirli va matnli ma`lumotlarni ortiqcha qiyinchiliklarsiz chop qilish mumkin. Faraz qilaylik, forma kanvasida biror geometrik tasvir yaratilgan bo`lsin.

16.2-rasm. Forma kanvasidagi geometrik tasvir

Uni yasashda TCanvas klassining hususiyat va metodlaridan foydalanish mumkin. DemoPrintCanvas ilovasida 16.2-rasmni hosil qilishda OnPaint metodidan foylanilgan. Bu tasvirni chop qilish uchun forma kanvasidan kerakli o`lchamdagi to`g’ri to`rtburchak ajratib olinadi va uni printer kanvasiga uzatiladi. 16.2-listingda bu vazifani printBtnclick metodida CopyRect metodi yordamida amalga oshirilgan.

 Listing 16.2. DemoPrintCanvas loyihasining bosh forma- sining implementation sektsiyasi



implementation

{$R *.DFM)

uses Printers;

procedure TMainForm.FormPaint(Sender: TObject);

begin with Canvas do begin

Pen.Color:= clBlack; Pen.Width:= 2;

Brush.Color := clWhite; Brush.Style := bsClear;

Font.Size := 14;

Ellipse(10, 10, 160, 160 );

Brush.Color := clRed;

Ellipse(60, 60, 110, 110);

Brush.Color := clBlue; Brush.Style := bsFDiagonal;

Ellipse( 17, 35, 153, 75);

Brush.Color := clBlue; Brush.Style := bsBDiagonal;

Ellipse(16, 85, 154, 135);

TextOut(50, 180, 'Ellips');

end;

end;

procedure TMainForm.PrintBtnClick(Sender: TObject);

var ImageRect: TRect;

begin

ImageRect := Rect(10, 10, 160 , 200);

with Printer do begin

BeginDoc;

Canvas.CopyRect(ImageRect, MainForm.Canvas, ImageRect);

EndDoc;

end;

end; end.

17.6. Chop qilishdagi hatoliklarni nazorat qilish

Ilovalarning printer bilan ishlashdagi ishonchliligini oshirish uchun Exception bazaviy klassidan kelib chiqadigan EPrinter klassidan foyda-lanish mumkin. U standart usulda try ... except blogi orasida ko`rsatiladi:

with Printer do try

BeginDoc;

Canvas.TextOut(100, 100, 'DELPHI tili’ );

EndDoc;

except

on E: EPrinter do ShowMessage('chop qilishdagi hatolik');

end;


Download 9,81 Mb.

Do'stlaringiz bilan baham:
1   ...   161   162   163   164   165   166   167   168   ...   209




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish