Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Constructor TDrawArea




Private

Interface

uses Windows, Messages, SysUtils, Classes, Graphics,

Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type

TForm1 = class(TForm) Panel1: TPanel; btnRedCircle: TButton; btnBlueCircle: TButton; btnBlackSquare: TButton; btnWhiteSquare: TButton; btnYellowEllipse: TButton; btnGreenEllipse: TButton; Button1: TButton;

procedure AllBtnClick(Sender: TObject); procedure Button1Click(Sender: TObject); end;

ArrayColor=array[1..6] of TColor; TDrawArea = class(TPersistent)

 
 

xl(yl,x2,y2:integer;

FArrayBrushColor: ArrayColor;

FPenColor: TColor;

function GetBrushColor(pindex:integer): TColor; public

constructor InitColor;

constructor InitXY(NewXl,NewYl,NewX2,NewY2rinteger);

property PPenColor: TColor read FpenColor

write FpenColor Default clBlack;

property PBrushColor[pindex:integer]: TColor


 

 

procedure DrawFig; override; end;

TEllipse=class{TDrawArea)

Procedure DrawFig;override; end;

TCircle = class(TDrawArea)

procedure DrawFig;override; end; var Form1: T Form1;

MySquare:TSquare; MyEllipse: TEllipse; MyCirde: TCircle; implementation

{$R *.DFM}

Begin InitColor

FArrayBrushColor[1]:=clRed;

FArrayBrushColor[2]:=clBlue;

FArrayBrushColor[3]:=clBlack;

FArrayBrushColor[4]:=clWhite;

FArrayBrushColor[5]:=clYellow;

FArrayBrushColor[6]:=clGreen;

End;

Constructor TDrawArea.InitXY(HewXl,NewYl,NewX2,NewY2:

integer);begin

xl:=NewXl;

yl:=NewYl;

x2:=NewX2;

y2:=NewY2; end; Function TDrawArea.GetBrushColor(pIndex:integer):TColor;

begin

result:=-1;

if pIndex in [1..6] then result:=FArrayBrushColor[pIndex]; end;

procedure TDrawArea.Drawlt; begin

DrawFig; end;

procedure TSquare.DrawFig; begin

Form1.Canvas.Rectangle(xl,yl,x2,y2);


 




 

end;

procedure TCircle.DrawFig;

begin

Form1.Canvas.Ellipse(xl-x2,yl-x2,xl+x2,yl+x2);

end;

procedure TEllipse. DrawFig; begin

Form1.Canvas.Ellipse(xl,yl,x2,y2);

end;

procedure TForm1.AllBtnClick(Sender: TObject);

begin

if (Sender as Tbutton=btnRedCircle) or

(Sender as Tbutton=btnBlueCircle) then begin

if not assigned(MyCircle) then begin MyCircle:=TCircle.Create;

MyCircle.InitColor;

MyCircle.InitXY(50,50,40,0); Form1.Canvas.Pen.Color:=MyCircle.PPenColor;

end;

if Sender as Tbutton = btnRedCircle then begin Form1.Canvas.Brush.Color:=MyCircle.PBrushColor[1]; MyCircle.Drawlt;

end;

if Sender as Tbutton = btnBlueCircle then begin Form1.Canvas.Brush.Color:=MyCircle.PBrushColor[2]; MyCircle.Drawlt;

end;

end;

if (Sender as Tbutton=btnBlackSquare) or

(Sender as Tbutton=btnWhiteSquare) then begin

if not assigned(MySquare) then begin MySquare:=TSquare.Create;

MySquare.InitColor;

MySquare.InitXY(110,10,190,90}; Form1.Canvas.Pen.Color:=MySquare.PPenColor;

end;

if Sender as Tbutton = btnBlackSquare then begin Form1.Canvas.Brush.Color:=MySquare.PBrushColor[3]; MySquare.Drawlt;

end;

if Sender as Tbutton = btnWhiteSquare then begin Form1.Canvas.Brush.Color:=MySquare.PBrushColor[4]; MySquare.Drawlt;

end;

end;

if (Sender as Tbutton=btnYellowEllipse) or

(Sender as Tbutton=btnGreenEllipse} than begin

if not assigned(MyEllipse) then begin


MyEllipse:=TEllipse.Create; MyEllipse.InitColor; MyEllipse.InitXY(220,10,280,90); Form1.Canvas.Pen.Color:=MyEllipse.PPenColor; end;

if Sender as Tbutton = btnYellowEllipse then begin Form1.Canvas.Brush.Color:=MyEllipse.PBrushColor[5]; MyEllipse.Drawlt; end;

if Sender as Tbutton = btnGreenEllipse then begin Form1.Canvas.Brush.Color:=MyEllipse.PBrushColor[6]; MyEllipse.Drawlt; end; end; end;

procedure TForm1.Button1Click(Sender: TObject); begin

if assigned(MyCircle) then MyCircle.Free; if assigned(MySquare) then MySquare.Free; if assigned(MyEllipse) then MyEllipse.Free; close; end; end.

В данном примере показано, как работать со свойствами типа Array. Следует обратить внимание, что каждый из трех используемых объектов должен строиться один раз. Для проверки существования объекта использу­ется функция Assigned. При выходе из программы (Button1ciick.) все объекты разрушаются. В данной программе показано, как использовать один обработчик событий (AllBtnClick) для всех шести кнопок построения гео­метрических фигур. Используемые конструкторы InitColor и InitXY соз­даны не для построения объектов, а для инициализации данных, поэтому в их описании отсутствует вызов inherited.

ФАЙЛОВЫЕ ТИПЫ

Тип файл представляет собой последовательность элементов одного ти­па, обычно расположенных на внешнем устройстве, например на жестком Диске. Можно выделить три основных типа файлов на физическом устройст­ве:

1. Данные в файле располагаются в виде строк разной длины. Каждая строка заканчивается двумя символами #13 #10 (#13 - возврат каретки,#10


перевод строки). Эти символы отделяют строки друг от друга. Максималь­ный размер строки ограничен, чаще всего он равен 128 символам, можно увеличить этот размер до максимального, равного 255 символам. При поиске нужной информации в таком файле необходимо найти #13 #10, прочитать найденную строку и проверить, есть ли заданная информация в этой строке, затем опять следует искать #13 и #10 и т.д. Таким образом, поиск может осуществляться, последовательно читая этот файл только сначала, т.е. файл рассматривается как один массив строк, разделенных символами #13 #10. Если нужно вставить информацию в середину такого файла, то это можно сделать путем переписывания старого файла в новый со вставкой новых строк и последующим удалением старого файла. Операционная система до­пускает дописывание информации в конец файла. В соответствии со свойст­вами такой файл называют файлом последовательного доступа, или тек­стовым.

2. Данные представляются в виде записей одинаковой длины. Никаких
разделителей между записями нет. Операционная система может располо­
жить головку считывания-записи информации на любой байт (установить
файловый указатель). Так как все записи одинаковой длины, файловый ука­
затель операционной системой может быть установлен на начало любой за­
писи, таким образом получается, что все записи будто бы пронумерованы.
Первая запись нумеруется числом 0. Если длина записи равна 80 байт, то
установку файлового указателя на начало второй записи (запись с номером
1) операционная система выполняет на отметке 80 байт. Эту запись можно
прочитать или перезаписать. Такие файлы являются типизированными -
файлами прямого доступа (в отличие от текстовых файлов).

3. Файлы рассматриваются как последовательность байт. Эти файлы яв­
ляются файлами прямого доступа с длиной записи, чаще всего, равной 1
байту. С помощью такого подхода можно прочитать любой файл, но трудно
интерпретировать информацию.

При работе с файлами автоматически проверяются ошибки ввода или вывода, если включена (по умолчанию) директива {$I+}. В этом случае при возникновении ошибки программа завершается. Если директива проверки файловых ошибок отключена {$I-}, то программа продолжает выполняться и можно проверить результат работы с файлом с помощью стандартной функ­ции IOResult.

ТЕКСТОВЫЕ ФАЙЛЫ

Этот тип файлов объявляется с помощью файловой переменной, типа TextFile:Var т: TextFile;.

Перед тем как начинать работу с файлом, необходимо файловую пере­менную связать с конкретным файлом. Это осуществляется с помощью сле-


дующей процедуры: AssignFile((<ф.п.>, Name);, где <ф.п.>-файловая переменная, Name - строка типа String, содержащая имя файла, например AssignFile(T, ‘a.txt');.Строка Name может содержать не только имя файла, но и путь к файлу.

По окончании работы с файлом его нужно закрыть процедурой Close-File (<ф. п. >). Это требование обязательно должно соблюдаться для фай­лов, в которые записывалась информация. С помощью файлов можно вво­дить информацию в память, хранить информацию, передавать ее от одних программных единиц к другим. Для чтения и записи информации использу­ются встроенные стандартные процедуры.

Перед чтением информации необходимо явно указать, что файл будет использоваться только для чтения с помощью процедуры Reset (<ф.п.>). Эта процедура устанавливает файловый указатель на начало файла. Чтение информации осуществляется с помощью следующих процедур:

ReadLn(<ф.п.>, <список>); Read(<ф.п.>, <список>);.

Первая процедура позволяет полностью читать строку вместе с симво­лами #13 #10. Вторая процедура читает элемент или несколько элементов строки, но в пределах одной строки. Например, Read(T, a,b,c); ReadLn(T, a,b,c);.

Если а, Ь, с - строковые переменные, то первый оператор заполнит дан­ными только одну переменную а (Ь и с останутся пустыми).

Текстовые файлы имеют одну особенность: несмотря на то, что файл со­стоит из строк, он может содержать, наряду со строковыми данными, и дру­гие типы данных, например числовые. Прочитать из текстового файла мож­но данные следующих типов: целого, вещественного, символьного, строко­вого. Дополнительно к перечисленным типам записывать можно еще логи­ческий тип данных.

При чтении чисел автоматически происходит перекодирование инфор­мации в двоичный код. Если элементы не строковые, то в переделах одной строки файла может находиться несколько элементов, обязательно отделен­ных друг от друга разделителями. В качестве разделителей используются следующие символы: пробел, символ табуляции, возврат каретки (#13). При подготовке информации необходимо соблюдать эти требования - запи­сывать в явном виде разделители. Процедуры Read и ReadLn читают инфор­мацию последовательно по одному символу (в том числе читаются #13, #10 и #26 - конец файла), причем, если чтение происходит не в строковые пере­менные, то значимыми для Read являются все виды разделителей, а для ReadLn - только #13 и #10. Например, при чтении информации в строковые переменные String или PChar заносятся очередные символы до #13 и #10.


Для подготовки текстовых файлов можно использовать не только про­граммную среду Delphi, но и любые простые редакторы.

При записи информации необходимо для файла задать явно режим запи­си. Для текстовых файлов режим записи задается одновременно с режимом создания нового файла. При этом используется процедура Rewrite (<ф. п. >). Если файл, указанный в соответствующей процедуре AssignFile, существует, то он уничтожается и создается новый. Запись ин­формации в файл осуществляется процедурамиWrite(<ф.п. >,<список>) или WriteLn(<ф. п. >,< список >). Write записывает очередной элемент строки, WriteLn записывает строку вместе с #13 и #10. В отличие от проце­дур чтения, в списке можно указывать не только переменные, но и выраже­ния. Если элементы числовые, то в списке необходимо явно предусматри­вать разделители между этими элементами. Например, writeLn(T, 'число а=',а,' ', 'число b=' ,b);.




Поделиться с друзьями:


Дата добавления: 2014-12-29; Просмотров: 462; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.