Учене Делфи - въведение в ООП - рисунка, живопис и печат в Делфи

нови материали

Рисуване, боядисване и печат

Windows среда често се нарича графика - всички текстове, изображения, както и контроли са показани в графичен вид. Съответно, цялата продукция на приложения за Windows, за разлика от конзолата програми обсъдени по-рано, е графично в природата.







Графика в Windows

Когато заявлението трябва да покаже някаква информация на екрана, операционната система - Windows - то предоставя на разположение на прозорците, ориентирани към графика. Това означава, че всяка форма (както впрочем и други обекти) се разглежда като повърхност за боядисване - платно (платно).

Когато конструкция е направен във формата на фигурата, изображението изход е балансиран при неговите краища, т.е. показва само тези части, които са поставени на прозореца на платно. Този подход гарантира, че оттеглянето на едно приложение не засяга клиентската област на други приложения, на която, в действителност и се основава на прозорци система Windows.

Референтната точка координати в прозореца е получено в горния ляв ъгъл на свой клиент зона, ограничена от рамката (т.е. само тези размери, които се разпознават и свойства ClientHeight ClientWidth). За други елементи, които имат платно за рисуване на такава граница не може да бъде - в този случай, в обхвата на виртуалната платното са границите на обекта.

Като цяло, да се обръщат директно към функциите на графични необходими в случаите, когато искате да се създаде специален контрол, че не се осигурява от стандартни компоненти. В такива случаи, всички се притеснявате за навременно преначертаване, визуален отговор на действията на потребителите и т.н. предприемачът е длъжен да поеме, като предоставя всички необходими за този код. Разбира се, това е доста трудна работа, особено ако се създаде компоненти dozhzhen осигуряват интерактивност на правилното ниво.

Добрата новина е, че Делфи има редица готови за употреба компоненти, които се грижат за предприемача да се направи абсолютно никаква причина, защото всички рутинната работа вече са приключили и Delphi VCL разработчици. Освен това, има много "празни" в VCL, въз основа на който можете да създадете свои собствени компоненти, отново без пряка връзка с характеристиките на графичен дисплей.

В същото време, на чертежа може да бъде полезен и по-прости ситуации, като например, когато е необходимо да се оттеглят всички графични примитиви, или дори да се даде възможност на потребителя да направи нищо. И накрая, ние считаме, тук въпросът за рисуване, за да илюстрира още веднъж как класовете и използването на ООП, и в същото време да проучи друг фрагмент от VCL.

Обектът на Canvas

За много от елементите на компоненти на потребителския интерфейс, използвани в Windows-базирани приложения, базирани на TWinControl клас, който е пряк наследник на вече смята класа TControl нас. Но много други визуални елементи, идващи от друга от неговия наследник - TGraphicControl клас, който е по-прост и с недвижима собственост, като платното, с помощта на които можете да буквално се направи в Windows. Строго погледнато, съществува Canvas имота не само в този клас, но и редица други, включително и тези, базирани на TWinControl. Въпреки това, във всеки случай, този имот ще бъде представена в същия клас - TCanvas.

Обектът на Canvas капсулира взаимодействието с Windows GDI (Graphic Device Interface - Graphics Device Interface). GDI дръжки цялата графична мощност, предназначена за монитора, както и за принтери и други печатащи устройства. Но тъй като взаимодействието с GDI, както впрочем и други подсистеми на Windows API директно - неприятен и склонен към грешки, в Делфи и е предоставена TCanvas клас, който осигурява сравнително прост и удобен достъп до GDI.

Сама по себе си, на платното (Canvas) е повърхност, върху която да се показва текст и други графики - линии, правоъгълници, елипси и т.н. Въпреки това, при по-внимателно вглеждане, може да се види, че платното е самолет, състояща се от отделни точки - пиксели. На пиксела - е основен елемент на графичния вход, представляващ една точка. В действителност, при изготвянето на платното просто рисува върху някои от своите точки един или друг начин цвета. Но, разбира се, работи с платното чрез методите, предоставени от TCanvas на класа, тя може да бъде кавга да се потвърди не само точки, но и текстови, линии, правоъгълници, многоъгълници, окръжности и дори готови снимки. Помислете за основните свойства и методите на Canvas обект, като се позовават на маса 9.1.

Таблица 9.1. Свойства и методи на TCanvas

Тип стойности и параметри

X, Y: цяло число; Graphic: TGraphic

Показва графично изображение, като се започне от каза произход (горен ляв ъгъл)

Помислете за някои имоти по-подробно. Нека започнем с пиксели. Този имот, който е двумерен масив съдържа информация за цвета на всяка точка от повърхността, описвайки по този начин по цялата повърхност на платното. Промяна на цвета на дадена точка, можем да показва изображения. Например, ако трябва да промените цвета на точката в горния ляв ъгъл, можем да запишем следния израз:

Тук ние се обърна към първия елемент от първата серия на масива, което съответства точно на горния ляв ъгъл на платното и го възлага на стойност clRed, т.е. Зададохме на червено.

Тъй като се използват различни методи Платно обект може да бъде показан не само точки, но също така и най-различни форми, както и текст, другите свойства само ви позволяват да настроите изхода на тези цифри и текст. Така че, за текста с помощта на имота на шрифта, който, от своя страна, TFont клас и с качества като цвят (цвят), име (шрифт), Size (размер) и стил (стил). Последното свойство има 4 знамена, за да направят шрифта удебелен шрифт, курсив, подчертаване или зачертаване:

Canvas.Font.Color: = clBlue; // шрифт е синьо Canvas.Font.Name:='Arial; // избран слушалки Arial Canvas.Font.Size: = 12; // задаване на размера на шрифта в 12pt Canvas.Font.Style:=[fsBold,fsItalic]; // шрифт е удебелен курсив

По отношение на такива свойства на платното като четка и писалка, за да ги предоставя от промяната на цвета и стила линия (за Pen) или пълнене (за четка). В допълнение, писалката може да се определи режим на линия широчина и смесване на цветовете. Съответно, ние имаме следните свойства:

  • Цвят - определя цвета на линията за писалката или четка за попълване;
  • Стил - стила на линията или запълване. За линии, следните стойности: psSolid, psDash, psDashDot, psDashDotDot, psClera и psInsideFrame. За да се запълни: bsSolid, bsClear, bsHorizontal, bsVertical, bsFDiagonal, bsBDiagonal, bsCross, bsDiagCross;
  • Ширина - определя дебелината на линията в пиксели.






Имайте предвид, че за промяна на стила на линията е възможно само, ако дебелината му е 1 пиксел (което, между другото, е по подразбиране). За всеки друг дебелина стойност линия винаги ще бъде твърда - psSolid.

съставяне на фигури

процедура TForm1.FormClick (Sender: TObject); започнем край;

Сега остава да го пуснат в кода, който обръща линията. Тъй като вече има форма на Canvas имущество, би било достатъчно просто да се обжалва пред него методи MoveTo и LineTo. Нека линията започва с отместване на 10 пиксела от горния ляв ъгъл на вертикални и хоризонтални, и ще продължи до точка 200 пиксела хоризонтално. В резултат на това кодът ще бъде, както следва:

процедура TForm1.FormClick (Sender: TObject); започне Form1.Canvas.MoveTo (10,10); Form1.Canvas.LineTo (200,10); приключи;

Сега остава да стартирате приложението и кликнете върху някоя Мета във формуляра. Резултатът е тънък хоризонтална изходна линия. Добавянето на кода на процедура извика методът Ellipse, получаваме изграждането на елипсата и правоъгълник - правоъгълник:

Ето, и в двата случая, ние имаме изградена дясната фигура, т.е. кръг и квадрат. Но тъй като за класа TCanvas не определя методи, които изграждат тези цифри, ние използвахме методите на елипсата и правоъгълника, като се има предвид кръга и квадрат като специални случаи на тези видове фигури. В същото време, ако е необходимо, можете да създадете свои собствени методи, като ги добавите към класа TCanvas. За да направите това, всъщност, е проста: това е достатъчно, за да се определи нов клас, който е наследник на TCanvas, и да се определят два нов метод за това. Нека да наречем този клас TMyCanvas и методи - Circle и площад:

TMyCanvas = клас (TCanvas) процедура кръг (Rad, X, Y: число); процедура Square (размер, X, Y: число); приключи;

Определението на този клас трябва да бъде поставен в интерфейса част, веднага след определянето на класа TForm1, която вече е поставена в самия модул Delphi. Като част от процеса на изпълнение, ние определяме самите функции:

процедура TMyCanvas.Circle (Rad, X, Y: число); започнем край; процедура TMyCanvas.Square (размер, X, Y: число); започнем край;

Сега остава да се напише код, който изпълнява строителните фигури. Да започнем с това, ние приемаме, че за параметъра метод Circle Rad среден радиус на окръжността, а параметрите X и Y - нейния център. По този начин, ние можем да използваме Ellipse наследил метода, замествайки желаните настройки в своя предизвикателство:

Елипса (X-Rad, Y-Rad, X + Rad, Y + Rad);

Що се отнася до метод, пл си параметър Размер означава размер на квадрата, и X и Y - координатите на горния ляв ъгъл. По този начин, можете да използвате метода правоъгълник, като посочва подходящите настройки за него:

Правоъгълник (X, Y, X + Размер, Y + размер);

Сега, когато се определят методите и нов клас е готов, той трябва да се занимава с това как да го използвате. На първо място, ние трябва да дефинирате променлива - например. В допълнение, ние трябва да я създадете с помощта на Създаване конструктор. И накрая, като използвате дръжката имота (индекс), ние трябва да свържем нашия обект с формата на платно. Всичко това може да бъде поставен във всички един и същ метод на обработка на един клик.

процедура TForm1.FormClick (Sender: TObject); Var MC: TMyCanvas; започне MC: = TMyCanvas.Create; // използване конструктор на клас MC.Handle изходното: = Canvas.Handle; // определя изхода на стъклото платно MC.Circle (50200100); // направи кръг с диаметър 50 пиксела MC.Square (50100100); // направи квадрат със страна 50 пиксела MC.Free; приключи;

Разбира се, всички методи наследен клас TMyCanvas наследени от TCanvas, може да се използва, включително и същ Създаване и снимки, която сме използвали. Що се отнася до другите свойства и методи, можете да направите същото, например, за да зададете дебелината и цвета на линията, начертайте линия с помощта на MoveTo и т.н.

MC.Pen.Width: = 3; MC.Pen.Color: = clRed; MC.MoveTo (10,10); MC.LineTo (200,10); MC.Brush.Style:=bsHorizontal;

По този начин можем да направим заключение фигури, като се използва пълнеж, оцветяване и линия, получена по-дебел и променя цвета си (фиг. 9.1).

Учене Делфи - въведение в ООП - рисунка, живопис и печат в Делфи

Фиг. 9.1. извеждането на заключение на прозореца на платно

Завършен кода на програмата може да бъде намерена в директорията Demo \ Part2 \ платно. Той също показва друго изпълнение на кръг на метод - за създаване на пръстен на кръгове.

разпечатки

Продукция на текст и графика е възможно не само да се дисплей, но и към принтера. За да направите това, просто използвайте Canvas имот, но не се образува специален обект на принтер. За да използвате тази възможност, трябва да бъде свързан с програма модул принтери, прицелвайки се в списъка на модули използва, т.е. в приложения. Не е нужно да се създаде на дадено копие на TPrinter, нито се грижи за отстраняването му - просто използвате променлива принтер, който е създаден за програмата автоматично, ако модула Set принтери.

В допълнение към свойствата на Canvas, принтер обект има някои други свойства, и методи, необходими за отпечатване. Сред методите на този обект трябва да се отбележи, на първо място, и BeginDoc EndDoc. Използват Тези техники, съответно, за началото и в края на процеса на печат. Отбелязваме също така методът NEWPAGE, използвани за обозначаване на началото на нова страница, както и метода Прекратяване на прекъсване на процеса на печат. По отношение на имотите, те са изброени в таблица 9.2.

Таблица 9.2. Клас имоти TPrinter

Определя текста, който определя заданието за печат в диспечера на принтера за Windows

Преди всичко, за да се покаже не печатате, трябва да направите подготвителната работа. Това се дължи на няколко причини, включително и факта, че принтерът не може да печата отвеждане - следователно, че е необходимо да се определи височината. Освен това, различните принтери от различни изход резолюция, която зависи както от модела и настройките за качество на печат. В случай на текст изход също трябва да определи броя на линиите, които могат да се поберат на страницата. Въпреки това, в най-простия случай за печат е достатъчно лесен за отваряне на документ за печат, използвайки метод BeginDoc и възлага свойства на принтера платното желания съдържание:

Printer.BeginDoc; Printer.Canvas.TextOut (150, 150 'Текст Print'); Printer.EndDoc;

Въпреки това, ако текстът е твърде дълъг, той няма да бъдат прехвърлени към следващия ред, а просто няма да бъдат отпечатани. Ето защо, за да изведете на достатъчно голям обем текст, все още трябва да се справят с оценки и жп линии до заключение.

В същото време, ако имате нужда да отпечатате само текста и дизайна не е от значение, можете да използвате стандартната процедура writeln, като посочва изхода на принтер за нея. Това се прави с помощта на AssignPrn процедура:

Var F: текстов файл. AssignPrn (F); Препишете (F); writeln (F ", текстът да бъде отпечатан. '); CloseFile (F);

Разбира се, по този начин е по-лесно, по-специално прехвърлянето на дълги линии ще се извършва автоматично, но той има не е достатъчна: не е достатъчно, че така не е възможно да се покаже графики, но шрифтът е разрешено да използва само един, без възможност за дори да променяте размера или марката в хода на за отпечатване на документи.

За да видите как да работят и двете от тези методи, е възможно да се приложи например, разположен в Demo \ Part2 \ Print указателя.

Но да се върнем към графичен изход за принтер. Както вече бе отбелязано, първо трябва да се определи на разположение за печат и неговия размер в пиксели района. За удобство, е полезно да се определи променливи, които са отговорни за размера на полетата от двете страни на документа. В случая на производствените линии текс също трябва променлива, която определя вход позицията на текущия ред. Що се отнася до предмета на дисплея, след което аз се опитвам да рисувам рамката за цялата страница, разширяване на нейните полета, както и текста на различен размер и стил, а някои дори геометрична форма. Всичко това можем да поставим в функцията, която ще се нарича PrintAny (вж. Обява 9.1).

Обявата 9.1. Печат на текст и графика

процедура PrintAny; Var LMargin, RMargin, TMargin, BMargin: цяло число; FH, хоризонталната позиция: цяло число; започнем с принтер, Printer.Canvas да започнат LMargin: = PageWidth Разделение 10; // полето отляво 10% от ширината на RMargin на страница: = PageWidth DIV 20; // полето до 5% от широчината на TMargin на страница: = PageHeight DIV 20; // поле в горния 5% от BMargin страницата с височина: = PageHeight Разделение 10; // поле е под 10% от дял страница височина = "Print Test Page '; // печатащата глава BeginDoc; Pen.Width: = 3; Правоъгълник (LMargin, TMargin, PageWidth-RMargin, PageHeight-BMargin); // рамка Font.Name:='Arial "; Font.Style:=[fsBold,fsUnderline]; Font.Size: = 24; FH: = абсолютен (Font.Height); // получите височина хоризонталната позиция шрифта: = TMargin + FH; // изчисляване на горната граница за изхода на текст TextOut (LMargin, хоризонталната позиция, "субект"); Font.Style: = []; Font.Size: = 10; FH: = абсолютен (Font.Height); Хоризонталната позиция: = хоризонталната позиция + TMargin + FH; // изчисли отново отстъп Друг изход TextOut (LMargin, хоризонталната позиция, "текст ал. '); Елипса (LMargin * 2, хоризонталната позиция + LMargin, LMargin * 4, хоризонталната позиция + LMargin * 3); // направи кръг EndDoc; приключи; // края ширина край; // крайни процедури PrintAny

Тук са били идентифицирани областите, на първо място, следвана от тези полета е изготвен от правоъгълник, който формира рамката на страницата и след това близо с удебелен шрифт и са подчертани произлиза думата "обект", а под него вече общ и по-дребен шрифт - изразът "параграф текст". След този кръг с радиус равен на ширината на лявата граница е бил пуснат. Така, в един документ е вписано като действителните графики и текстови низове, които, обаче, в този случай също се разглеждат като графики.

Един пример на тази функция може да се намери в AnyPrint на програмата, която се намира в директорията Demo \ Part2 \ Print2.


SNK GSCP - нова библиотека за PHP 5!
Web Studio и Visual Workshop Библиотека:
Стандарти за уеб-технологии
Монопол ст. 2.0.2 Downloads:
изтегляне на софтуер Продукти:
програми и книги