Дефиниране на свойства /характеристики/
Свойството най-общо представлява име, за което са дефинирани методи за четене /read/ и писане /write/ или чрез което се осъществява директен достъп до данни. Всеки път, когато прочитате или записвате стойността на свойството, можете да осъществите досъп до поле на класа или да извикате метод. Например дефиницията на свойството Month на обекта, представляващ дата, има вида:
property Month: Integer
read FMonth write SetMonth;
За да получите стойността на свойството Month, този код ще прочете стойността на полето FMonth, докато при смяна на стойността ще се извика методът SetMonth. Директивата write на свойството може да бъде пропусната. Така се създава свойство само за четене /read-only/. Технически можете да пропуснете и read на свойството, при което дефинирате свойство само за запис /write-only/. Свойствата предназначени за достъп по време на създаване на формата /design-time/ се декларират в частта published на декларацията на класа. Всички други, декларирани в частта public, не са достъпни по време на създаване на формата, а само по време на изпълнение на програмата /run-time/. Read-only свойствата се дефинират в частта public /protected или private/. Published свойствата трябва да са разрешени както за четене, така и за запис. За да видите стойността на published свойство по време на създаване на формата или да го промените, можете да използвате Object Inspector.
Пример:
Type
TForm1=class (TForm)
private
FClicks: Integer;
procedure SetClicks(const Value: Integer);
public
property Clicks: Integer
read FClicks write SetClicks;
end;
implementation
procedure TForm1.SetClicks(const Value: Integer);
begin
FClicks:=Value;
end;
Въпреки че всеки компонент има свой набор от свойства, съществуват и такива, които са общи за всички компоненти:
Свойство
|
Описание
|
Align
|
Определя подравняването на контрола в областт на родителския контрол
|
AutoSize
|
Показва дали контролът трябва да определя размера си спрямо съдържанието си
|
Caption
|
Заглавие на контрола
|
Color
|
Задава фоновия цвят на контрола
|
Ctl3D
|
Задава дали контрола ще има триизмерен изглед
|
Cursor
|
Определя показалеца на мишката при преминаване над контрола
|
DragCursor
|
Определя показалеца на мишката при влачене
|
DragMode
|
Определя дали контролът поддържа drag-and-drop функционалност
|
Enabled
|
Определя дали контролът е активен или не
|
Font
|
Определя шрифта, с който ще се извежда текста в контрола
|
Height
|
Определя вертикалния размер на контрола
|
HelpContext
|
Задава контекстно число, което ще се използва за автоматично извикване на помощна инф.
|
Hint
|
Символен низ, използван като подсказка за контрола
|
Left
|
Хоризонтална координата на горния ляв ъгъл на компонента
|
Name
|
Уникално име на инстанцията на компонента, което се използва в програмата
|
Parent
|
Задава родителския контрол на текущия
|
ParentColor
|
Задава дали компонента ще използва свойството Color от родителя
|
ParentCtl3D
|
Задава дали компонента ще използва свойството Ctl3D от родителя
|
ParentFont
|
Задава дали компонента ще използва свойството Font от родителя
|
PopupMenu
|
Задава контекстно неню на контрола
|
ShowHint
|
Задава дали ще се показва подсказка
|
TabOrder
|
Задава номера на контрола при обхождане на контролите с клавиша Tab в родителя
|
Tag
|
4-байтово числово поле редназначено за съхраняване на допълнителна информация
|
Top
|
Вертикалната координата на горния ляв ъгъл на контрола
|
Visible
|
Задава дали контролата е видима
|
Width
|
Хоризонтален размер на контрола
|
Стойността на свойството Name се използва, за да се дефинира име на обекта в декларацията на класа на формата. С това име по нататък се обръщате към обекта. Ето защо стойността на това свойство трябва да се подчинява на правилата за идентификатор в езика Pascal. Свойството Tag е допълнителен адрес в паметта, където можете да запишете собствени данни без да се налага да създавате собствен клас. Това свойство съдържа 4-байтово число, в което можете да съхраните указател, обект или нещо друго.
Някои от общите за компонентите методи са следните:
BeginDrag
|
Стартира операция ръчно влачене
|
ClientToScreen
|
Преобразува клиентските координати в екранни
|
Create
|
Създава нова инстанция /конструктор/
|
Destroy
|
Унищожава инстанция /деструктор/
|
EndDrag
|
Ръчно прекратяване на операцията влачене
|
Free
|
Изтрива обекта от паметта /за формите се използва Release/
|
GetTextBuf
|
Връща текста или заглавието на контрола
|
GetTextLen
|
Връща дължината на текста или заглавието на контрола
|
ScreenToClient
|
Преобразува екранните координати в клиентски
|
SetBounds
|
Променя позицията и размера на контролите
|
SetTextBuf
|
Задава текста или заглавието на контролите
|
Update
|
Веднага пречертава контрола, ако преди това е имало други заявки за пречертаване
|
Стандартни компоненти
Етикетът е контрол, който визуализира ред от текст на формата. Той няма собствен прозорец, тъй като не е наследник на класа TWinControl. Етикетът може да бъде използван за обозначаване на контрол и за установяване на фокуса върху този контрол, когато потребителя натисне съответстващия на етикета бърз клавиш. За целта използвайте свойството FocusControl. Той не допуска директно въвеждане на символи от клавиатурата. Най-често се използва за визуализирането на статичен текст или текст, генериран от програмата.
Edit контролът позволява въвеждането на един ред текст от потребителя. Той може да се използва и за визуализация на текст, подобно на контрола Label. Този контрол е необходим, когато искате да позволите на потребителя да избере текст и да го копира в Clipboard. Edit контролът използва свойството Text, за да представи текста. Ако желаете да се въвеждат само специфични символи, трябва да обработите събитието OnKeyPress.
За да специфицирате по точно възможния вход от клавиатурата, използвайте компонента MaskEdit, който има свойство EditMask. То представлява низ, задаващ всеки символ от текста.
Memo контролът позволява въвеждането на текст от потребителя на повече от един ред. Той е подходящ за представянето на по-голямо количество информация. Обемът на текста обаче не може да надхвърли 32KB. Можете да работите с текста ред по ред, използвайки свойството Lines от тип TStrings, или с целия текст, използвайки свойството Text от тип TCaption.
Съществуват два стандартни контрола на Windows, които позволяват на потребителя да избере между няколко възможности. Контролът CheckBox представлява поле за отметка, което означава, че съответната възможност може да бъде избрана без значение от състоянието на други полета за отметки. Задаването на стойност True на свойството AllowGrayed ви позволява да показвате три състояния на полето – избрано, неизбрано и деактивирано, които могат да се променят, когато потребителят избира полето.
Контролът RadioButton позволява само един възможен избор от множество възможности. Два такива контрола в една форма или в една група не могат да бъдат избрани едновременно и единият от тях трябва винаги да е избран. За да създадете група от RadioButton контроли, използвайте контролът GroupBox, който позволява както визуално, така и функционално отделяне на групи. Подобно действие има и RadioGroup контролът, който може да се използва специално за радио бутони. Всеки радио бутон в рамките на групата е елемент на списък. Заглавието на избран елемент се получава по следния начин:
Text:=RadioGroup1.Items [RadioGroup1.ItemIndex];
Контролът RadioGroup може автоматично да подравнява радио бутоните си в една или повече колони в зависимост от свойството Columns. Той ви позволява да добавите нови елементи по време на изпълнение на програмата, като просто добавите нови низове към списъка от низове Items.
Бутоните най-често се използват в диалоговите прозорци. С помощта на контролът Button ножете да инициирате действия. За идентификация на бутона от потребителя използвайте свойството Caption, което е от тип String.
Контролът BitBtn ви позволява да поставите върху него не само текст, но и картинка /bitmap/, като използвате свойството Glyph. Свойството Kind ви позволява лесно да създадете стандартни бутони от вида на Ok, Cancel, Help и др., при което бутона се асоциира с предварително дефинирани картинка и текст. Свойството ModalResult определя начина, по който бутонът затваря родителската си форма. Когато бутонът е натиснат, свойството ModalResult на формата приема стойността на свойството ModalResult на бутона. В случай, че една форма е визуализирана модално, потребителят трябва да я затвори, ако иска да продължи работата си с други форми. Повечето диалогови прозорци са модални. Ако формата не модална, тя може да стои на екрана, докато потребителя работи с други форми. За да извикате формата модално използвайте метода ShowModal, в противен случай- метода Show. Методът ShowModal е функция, която връща като стойност свойството ModalResult.
Контролът SpeedButton притежава свойства, които ви позволяват да поставите върху него графични изображения, представящи различните му състоянията. Възможно е няколко такива контрола да работят заедно като група. Групирайки подходящо контроли от този тип в панели, можете да създавате палитри с инструменти. Бутоните от една и съща група трябва да имат една и съща стойност на свойството GroupIndex. Когато GroupIndex има стойност 0 съотвения бутон е независим от останалите на формата. При натискане той може да възвърне своето ненатиснато състояние. Когато GroupIndex има стойност по-голяма от 0, бутонът остава в натиснато състояние, дори и след като потребителя отпусне бутона на мишката. В случай, че свойството AllowAllUp има стойност True, при повторно натискане бутонът ще възвърне нормалното си състояние. Ао това свойство има стойност False само един от бутоните в групата може да бъде избран в даден момент.
Съществуват класове, кото не представят компоненти. Това са класовете на списъците. Всъщност това са динамични масиви, а не стандартни свързани списъци. С тях можете да работите, използвайки нотацията за масиви, както за получаване, така и за промяна стойностите на елементите им. Използвани методи за достъп са Add, Insert, Delete. Метод за търсена е IndexOf.
function Add(const S:String): Integer; /добавя нов елемент в края на списъка/
procedure Insert(Index: Integer; const S:String); /добавя нов елемент на позиция, указана от параметъра Index/
procedure Delete(Index: Integer); /изтрива елемент от позиция, указана от параметъра Index/
function IndexOf(const S:String): Integer; /дава позицията на елемента в списъка/
Най-общо има три различни класа списъци:
Класът TList дефинира списък от указатели, които могат да се използват за съхраняване на обект от произволен тип. Той може динамично да променя размера си по време на изпълнение на програмата. Докато динамичните масиви се състоят от обекти от определен тип, то списъците просто съхраняват указатели към обекти.
Класът TStrings дефинира абстрактен списък от низове. Той не се грижи за представянето на списъците в паметта. Обектите от типа TStrings се използват само като свойства на компоненти, които могат да съхраняват низове в себе си. Класът TStringList е наследник на класа TStrings и дефинира списък от низове със собствена памет.
Класът TCollection дефинира хомогенен списък от обекти, които са притежание на класа на колекциите.
Списъците се използват, когато имате повече възможности за избор.
При избирането на елемент от компонента ListBox се използват свойствата Items и ItemIndex. Свойството Items е от тип TStrings. Обектите от този тип имат както списъци с низове, така и списъци с обекти, асоциирани с низове.
property Items: TStrings;
property ItemIndex: Integer; /дава позицията на избрания в момента елемент от списъка/
Компонентът ListBox позволява множествен избор. Това се постига чрез свойството MultiSelect. Броя на избраните елементи можете да получите, използвайки свойството SelCount. Избраните елементи се определят от масива Selected, който има същия брой елементи както списъка и е от тип Boolean.
property Selected: Boolean;
Компонентът ListBox предлага фиксиран избор, т.е. позволява на потребителя да избере само измежду елементите от списъка, но не и да нова зададе възможност. Възможно е да записвате и зареждате съдържанието на списъците от текстови файлове като използвате методите SaveToFile и LoadFromFile.
procedure SaveToFile(const FileName: string);
procedure LoadFromFile(const FileName: string);
Компонентът ComboBox комбинира текстово поле с падащ списък. Неговото поведение се променя в зависимост от стойността на свойството Style. Стилът csDropDown позволява директно редактиране на елементите от списъка и позволява показване на този списък при заявка. Стилът csDownList не позволява редактиране, а стилът csSimple определя, че падащият списък ще се показва винаги. Достъпът до избрания елемент се осъществява посредством свойството Text.
Компонентът StringGrid може да съхранява стойности, низове и да визуализира избрани по някакъв критерий стойности. Основната структура на компонента включва фиксиран брой колони и редове, които задават регион, т.е. той може да се разглежда като таблица:
property Cells[ACol, ARow: Integer]: string;
Използвайте свойството Cols, за да си осигурите достъп до клетките на една колона. Броят на всички колони в таблицата можете да получите от свойството ColCount.
property Cols[Index: Integer]: TStrings;
property ColCount: Longint;
Достъп до клетките на един ред получавате от свойството Rows. Свойството RowCount ви дава броя на всички редове в таблицата.
property Rows[Index: Integer]: TStrings;
property RowCount: Longint;
При визуализирането си таблицата може да съдържа линии с различни размери или дори да няма редове. Можете да зададете размера на всяка колона или ред независимо от другите, защото свойствата ColWidth и RowHeight са масиви. ColWidth задава ширината на всички колони в пиксели, а RowHeight задава височината на всички редове в пиксели:
property ColWidths[Index: Longint]: Integer;
property RowHeights[Index: Longint]: Integer;
Можете да позволите на потребителя да променя размерите на колоните и редовете /goColSizing и goRowSizing/, да премества цяла колона или ред на нова позиция /goRowMoving и goColMoving/, да позволява избирането на региони от таблицата. За целта използвайте свойството Options:
property Options: TGridOptions;
Сподели с приятели: |