Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Referat / тимур++

.doc
Скачиваний:
0
Добавлен:
27.11.2023
Размер:
156.16 Кб
Скачать

Spacer

Spacer-класы бос кеңислик формасы болып компонентлерди жайластырыў ушын арналған. Spacer объектин төмендеги қурам арқалы жаратыў мүмкин.

TextField

TextField-класы формада жайласқан текстти редактрлеўши компонент.Объектти жаратыў ушын төмендеги компонент қолланылады.

Бунда label компонент надписи, text компоненттиң дәслепки тексти, maxSize компонентлердиң символлардағы максимал өлшеми, constraints- пайдаланыўшының текстти киритиўге шеклеўи.Компонентлер ушын input constraints орнатыў Text Field класының статистикалық ағзалары болатуғын,турақлылар жәрдеминде орынлаў мүмкин.

ANY-қәлеген мағлыўматты киритиў мүмкиншилигин тәмийинлейди.

NUMERIC- тек санды киритиў мүмкиншилигин тәмийинлейди.

DECIMAL-санның онлық бөлегин киритиўди тәмийинлейди.

PHONENUMBER- телефон номер форматындағы санларды киритиў мүмкиншилигин тәмийинлейди.

EMAILADDR-e-mail түриндеги санларды киритиў мүмкиншилигин тәмийинлейди.

URL-киритпе URL форматына сәйкес келиўи керек.

Соның менен бирге буған , киритилиўши мағлыўматлардың сыртқы көринисин тәмийинлеўши, модификациялаўшы флагилар да киреди: PASSWORD,UNEDITABLE,SENSITIVE, NON PREDICTIVE, INITIAL, CAPS WORD, INITIAL CAPS SENTENCE.

Text Field класының методлары тийкарынан Text Box классы методлары менен сәйкес келеди.

Image Item-көринислер қурамын қамтыўшы компонент. Image Item ушын констурктордың еки түри бар:public Image Item (String label, image image, int layout, String altText) ;

public Image Item (String label, image image, int layout, String altText,int appearanceMode) ;

Бунда label-көринислер ушын қатарлық белги, image- Image классы тәрепинен усынылған графикалық мағлыўматлар, layout-қәсийетлер директивасы, altText-альтернативалы текст, appearanceMode- көринис типи.

DateField

DateField классы- сәне ҳәм ўақытты көрсетиў ушын редактрлениўши компонент. DateField еки конструкторға ийе:

public DateField (String label,int mode);

public DateField (String label,int mode, TimeZone timeZone);

бунда label-компоненттиң текстли белгиси, mode- DateField. Date , DateField . Date Time ямаса DateField Time, мәнисин қабыллаўшы режим, timeZone-саат поясын көрсетиўши объект.

DateField класының методлары 2.24 таблицада берилген.

Метод

Көрсетпеси

public Date getDate ()

Сәнениң мәнисин қайтарады

public int

get InputMode ()

Сәне майданы ушын кириў режимин алады

public void setDate (Date date)

Cәнени орнатады

public void setInput-Mode (int Mode)

Сәне майданы ушын киритиў режимин орнатады.

Cauge

Cauge классы графикалық формада пүтин санды көрсетеди.Ол ноль менен максимал мәнис арасында жайласқан мәнистен ибарат.

Cauge класы объектин төмендеги конструктор жәрдеминде дүзиў мүмкин:

Бунда label компонент ушын қатарлық мәнис, параметри пайдаланыўшы тәрепинен компонент мәнисиниң өзгериў мүмкиншилигин белгилейди,

maxValue-максимал мәнис,initiaValue.ямаса,егер maxValue Cauge.INDEFINITE мәнисине тең болса,онда төмендеги турақлылардың бири:

Cauge.CONTINUOUS_ IDLE.

Cauge.CONTINUOUS_RUNNING, Cauge.INCREMENTAL_IDLE ямаса

Cauge.INCREMENTAL_UPDATING.

Cauge 2.25 таблицада берилген төмендеги методларға ийе:

Cauge класының методлары.

Метод

Көрсетпеси

public Boolean isInteractive ()

Пайдаланыўшы мәнисти өзгертиў мүмкиншилиги бар екенлигин хабарлайды

public int getMaxValue ()

Процесстиң максимал диапазонының мәнисин береди

public void setValue (intValue)

процесстиң ағымдағы мәнисин белгилейди.

public int getValue ()

Жумыс процессинде ағымда4ы мәнисти алады

public void setMaxValue (intMaxValue)

Процесс ҳәрекетинде максимал мәнисти орнатады.

ChoiceGroup

ChoiceGroup классы List сыяқлы Choice интерфейсин орынлайды ҳәм тап сондай методларға ийе. ChoiceGroup классы объектин жаратыў ушын конструкторлар:

public ChoiceGroup ( String Label, int choiceType),

public ChoiceGroup ( String Label, int choiceType, String [] stringElements, Image [] imageElements);

СhoiceType мәнислери List сыяқлы болады бирақ бунда IMPLICIT орнына POPUP турақлысы берилген, ол компонентке майдан көринисин береди ямаса төмен бағдарланыўшы менюди усынады.

CustomItem

CustomItem класы формада жайласыўшы,жаңа компонентлерди жаратыў ушын арналған абстракт класс.Бул компонентлердиң жумыс ислеў логикасы ҳәм сыртқы көриниси төмендәрежели API доступына ийе методлар жәрдеминде орынланады.

Төменде берилген мысал,үш формаға ийе.Биринши форма элементлердиң формада жайласыў мүмкиншилигин усынады. StringItem ниң үш элементине көринислердиң ҳәр қыйлы режими туўра келеди: BUTTON, PLAIN, HYPERLINK. BUTTON түриндеги биринши StringItem ге умолчание бойынша команда берилген болып, ол компонент қәсийетин өзгертиў қәбилетине ийе.Екинши формада (BUTTON) түймеси түриндеги DateField ҳәм StringItem жайласқан.Түйме активациясы циклли түрде DateField түрин өзгертеди. Үшинши формада Cauge ҳәм TextField компонентлери орналасқан,өзгерис болған жағдайда TextField , Cauge ға өзгереди.Буның ушын форма ушын setItemStateListener методы жәрдеминде форма компонентлериниң жағдайларын дизимге аламыз. ItemStateListener интерфейсин орынлаўшы аноним класс мысалында,ағымдағы мәнисти TextField оқыйды ҳәм Cauge мәнисти орнатады.

2.4 Мысал. форманы қайта ислеў мысалы.

/*

* FormExample.java

* /

package lab2;

import javax.microedition.lcdui.Command;

import javax.microedition.lcdui. Commandlistener;

import javax.microedition.lcdui. DateField;

import javax.microedition.lcdui. Display;

import javax.microedition.lcdui. Displayable;

import javax.microedition.lcdui. Form;

import javax.microedition.lcdui. Cauge;

import javax.microedition.lcdui.Item;

import javax.microedition.lcdui.ItemCommandListener;

import javax.microedition.lcdui.ItemStateListener;

import javax.microedition.lcdui.StringItem;

import javax.microedition.lcdui.TextField;

import javax.microedition.midlet_*;

public class FormExample extends MIDlet

implements CommandListener {

private Display display = Display.get Display (this);

// The global Next and Exit commands

private Commands exitCommands= new Command (“Exit”, Command. EXIT, 0);

private Commands nextCommands= new Command (“Next”, Command. OK, 0);

// The array of forms and the index of the current form

private int currentForm =0;

private Form [ ] forms = new Form [3];

// The form items

private String

// The form items

private String Item item1 , item 2 , item 3:

private Date Field date Field :

private Gauge gauge :

public void start App [ ] {

make Forms [ ] :

display . set Current ( forms [ next Form Index()]);

}

public void pauseApp () {

}

public void destroyApp ( boolean unconditional ] [

// Process the global commands

public void command Action [ Command command, Displayabled ) {

if ( command = = exit Command ) {

notify Destroyed : ]

else if ( command = = next Command ) [

display. set Current ( forms [ next Form Index () ]) ;

}

{

private int nextFormIndex [) {

if ( current Form = = forms.length ) {

current Form = 0 :

}

return currentForm+ + ;

}

private void make Forms ( ) {

// Create the first form

Form form = new Form [ “ Form 1 . Layout of String Items “ ]

item1 = new String Item ( null, “ one “, Item. Button ] :

item2 = new String Item ( null , “ two “) :

item3 = new String Item ( null , “ three “,

Item . HYPERLINK) ;

// Define command and command listener for item1

Command changeLayoutCommand = new Command ( “ one “,

Command. Item.0 ] );

item1. setDefaultCommand ( change Layout Command );

item1. setItemCommandListener [ new ItemCommandListener[] {

public void command Action ( Command c. Item item )

{

// Change the layout mode for all String Items

item1. set Layout( Item. LAYOUT_2 |

Item. LAYOUT_ LEFT | Item . LAYOUT_ NEWLINE­_ AFTER| :

item2. setLayout( Item. LAYOUT_2 |

Item . LAYOUT_ CENTER | Item . LAYOUT_ NEWLINE_AFTER) :

item3. setLayout | Item. LAYOUT_2 |

Item. LAYOUT_RIGHT | Item . LAYOUT_NEWLINE_ AFTER:

}

[ ) ;

form1.append (item1);

form1. append ( item2) ;

form1. append ( item 3 ) ;

// Create the second form

Form form2 = new Form ( “ Form2. DateField “) ;

// Create the DateField item and place it on the form2

date Field = new DateField ( “ Date Field “, Date Field . Date ) :

date Field. set Layout ( Item. LAYOU_CENTER |

Item. LAYOUT_ VCENTER ) :

// Create String Item , place it and define Command and CommandListener

String Item date Control = new String Item ( null,

“Change “ , Item. BUTTON) ;

dateControl. setLayout( Item.LAYOUT _CENTER |

Item. LAYOUT_ BUTTON) ;

date Control. setDefaultCommand(new Command(“Change”,

Command.ITEM, 0 )) ;

date Control. setItemCommandListener (new ItemCommand

Listener() {

public void command Action ( Command c , Item item )

{

// Change Date Field’s input mode

date –

Field. set Input Mode ( ( date Field. get Input Mode ( ) + 1 ) + 3 0+ 1 ) ;

}

} ] ;

form2. append (dateField ) ;

form2. append ( dateControl ] ;

// Create the third form

Form form3 = new Form [ “Form3. Gauge” ] ;

gauge = new Gauge [ null, false , 10, 5 ] ;

TextField textField = nnew TextField (null, “ 5 “, 2.

TextField. NUMERIC] ;

form3. set Item State Listener ( new Item StateListener ( ) {

// Transfer changes from the text Field to the gauge

public void item State Changed ( Item item ) {

TextField tField = ( TextField ) item ;

int value = Integer. parseInt ( tField. getString [ ] );

if [ value < 0 ]

value = 0 :

else if ( value > 10 )

value = 10 :

gauge .setValue ( value ) :

}

});

form 3. append ( gauge ) ;

form 3 . append ( text Field ) ;

forms [ 0 ] = form1;

forms [ 1 ] = form 2 ;

forms [ 2 ] = form 3;

// Add global Commands and define the CommandListener for them

for ( int i = 0 ; i < forms . length ; i + + ) {

forms [i ] . addCommand (exitCommand ) ;

forms[i ] . addCommand ( next Command ) ;

forms [i ] . setCommandListener ( this ) ;

}

}

}

2.3. Запислерди басқарыў системасы

MIDP ның әҳмийетли компонентлериниң бири запислерди басқарыў системасы (Record Management System), ол қурылма ядында мағлыўматларды сақлаў қәбилетине ийе. Record Management System ( RMS )-мобил қурылмаларда мағлыўматларды манипулластырыў ҳәм сақлаў ушын қолланылатуғын, программалы интерфейс,олардан көпшилиги әпиуайы файл системасына доступты тәмийинлемейди.

Запись (record)- избе из байт түринде берилетуғын көринислер, массивлер, қатарлар, санлардан ибарат мағлыўматлар элементи.API дәрежесинде запислер- бул байтлар массивлери.

Запистеги интерпретация функциясы толығы менен қолланбаға бекитиледи.RMS запислердиң сақланыўын ҳәм уникал итентификаторды усынады.

Сақлаўшы (Record Store)- запислердиң тәртиплескен қурамы.Запись жаратылғанда,сақлаўшы оған уникал болған пүтинсанлы идентификаторды усынады (record ID).Мысалы, биринши запись 1 тең болған record ID ,екиншиси-2 тең болған шамасын ийелейди.бирақта, бул индекс емес,себеби запись жоғалтылғанда,қалған элементлер номерленбейди.

Атама (name) MID-лет ишиндеги сақлаўшыны идентификациялаў ушын қолланылады.Ол 1 ден 32 шекемги символлардан ибарат болып, ол сақлаўшыны жаратқан MID-лет ишинде уникал болыўы керек. MIDP 1.0 версиясында сақлаўшы бир қолланбадан артық қолланылмайды.MIDP 2.0 версиясында сақлаўшы ҳәр қыйлы қолланбада қолланылыўы мүмкин. Бул жағдайда, сақлаўшы тек атама менен идентификацияланып қалмастан,ал усы сақлаўшыны жаратқан, қолланбаны ислеп шығарыўшы тәрепинен де орынланады.

Соның менен бирге, сақлаўшы қурамда ең соңғы өзгерис пенен версияның сәнеси ҳаққындағы мағлыўматта сақланады.

Қолланбада Record Store - javax.microedition.rms.Record Store экземпляры тәрепинен бериледи.Егер басқа MID-леттен Record Store ға доступ талап етилсе,онда Record Store атамасы Record Store ҳәм MID-лет атамаларынан қуралады.

Record Store ны ашыў ушын төмендеги методлар қолланылады:

1 . public static RecordStore openRecordStore ( String recordStoreName , Boolean create If Necessary ):

2. public static RecordStore openRecordStore ( String recordStoreName, Boolean createIfNecessary , int authmode , Boolean writable ) :

3. public static RecordStore openRecordStore ( String recordStoreName , String vendorName , String suiteName ) :

Бунда recordStoreName- сақлаўшы атамасы; createIfNecessary-егер берилген атттағы сақлаўшы болмаса оның дүзилиў кереклигин сорайды; authmode- сақлаўшы жаратылғанда ғана, қолланылады.

authmode турақлысы еки мәнистен ибарат:

AUTHMODE_PRIVATE- берилген программа бойынша доступты тәмийинлейди ҳәм AUTHMODE_ANY- мидлетлердиң қәлеген компоненти ушын доступты тәмийинлейди.writable аргументи ҳақықый мәниске ийе болады,егер сақлаўшы басқа мидлетлер запислери ушын доступқа ийе болса; vendorName ҳәм suiteName- сәйкес вендор ҳәм мидлет атамасы.

Сақлаўшыны public void closeRecordStore ( ) методы жәрдеминде жабыў мүмкин.Запислердиң сақланыў орны барқама запислерге зарүрлик болмаған жағдайда жабылады.

Мидлетлер ушын доступқа ийе болған, барлық сақлаўшыны анықлаў ушын:

public static String ( ) List Record Stores методлары қолланылады.

Атамасы бойынша запислерди өшириў ушын public static void delete Record Store (String recordStoreName) методы қолланылады.

Сақлаўшыға доступ режими public static voidMode (int authmode, Boolean writable) методы жәрдеминде өзгертиледи.

Сақлаўшыдағы запислер муғдарын анықлаў ушын, public int getSize методы қолланылады.

Запислер ушын арналған яд көлемин билиў ушын, public int getSizeAvailable ( ) түринде анықланады.

javax. microedition.rms, пакети қурамына тийисли шәртлер 2.26 таблицада берилген.

Запислерди сақлаўшы менен ислесиўдеги шәртлер.

Шәртлер

Көрсетпеси

InvalidRecordExeption

Запистиң надурыс идентификаторы берилгени ушын, операция орынланбайтуғынлығын көрсетеди.

RecordStoreExeption

Улыўма қәтелерде пайда болатуғын, алдыңғы шәртлердиң ең алдыңғы класы

RecordStoreFullExeption

Сақлаўшыдағы доступқа ийе яд көлеминиң тамамланғанлығын хабарлайды

RecordStoreNotFoundExeption

Берилген сақлаўшы жоқ екенлигин хабарлайды

RecordStoreNotOpenExeption

Қолланба жабылған сақлаўшыны пайдаланыўға умытылып атырғанлығын хабарлайды.

Сақлаўшыға жаңа записти қосыў ушын, төмендеги метод қолланылады:

public int addRecord (byte [ ] data , int offset, int numBytes).

Бунда data- записте сақланыўы керек болған мағлыўматлар; offset- data массивиниң индекси болып,буннан баслап мағлыўматлар записте сақланады. numBytes-запистеги сақланыўы керек болған, байтлар муғдары.

Сақлаўшыдан запислерди алыў ушын,төмендеги метод қолланылады.

1 . public byte [ ] getRecord ( int recorded )

2. public int get Record ( int recorded , byte [ ] buffer , int offset )

Бунда recorded- запись идентификаторы; buffer- мағлыўматлар копияланатуғын, байтлы массив; offset-массивтеги индекс, буннан копиялаў мүмкин. Биринши метод запись копиясын қайтарады, екиншиси- запись мағлыўматларын.

Идентификатор бойынша запислерди өшириў ушын төмендеги метод қолланылады: public void deleteRecord ( int recorded).

Запистиң жаңаланыўы төмендеги метод бойынша орынланады:

public void setRecord ( int recorded , byte [ ] newDatа, int offset , int numBytes ). Бул метод берилген идентификатордағы запись мағлыўматларын ,newDatа массивинен жаңа мағлыўматлар менен алмастырады.

int getNextRecordid ( ) методы келеси запись идентификаторын қайтарады, ҳәм ол

Record Store қосылады.

getNumRecords ( ) сақлаўшыдағы доступқа ийе запислер муғдарын алыўды тәмийинлейди.

Сақлаўшы жумысын көрсетиў ушын (Record Store) мысал жаратамыз,бунда TextBox элементи өз текстин қолланбадан шығып кеткеннен соңда сақлайды. TextBox теги мағлыўматлар Record ID турақлысы тәрепинен берилетуғын,фиксацияланған идентификатор (id) записте сақланады. Қолланба жабылғанда, destroyApp ( ) методында,сақлаўшыда TextBox мағлыўматлар записи орынланады.Өз нәўбетинде, конструкторда, егер сақлаўшы қандай да бир мағлыўматтан ибарат болса, онда сақлаўшыдағы мағлыўматлар менен TextBox тиң инициализациясы болады.

2.5 Мысал. Запислерди сақлаўшы жумысы.

/*

* TextMiniEditor. java

* /

package lab3 ;

import javax.microedition.1cdui.Alert;

import javax.microedition.1cdui.Alert Type;

import javax.microedition.1cdui. Command;

import javax.microedition.1cdui. CommandListener ;

import javax.microedition.1cdui. Display ;

import javax.microedition.1cdui. Displayable ;

import javax.microedition.1cdui. TextBox ;

import javax.microedition.1cdui. TextField ;

import javax.microedition. midlet.

import javax.microedition. rms . RecordStore :

import javax.microedition. rms . RecordStore Exeption :

public class TextMiniEditor extends MIDlet

implements CommandListener

{

private static final String STORE_ NAME = “ TextMiniEditorStore “ ;

private static final int RECORD_ ID = 1 ;

private TextBox textbox ;

private RecordStore store ;

private Command exitCommand = new Command ( “ Exit “ , Command . EXIT. 0 ) ;

public TextMiniEditor [ )

{

textbox = new TextBox [ “ Text Mini Editor “, null,

2000 , TextField. ANY ) ;

textbox.addCommand ( exitCommand ) ;

textbox. setCommandListener ( this ) ;

try [

store = openStore [ ) ;

if ( store . getNumRecords [ ] > 0 ) {

byte [ ] data = store. getRecord ( Record_ ID];

textbox. setString ( new vString [data )) ;

}

}

catch ( RecordStoreExeption ex ) {

showError [ex. getMessage: ] false ];

}

finally {

try {

store. closeRecordStore ( ) ;

}

catch ( RecordStoreExeption ex ) {

ex.printStackTrace ( ) ;

}

}

}

protected void destroyApp (boolean unconditional )

{

try {

store = openStore [ ) ;

byte [ ] data = textbox. getString ( ) . getBytes [ ] ;

store . addRecord ( data , 0 , data, length) ;

}

catch ( RecordStoreExeption ex ) {

showError[ ex . getMessage [ ], true ) ;

}

finally [

try [

store. closeRecordStore ( ) ;

}

catch ( RecordStoreExeption ex ) {

ex . printStackTrace ( ) ;

}

}

}

protected void pauseApp [ ] { }

protected void startApp[ ]

throws MIDletStateChangeExeption

{

Display. getDisplay ( this). setCurrent ( textbox) ;

}

public void commandAction [ Command c , Displayable d )

{

if ( c = = exitCommand ] [

destroyApp(true) ;

notifyDestroyed [ ];

}

{

private RecordStore openStore ( ) throws RecordException

{

return RecordStore openRecordStore ( Store _ Name , true ) ;

}

private void showError ( String message , Boolean exit )

{

Alert alert = new Alert | “ Error “,

” Record Store Error : ” + message,

null , AlertType. ERROR) ;

alert. setTimeout ( 5000 ):

if ( exit ) {

alert. setCommandListener ( new CommandListener ( ) {

public void commandAction ( Command c , Displayable d ) {

notifyDestroyed ( ) ;

}

} ) ;

}

Display . getDisplay ( this ) . setCurrent ( alert );

}

}

Мидлет RecordListener интерфейсине ийе болып, ол сақлаўшыдағы өзгерислердиң болыўын хабарландырыўшы, объектлерди жаратыўды тәмийинлейди.Интерфейс үш методқа ийе:

1. void recordAdded ( RecordStore recordStore , int recordid )- запись киритилгеннен соң орынланады.

2. voidRecordchanged ( RecordStore recordstore , int recorded )- запись өзгергеннен соң пайда болады.

3. void recordDeleted ( RecordStore recordStore , int recorded- запись өширилгеннен соң шақырылыўы мүмкин.

Сақлаўшыдағы шәртлердиң қайта ислеўшисин қосыў/ жоғалтыў ушын, төмендеги методлардан пайдаланыў мүмкин:

1. void addRecordListener ( RecordListener listener).

2. void removeRecordListener ( RecordListener listener ).

RecordStore класының enumarateRecords методы RecordEnumeration интерфейсин орынлаўшы, класс нусқасын қайтарады, ҳәм ол сақлаўшыдағы сортланған запислер көплигиниң көрсетеди.

public RecordEnumeration enumerateRecords ( RecordFilter filter , RecordComparator comparator , Boolean keepUpdated ).

Бунда filter- егер null ға тең болмаса, нәтийжеге қандай запислер киритилиўин белгилейди; comparator- алынған запислерди сортлаў ушын қолланылады; keepUpdated- егер мәнис ҳақықый болса, онда RecordEnumeration интерфейси сақлаўшы өзгерисинде автомат тәртипте жаңаланады.

RecordFilter интерфейси сақлаўшыдағы запислердиң сәйкеслигин анықлайды: boolean matches ( byte [ ] candidate ) .Егер мағлыўматлар записи берилген критерияға сәйкес келсе,метод true мәнисин береди.

RecordComparator интерфейси запислер сортировкасын әмелге асырады ҳәм ол бир методтан ибарат: int compare ( byte [ ] rec1,byte [ ] rec2 ). Метод үш турақлыдан бирин қайтарады (2.27 табл).

2.27 таблица

RecordComparator интерфейси турақлысының мәниси.

Турақлылар мәниси

Көрсетпеси

static int RecordComparator. EQUIVALENT

Запислер теңдей мәнисте

static int RecordComparator .FOLLOWS

Биринши запись екиншисинен үлкен.

static int RecordComparator.PRECEDES

Екинши запись, бириншисинен үлкен.

RecordEnumeration интерфейси экземпляры сақлаўшыдан алынған, запислердиң сортланыўы ушын арналған. Буның ушын 2.28 таблицада берилген, методлар қолланылады.

RecordEnumeration интерфейси.

Метод

Көрсетпеси

byte [ ] nextRecord ( )

Келеси запись нусқасын қайтарады

boolean hasNextElement ( )

Егер келеси элемент бар болса,ҳақықый мәнисти береди.

int nextRecordid ( )

Келеси запись идентификаторын қайтарады.

byte [ ] previousRecord ( )

Алдыңғы запись нусқасын қайтарады

int previousRecordid ( )

Алдыңғы запись идентификаторын қайтарады

boolean hasPreviousElement ( )

Егер алдыңғы элемент бар болса, TRUE мәнисин қайтарады

int numRecord ( )

Доступқа ийе запислер муғдарын қайтарады

void reset ( )

Дәслепки мәниске запись индексин береди

void destroy ( )

Пайдаланылған ресурсларды еркине жибереди.

Соседние файлы в папке Referat