Қазақстан республикасының бiлiм және ғылым министрлiгi


Басқару элементтерінің тасуын қамтамасыз ететін сипаттамалар (Drag & Drop тетігі)



бет10/21
Дата06.03.2016
өлшемі2.68 Mb.
#44251
1   ...   6   7   8   9   10   11   12   13   ...   21

3.4 Басқару элементтерінің тасуын қамтамасыз ететін сипаттамалар (Drag & Drop тетігі)


Экранда бейнеленетін басқару элементтері құрауыштар сияқты ерекше қасиеттерге ие, оларды экран бойынша жылжытуға болады және оларды басқа басқару элементтеріне түсіруге болады. Тасу (Drag & Drop) сәйкес басқару элементін тышқанмен керекті орынға сүйреу арқылы жүзеге асады. Тышқанның сол жақ батырмасын босатқанда құрауыштың сол жақ жоғарғы бұрышы тышқанның көрсеткіші нұсқаған нүктеге орналасады.

Басқару элементтерін тасуға тағайындалған TControl класының негізгі сипаттамаларын қарастырайық.



Қасиеті (Properties):

property DragCursor: TCursor;

type

TCursor = -32768..32767;

Басқару элементін тасыған уақыттағы тышқанның көрсеткішінің түрін анықтайды.



property DragMode: TDragMode;

type

TDragMode = (dmManual,dmAutomatic);

Басқару элементін тасудың режимін орнатады: егер dmAutomatic (Автоматты түрде) мәнін қабылдаса, онда басқару элементін тікелей тышқанның көмегімен тасуға болады, егер dmManual (Қолмен) мәні тағайындалса, онда тікелей тышқанның көмегімен тасу мүмкін емес.



Оқиғалар (Events):

property OnDragDrop: TDragDropEvent;

Басқару элементіне басқа тасылатын басқару элементі түсірілгенде өрбитін оқиға. Оқиғаның өңдеуіші TDragDropEvent типінен тұрады:



type

TDragDropEvent = procedure(Sender, Source: TObject;
X, Y: Integer) of object;

мұндағы Sender тасылатын басқару элементі түсірілген объект; Source – тасылатын басқару элементі; X, Y – Source басқару элементін түсірген сәттегі тышқанның көрсеткішінің координаталары (Sender клиенттік аймағының координаталар жүйесіндегі). Оқиға шынымен Source басқару элементін Sender объектісіне түсірген кезде ғана өрбиді.



property OnDragOver: TDragOverEvent;

Sender басқару элементінің үстіне басқа тасылған Source басқару элементі орналастырылғанда өрбитін оқиға. Оқиғаның өңдеуіші TDragOverEvent типінен тұрады:



type

TDragOverEvent = procedure(Sender, Source: TObject; X,Y:Integer;
State: TDragState; var Accept: Boolean) of object;

Sender, Source, X, Y параметрлері OnDragDrop оқиғасындағы сияқты мағына алады; State – тасу режимінің күйін анықтайды (dsDragEnter – тасылатын объект басқару элементіне түседі, ол арқылы оны жылжытуға болады; dsDragLeave – тасымалданатын элемент осы басқару элементін тастап кетеді; dsDragMove – тасылатын элемент басқару элементінің бойымен жылжиды); Accept – егер Sender объектісі тасымалданған элементті қабылдайтын болса, онда оқиғаның өңдеуіші True мәнін, ал кері жағдайда False мәнін беретін параметр.



property OnEndDrag: TEndDragEvent;

Ағымды басқару элементін тасу аяқталғанда өрбитін оқиға. Оқиғаның өңдеуіші TEndDragEvent типінен тұрады:



type

TEndDragEvent = procedure(Sender, Target: TObject;


X, Y: Integer) of object;

мұндағы Sender тасылатын басқару элементі; Target – үстінде тасылған басқару элементі орналасқан объект; X, Y – тасу аяқталған кездегі тышқанның көрсеткішінің координаталары. Оқиға кез – келген тасуды аяқтағанда және Target Sender басқару элементін қабылдағанда, қабылдамағанда өрбиді. Соңғы жағдайда тасылатын басқару элементі өз орынында қалады.



property OnStartDrag: TStartDragEvent;

Ағымды басқару элементі тасылғанда өрбитін оқиға. Оқиғаның өңдеуіші TStartDragEvent типінен тұрады:



type

TStartDragEvent = procedure(Sender: TObject;
var DragObject: TDragObject) of object;

мұндағы Sender – тасылатын басқару элементі; DragObject – тасу кезінде басқару элементінің кескінін қалыптастыратын арнайы объектіге сілтемеден тұрады. Үнсіздікпен nil – ге тең болады, яғни құрауыштың өзі тасылатын болады.

Бұл оқиғалардың барлығы қорғалған, бірақ ұрпақтар класында олар жинақталған болып жарияланады, сондықтан объект инспектрінде пайда болады. Оқиғалар қажетті түрде жазатын әдістерге нұсқағыш болып табылады, талап еткен жағдайда сәйкес оқиғаны өңдеп береді. Бұл әдістің дайындамасын қалыптастыру үшін инспектор объектісінен сәйкес оқиғаны тышқанның көмегімен активтеу керек.

TControl класында сүйреу режимін іске қосатын әдіс анықталған:

procedure BeginDrag(Immediate: Boolean;
Threshold: Integer = -1);

BeginDrag әдісі бағдарламаның кодында басқару элементінің DragMode қасиетінің мәніне dmManual орнатылғанда шақырылады. Егер DragMode – dmAutomatic, онда әдіс автоматты түрде шақырылады.

Егер параметр Immediate - TRUE, онда тышқанның көрсеткіші DragCursor қасиетінде берілген түрді қабылдайды және жылжыту тез арада басталады. Егер Immediate – FALSE, онда тышқанның көрсеткішінің түрі өзгермейді, және қолданушы тышқанның көрсеткішін Threshold параметрінде көрсетілген пиксель санына жылжытқанша сүйреу басталмайды. Егер әдісті шақырғанда Threshold параметрі түсірілсе, онда BeginDrag Mouse ауқымды айнымалысының DragThreshold қасиетінің мәнін қолданады.

Immediate – қа FALSE орнататын болсақ, онда басқару элементі тасу амалын бастамай – ақ тышқанның шертуін қабылдайды.



Мысал 3.4.1 Басқару элементін тасуды қамтамасыз ететін бағдарлама.

Басқару элементін тасуды жүзеге асыратын бағдарлама жазайық. Ол үшін пішінге GroupBox тақырыбы бар панель мен Button батырмасын орналастырайық. Батырма мен оған орналасқан панельді пішіннің бойымен жылжытайық.

Батырманы жылжыту үшін оның DragMode қасиетіне dmAutomatic мәнін беру керек, ал пішін мен панель үшін OnDragDrop және OnDragOver оқиғаларының өңдеуішін жазу керек. Батырмаға OnStartDrag және OnEndDrag оқиғаларының қолданылғанын көрсету үшін батырмалардың аттарын өзгертетін оқиғалардың өңдеуішін жазу керек.

Тапсырманың шешімін келесі түрде ұйымдастыруға болады:



  1. Button1 қасиетінің DragMode қасиетіне dmAutomatic мәнін тағайындайық. Ол оның жылжуын тікелей тышқанның көмегімен асыруға мүмкіндік береді.

  2. Пішін тасылатын батырманы қабылдайтындай күйде болатындай шартты ұйымдастырайық. Ол үшін пішіннің OnDragOver оқиғасының өңдеуішін қалыптастырайық.

procedure TForm1.FormDragOver(Sender, Source: TObject;

X, Y: Integer; State: TDragState; var Accept: Boolean);



begin

Accept:= True; {Оқиға пішіннің жаңа орнына жылжығаннан кейін батырманың босатылуына мүмкіндік береді}



end;

  1. Пішінге батырманы тасуды аяқтауда қажетті әрекетті іске асыратын OnDragDrop оқиғасының өңдеуішін құрайық:

procedure TForm1.FormDragDrop(Sender, Source: TObject; X, Y: Integer);

begin

WITH Source AS TButton DO {Source параметрін TButton типіне әкелу, өйткені тасылатын батырма осындай типтен тұрады}



BEGIN

Parent:= Pointer(Sender); {Батырмаға үлкен құрауыш беріледі - Parent қасиетіне Sender (басқару элементі түсірілетін құрауыш) қасиетінің мәні тағайындалады, оны алдын – ала Pointer типіндегі нұсқағышқа айналдырамыз}

Left:= X; {Басқару элементінің сол жақ жоғарғы бұрышының

Top:= Y; координаталарына басқару элементі түсірілген құрауыштың ішіндегі тышқанның көрсеткішінің жергілікті координаталары меншіктеледі

END;

end;


  1. Аналогиялық түрде панель үшін OnDragOver және OnDragDrop оқиға өңдеуішін құрастырайық. Олар пішін үшін құрастырылған өңдеуіштерден аттары бойынша ғана өзгеретіндіктен, құрылған әдістерді меншіктеуді қолдануға болады.

  2. Батырма үшін оны тасудың басы мен аяғының оқиғасының өңдеуішін құрастырайық (OnStartDrag және OnEndDrag оқиғалары), олар батырманың атын өзгертеді.

procedure TForm1.ButtonStartDrag(Sender: TObject; var DragObject: TDragObject);

begin

WITH Sender AS TButton DO

BEGIN

Caption:= ’Перемещается’; {Егер тасымалданатын басқару элементі TButton типін немесе TButton типінің ұрпағын иемденсе, онда батырмаға«Перемещается» деген ат беріледі}

END;

end;


  1. Аналогиялық түрде батырмаға OnEndDrag оқиғасының өңдеуішін құрайық:

procedure TForm1.ButtonEndDrag(Sender, Target: TObject; X, Y: Integer);

begin

WITH Sender AS TButton DO

BEGIN

Caption:= ’Не перемещается’; {Егер тасымалданатын басқару элементі TButton типін немесе TButton типінің ұрпағын иемденсе,



онда батырмаға«Не перемещается» деген ат беріледі}

END;

end;

Бұл өңдеуіште Sender - тасыланатын басқару элементі (батырма); Target – тасылатын басқару элементі түсірілген құрауыш (пішін немесе панель).




Достарыңызбен бөлісу:
1   ...   6   7   8   9   10   11   12   13   ...   21




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет