Помицање и промјена величине контроле у ​​току рада

Ево како омогућити повлачење и промену величине контрола (на Делпхи обрасцу) мишем, док се апликација покреће.

Уређивач обрасца у току рада

Једном када на образац ставите контролу (визуелну компоненту), можете подесити његов положај, величину и друга својства времена пројектовања. Међутим, постоје ситуације када требате дозволити кориснику ваше апликације да репозиционира контроле обрасца и промијени њихову величину у вријеме извођења.

Да бисте омогућили кретање корисника током извршавања и промену величине контроле на обрасцу помоћу миша, три догађаји који се односе на миша треба посебно руковање: ОнМоусеДовн, ОнМоусеМове и ОнМоусеУп.

Теоретски, рецимо да желите да омогућите кориснику да у току рада помера (и мења величину) контролу тастера, помоћу миша. Прво, ви управљате догађајем ОнМоусеДовн да бисте омогућили кориснику да "ухвати" дугме. Затим би ОнМоусеМове догађај требао поново поставити (померити, превући) дугме. Коначно, ОнМоусеУп би требао завршити операцију премештања.

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

instagram viewer

Прво, испустите неколико контрола на образац. Имајте ЦхецкБок да бисте омогућили или онемогућили померање и мењање величине контрола током извођења.

Затим дефинирајте три поступка (у интерфејс одељак изјаве обрасца) који ће управљати догађајима миша као што је горе описано:

тип
ТФорм1 = класа(ТФорм)... процедура ЦонтролМоусеДовн (Пошиљалац: ТОбјецт; Дугме: ТМоусеБуттон; Схифт: ТСхифтСтате; Кс, И: Интегер); процедура ЦонтролМоусеМове (пошиљалац: ТОбјецт; Схифт: ТСхифтСтате; Кс, И: Интегер); процедура ЦонтролМоусеУп (пошиљалац: ТОбјецт; Дугме: ТМоусеБуттон; Схифт: ТСхифтСтате; Кс, И: Интегер); приватни
инРепоситион: боолеан; олдПос: ТПоинт; 

Напомена: Потребне су две променљиве нивоа облика да би се обележило да ли се одвија надзорно кретање (инРепоситион) и складиштење контролног старог положаја (олдПос).

У догађају ОнЛоад обрасца, доделите процедуре руковања догађајима миша одговарајућим догађајима (за оне контроле које желите да будете повлачењем / променом величине):

процедура ТФорм1.ФормЦреате (пошиљалац: ТОбјецт); започети
Буттон1.ОнМоусеДовн: = ЦонтролМоусеДовн; Буттон1.ОнМоусеМове: = ЦонтролМоусеМове; Буттон1.ОнМоусеУп: = ЦонтролМоусеУп; Едит1.ОнМоусеДовн: = ЦонтролМоусеДовн; Едит1.ОнМоусеМове: = ЦонтролМоусеМове; Едит1.ОнМоусеУп: = ЦонтролМоусеУп; Панел1.ОнМоусеДовн: = ЦонтролМоусеДовн; Панел1.ОнМоусеМове: = ЦонтролМоусеМове; Панел1.ОнМоусеУп: = ЦонтролМоусеУп; Буттон2.ОнМоусеДовн: = ЦонтролМоусеДовн; Буттон2.ОнМоусеМове: = ЦонтролМоусеМове; Буттон2.ОнМоусеУп: = ЦонтролМоусеУп; крај; (* ФормЦреате *)

Напомена: горњи код омогућава репозиционирање Буттон1, Едит1, Панел1 и Буттон2 током рада.

На крају, ево чаробног кода:

процедураТФорм1.ЦонтролМоусеДовн ( Пошиљалац: ТОбјецт; Дугме: ТМоусеБуттон; Схифт: ТСхифтСтате; Кс, И: Интегер);започетиако (цхкПоситионРунТиме Провјерено) И
(Пошиљалац је ТВинЦонтрол) ондазапочети
инРепоситион: = Тачно; СетЦаптуре (ТВинЦонтрол (пошиљалац) .Хандле); ГетЦурсорПос (стариПос); крај; крај; (* ЦонтролМоусеДовн *)

ЦонтролМоусеДовн укратко: једном када корисник притисне тастер миша над управљачком типком, ако је омогућено репозиционирање у току рада (потврдни оквир) цхкПоситионРунТиме је проверено), а контрола која је чак померала миша изведена је из ТВинЦонтрол, обележите да се врши репозиционирање контроле (инРепоситион: = Тачно) и побрините се да је сва обрада миша заробљена за контролу - да спречите да задани догађаји „клик“ не буду обрађено.

процедураТФорм1.ЦонтролМоусеМове ( Пошиљалац: ТОбјецт; Схифт: ТСхифтСтате; Кс, И: Интегер);цонст
минВидтх = 20; минХеигхт = 20; вар
невПос: ТПоинт; фрмПоинт: ТПоинт; започетиако инРепоситион ондазапочетиса ТВинЦонтрол (пошиљалац) урадитизапочети
ГетЦурсорПос (невПос); ако ссСхифт ин Смена ондазапочети//resize
Екран. Курсор: = црСизеНВСЕ; фрмПоинт: = СцреенТоЦлиент (миш). ЦурсорПос); ако фрмПоинт. Кс> минВидтх онда
Ширина: = фрмПоинт. ИКС; ако фрмПоинт. И> минХеигхт онда
Висина: = фрмПоинт. И; крајдруго//moveзапочети
Екран. Курсор: = црСизе; Лево: = лево - стариПос. Кс + невПос. ИКС; Врх: = Врх - стариПос. И + невПос. И; олдПос: = невПос; крај; крај; крај; крај; (* ЦонтролМоусеМове *)

ЦонтролМоусеМове укратко: промените курсор екрана да би одражавао операцију: ако је притиснут тастер Схифт, дозволите промену величине или једноставно преместите контролу у ново место (где миш иде). Белешка: минВидтх и минХеигхт константе пружају неку врсту ограничења величине (минимална контролна ширина и висина).

Када се тастер миша ослободи, превлачење или промена величине је готова:

процедураТФорм1.ЦонтролМоусеУп ( Пошиљалац: ТОбјецт; Дугме: ТМоусеБуттон; Схифт: ТСхифтСтате; Кс, И: Интегер);започетиако инРепоситион ондазапочети
Екран. Курсор: = црДефаулт; РелеасеЦаптуре; инРепоситион: = Нетачно; крај; крај; (* ЦонтролМоусеУп *)

ЦонтролМоусеУп укратко: када корисник заврши премештање (или промену величине контроле) отпустите снимање миша (како би се омогућила подразумевана обрада кликова) и означите да је репозиционирање завршено.

И то ради! Преузмите огледну апликацију и покушајте сами.

Напомена: Други начин за померање контрола током извођења је коришћење Делфи Превуци и отпусти сродна својства и методе (ДрагМоде, ОнДрагДроп, ДрагОвер, БегинДраг, итд.). Превлачењем и испуштањем може се користити за пребацивање предмета из једне контроле - попут оквира са списком или стабла - у другу.

Како запамтити контролни положај и величину?

Ако дозволите кориснику да се помера и мијења величину контрола обрасца, морате осигурати да се постављање контроле на неки начин чува се када је образац затворен и да се положај сваке контроле враћа када се креира / учита. Ево како чувати својства Лева, Врх, Ширина и Висина за сваку контролу на обрасцу, у ан ИНИ датотека.

Шта кажете на ручке величине 8?

Када кориснику омогућите кретање и промену величине контрола на Делпхи обрасцу, у току рада помоћу миша, на Потпуно опонашајући дизајн-временско окружење, додајте ручицама од осам величина управљачком тијелу промењена величина

instagram story viewer