Home > dev > gambas 
 en fr de es it nl pl pt pt_BR sq ca hu cs tr ar fa id vi ko ja ru zh zh_TW eo
Previous  Next  Edit  Rename  Undo  Refresh  Search  Administration  
Documentation
History
 
Warning! This page is not up to date.  See english version 
Како се програмираат компоненти во Gambas

Вовед

Gambas се поделени библиотеки напишани во C, C++ или директно во Gambas, кои додаваат нови класи на Gambas интерпретерот.

A компонента напишана во gambas е нормален gambas проект со следниве карактеристични особини:

Многу официјални компоненти на gambas веќе се напишани во gambas, па можете да ги користите како примени. Изворниот код на овие компоненти се наоѓа во директориумот /comp/src на архивата со изворниот код на gambas.

Ова е листата на тие компоненти:

Забележете дека и некои компоненти напишани во C/C++ имаат и дел напишан во gambas: Изворниот код на делот напишан во gambas се наоѓа во директориумот со изворен код на овие компоненти. На пример, делот напишан во gambas на gb.qt се наоѓа во /gb.qt/src.

Експортирани класи

Намената на Gambas компонентата е да додаде нови класи на Gambas интерпретерот.

Класите што сакате да ги додадете мораат да се експортираат од вашиот проект, инаку корисникот на вашата компонента нема да може да ги види.

За да ја одбележите класата како експортирана, единствено треба да го додадете клучниот збор EXPORT на почетокот на датотеката со изворниот код на класата.

Ако некој метод или својство на експортираната класа враќа објект на друга класа декларирана во вашата компонента, тогаш и оваа друга класа треба да биде експортирана. Инаку, корисникот нема да може да чува референца на неа, доколку не го користи податочниот тип Object.

Ако експортираната класа наследува друга класа што е декларирана во вашата компонента, тогаш и оваа друга, т.е. родителската класа треба да биде експортирана. Во спротивно, ќе добиете грешка од интерпретерот дека не може да ја вчита компонентата.

За добар пример на едноставна компонента со само неколку експортирани класи погледнете го изворниот код на gb.settings и нејзината класа Settings.

Скриени експортирани класи

Ако треба да експортирате некои класи што не сакате да бидат видливи за корисникот, можете да ги скриете на тој начин што ќе го почнете нивното име со карактерот потцртичка („_“).

За пример, погледнете во изворниот код за gb.desktop за да видите многу класи што не можат експлицитно да се видат.

Со оваа постапка можете да го замените концептот на „виртуелни класи“ што постојат само кај компонентите пишувани во C/C++.

Контроли

Контролите се специјални експортирани класи што се појавуваат во алатникот со контролите на ИРО.

Контролите се обично графички контроли што нешто прикажуваат и вршат интеракција со корисникот. Но, исто така, тие можат да бидат и нормални класи и да не прикажуваат ништо, на пример, контролата Timer. Во тој случај, тие се нарекуваат виртуелни контроли.

Контролите на графичкиот кориснички интерфејс (gb.qt или gb.gtk) нудат две класи што можете да ги користите како родителски класи за создавање на сопствени контроли:

UserControl и UserContainer се, всушност, директни потомци на класата Container. На тој начин можете да создадете нови контроли или нови содржатели со комбинирање на веќе постоечки контроли или содржатели.

За добар пример на употребата на UserControl, погледнете го изворниот код на контролата FileView. Оваа контрола содржи една контрола TreeView и една контрола IconView во внатрешноста на UserControl, прикажувајќи една од нив според видот на прегледот што ќе го побара корисникот.

Исто така, за пример на употреба на UserContainer, можете да го видите изворниот код на контролата ListContainer. Оваа контрола е содржател што ви овозможува создавање на ListBox чии ставки се други контроли.

Понатаму, контролите треба да декларираат некои специјални скриени константи што ИРО ги користи за управување со контролите.

Постојат пет константи што можат да се декларираат. Константата _Properties е задолжителна, додека другие се опциони:

Константата _Properties

Оваа константа е најважна и таа е задолжителна. Таа ги опишува сите својства што ќе се покажат во листата на ИРО со својствата на контролата, како и нивниот тип, нивната предефинирана вредност како и други информации во зависност од типот на својството.

Синтакса

Оваа специјална константа е стринг што ја има следнава форма:

PUBLIC CONST _Properties AS String = " [ * , ] Property1 , Property2 , ... "

Секое својство ја има следнава синтакса:

[-] Name [ { Kind [ Arguments ] } ] = Default

Првото својство може да биде ѕвездичка, што значи дека контролата автоматски ги презема сите својства декларирани во константата _Properties на нејзината родителска класа. Во тој случај, името на својството може да почне со знакот минус. Тоа значи дека својството мора да биде отстрането од листата наследена од родителската класа.

Видови својства

Ова се различните вредности на аргументот Kind што се поддржани во овој момент:

Property kind Опис Аргументи
Color Цел број што претставува боја.

ИРО ќе покаже дијалог за одбир на боја што се користи за поставување на вредноста на ова својство.

Font Фонт.

ИРО покажува дијалог за избор на фонт со кој се определува вредноста на ова својство.

Font [ :Fixed ]

Употребете Font:Fixed за да дозволите само фиксирани фонтови.

Path Патека до датотека.

ИРО отвора дијалог за одбир на датотека со кој се поставува вредноста на ова својство.

Picture Слика што се наоѓа во директориумот на проектот или стандардна системска икона.

ИРО ќе отвори дијалог за избор на слика со кој се поставува вредноста на ова својство.

Range Целобројна вредност со минимум и максимум.

ИРО ќе користи SpinBox контрола за поставување на вредноста на ова својство.

Range:Minimum;Maximum

Аргументот Default со кој се дава предефинираната вредност на својството мора да одговара на податочниот тип на својството. За логички (boolean) својства, можете да специфицирате „True“ или „False“ како предодредена вредност.

Морате да бидете претпазливи кога дефинирате (или НЕ дефинирате) предефинирана (Default) вредност на својство.

  • Прво, ако не е специфицирана, за предефинирана вредност се зема предефинираната вредност асоцирана со податочниот тип на својството (FALSE за Boolean својство, 0 за нумеричко својство...).
  • Второ, предефинираната вредност мора да биде исправна во однос на имплементацијата на својството. Ова е бидејќи кога својството ќе се постави на предефинирана вредност во уредувачот за форми на ИРО, не се уфрла никаков код за иницијализација на својството при извршувањето на програмата.

Листи на константи

За својствата што ја примаат вредност од листа на предефинирани константи од иста класа, наместо вид на својство можете да специфицирате класа, со опциона листа на константи.

Ова е синтаксата:

Property kind Опис Аргументи
Class name Листа на константи.

ИРО ќе користи ComboBox контрола за доделување на вредност на ова својство и ќе ја пополни со специфицираните константи.

Class . ( * | Constant1 ; Constant2 ; ... ) [ = Default ]

Ако наместо листа на константи се употреби ѕвездичката, тогаш ќе се користат сите константи од наведената класа.

Ако е наведена, предодредената вредност (Default) мора да биде името на некоја од константите. Никако вистинската бројна вредност!

Примери

На пример, вредноста на Control._Properties е:

X{Position},Y{Position},Width{Dimension},Height{Dimension},Visible=True,Enabled=True,Font{Font},
Background{Color}=-1,Foreground{Color}=-1,Tag,
Mouse{Mouse.Default;Blank;Arrow;Cross;Wait;Text;SizeAll;SizeH;SizeV;SizeN;SizeS;SizeW;SizeE;SizeNWSE;SizeNESW;SplitH;SplitV;Pointing}=Default,
ToolTip,Drop,Expand,Ignore

Ова го наследуваат сите останати контроли и содржатели.

Ова е вредноста на ListBox._Properties:

*,List,Mode{Select.*}=Single,Sorted

Другите специјални константи

Константата _DefaultEvent

Оваа константа е стринг што го претставува главниот Настан на контролата. Овој главен настан се користи при двоен клик на контролата во уредувачот на форми во ИРО.

На пример:

PUBLIC CONST _DefaultEvent AS String = „Click“

Оваа константа е опциона, но во секој случај треба да ја декларирате.

Константата _DefaultSize

Оваа константа е стринг што ја дефинира стандардната големина на контролата кога таа ќе се стави од алатникот на уредувачот на форми. Тој се искажува во помножоци на Desktop.Scale, одделени со запирки.

На пример:

PUBLIC CONST _DefaultSize AS String = „36,36“

Оваа константа е опциона. Ако не се декларира ИРО ќе се обиде да направи нешто што има смисла.

Константата _DrawWith

Оваа константа е стринг што му кажува на ИРО која контрола ќе се користи за цртање во уредувачот на формите.

По стандард, контролите што припаѓаат на gb.qt, gb.qt.ext, gb.form и gb.form.mdi се цртаат со инстанцирање со дизајнерско множество на својства.

Ако контролата не припаѓа во некоја од горенаведените контроли, тогаш ИРО ќе нацрта рамка со иконата и името на контролата.

Со дефинирањето на оваа константа, ИРО нема да користи DrawingArea, туку контролата што сте ја специфицирале.

На пример:

PUBLIC CONST _DrawWith AS String = „TextBox“

Константата _Arrangement

Оваа константа е целобројна вредност што го претставува стилот на подредување што ИРО го спроведува над подконтролите во содржателот пред да ги зачува на дискот.

Оваа вредност е една од целобројните вредности на константите од класата Arrange.

На пример:

PUBLIC CONST _Arrangement AS Integer = 2 ' Arrange.Vertical

Константите од Arrange не можете да ги користите директно бидејќи се наоѓате во декларирање на константа. Ова е ограничување на јазикот на Gambas.

Оваа константа се користи само ако контролата е содржател и претставува опциона константа. Ако не е дефинирана, не се спроведува подредување.

Икони на контролите

Секоја контрола мора да има икона што ќе се покажува во алатникот на ИРО.

За да доделите икони на контролите од вашата компонента, во коренот на вашиот проект морате да создадете директориум со име /control и во него да ставите по една икона во вид на PNG-датотека за секоја контрола.

Името на иконата за контролата мора да биде името на класата на контролата напишано со мали букви со наставка .png.

На пример:

$ cd gb.db.form
$ cd control
$ ls
databrowser.png  datacombo.png  datacontrol.png  datasource.png  datatree.png  dataview.png

Општи информации за компонентата

Повеќе информации за компонентата се задаваат во дијалогот за поставувања на проектот, во јазичињата „Provides“ и „Requires“. Забележете дека овие јазичиња не се видливи кога проектот не е компонента.

Информации во јазичето „Provides“

Во ова јазиче имате листа на сите експортирани класи.

За секоја класа морате да наведете:

Ова е листа на различни видови класи:

Тип Опис
Class Обична Класа што не е контрола.
Control Контрола што не е содржател.
Virtual „Виртуелна“ контрола, т.е. обична класа што може да се стави на форма во уредувачот на формите. На пример, контролата Timer.
Container Контрола што е содржател. Со ова му се соопштува на ИРО дека во контролата може да става други контроли.
MultiContainer Контејнер што дејствува како TabStrip. Тоа значи дека ги распределува подконтролите помеѓу различни подконтејнери и дека во еден момент е видлива само една група на подконтроли.
Form Во овој момент не се користи. Во Gambas 3, ова ќе означува содржател кој имплементира некој вид на форма што може да се уредува од страна на ИРО.

Информации во јазичето „Requires“

Во ова јазиче ќе ги наведете сите зависности на вашата компонента од другите компоненти.

Делот „Features“ има четири места за чекирање, од кои секое претставува особина што е обезбедена од една или повеќе компоненти. Овој дел можете да го користите ако на вашата компонента ѝ е потребна специфична особина, што не се однесува на специфична компонента.

Ако навистина ви се потебни некои специфични компоненти, нив можете да ги одберете во делот од јазичето означен со „Components“.

Компонентите што ги селектирате во јазичето „Components“ во дијалогот за поставувањата немаат ништо заедничко со компонентите наведени во јазичето „Requires“ tab.

Тие се користат само кога го стартувате проектот со компонентата од ИРО за цели на отстранување бубачка.

Отстранување бубачка, инсталација и пакување на компонентите

Отстранување бубачка

За да отстраните бубачка од вашата компонента, можете директно да го користите проектот и да го стартувате онаков каков што е!

Почетната класа на проектот и компонентите одбрани во јазичето „Components“ во дијалогот за поставувања нема да влијаат на однесувањето на компонентата кога таа ќе се инсталира и ќе се користи од други проекти.

Инсталирање

Компонентата можете да ја инсталирате во вашиот матичен директориум со чекирање на соодветната опција во дијалогот „Make executable“.

Откако ќе се инсталира, компонентата ќе биде видлива во јазичето Components на дијалогот за поставувања на проектот, како и сите останати глобално инсталирани компоненти.

За да ја деинсталирате компонентата од вашиот матичен директориум, само отчекирајте ја опцијата во дијалогот „Make executable“ и повторно изградете ја извршната датотека.

Пакување

ИРО може да направи бинарни пакети со вашата компонента, како и со сите останати проекти.

Потребно е само да дефинирате помалку опции: компонентата, на пример, нема ставка за мени.

Бинарниот пакет ќе ја инсталира компонентата на системско ниво и ќе биде употреблива како и секоја друга официјална компонента што се испорачува со Gambas.

Ако сакате да ја дистрибуирате вашата компонента, ќе треба да ја именувате според прецизно наведената шема, така што не се јавуваат конфликти во пакетите со компоненти.

Името на вашата компонента мора да биде: gambas2-vendor-name, каде што:

Иако помошникот за пакување ви помага да го внесете стрингот на издавачот на пакетот во името на пакетот, ве молам ова да го одбегнувате.

Ставете го името на издавачот во името на проектот на компонентата, така што се појави во конечното име на компонентата, така што корисникот може да го види.

Во овој момент има недостаток во пакувачот кој не ја зема предвид верзијата на проектот на компонентата при генерирањето на зависните. Последователно, ќе морате да ја ставите верзијата на вашиот проект со компонентата да биде иста со верзијата на Gambas со која работите!

Заклучок

Се обидов да најдам најлесен начин за изработка на компоненти со ИРО. Тоа сѐ уште не е совршено, но ако имате каков било коментар или прашање во врска со ова, ве молам да ја користите мејлинг листата!

Забележете дека работите сигурно ќе се променат во Gambas 3.

И, се разбира, ако сакате да ја поправите или подобрите оваа статија, ќе бидете добредојдени.