КАТЕГОРИИ: Архитектура-(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. Данные представляются в виде записей одинаковой длины. Никаких 3. Файлы рассматриваются как последовательность байт. Эти файлы яв При работе с файлами автоматически проверяются ошибки ввода или вывода, если включена (по умолчанию) директива {$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; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |