Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 467 → Rev 468

/programs/develop/examples/editbox/trunk/FAQ.txt
0,0 → 1,187
Ïîñäåäíàÿ ìîäèôèêàöèÿ
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;Ñòðóêòóðíîå îïèñàíèå âîçìîæíîñòè êîìïîåíòà è ìîäåëåé åãî èñïîëüçîâàíèÿ.
;;;;;;;;;;;;;;;;;;;;;;;;;;;
Íàïèøèòå â èñõîäíîì êîäå ñâîåé ïðîãðàììû use_edit_box,
ýòî âñòàâèò íåîáõîäèìûå ïðîöåäóðû â êîä âàøåé ïðîãðàììû.
Ïðîöåäóðû:
edit_box.draw - ïîëíàÿ ïåðåðèñîâêà;
edit_box.key - îáðàáîòêà êëàâèàòóðû;
edit_box.mouse - îáðàáîòêà ìûøè;
edit_box.focus - óñòàíîâêà ôîêóñà;
edit_box.blur - åãî ðàçìûâàíèå;
edit_box.get_n - ïîëó÷èòü êîëè÷åñòâî ïðîðèñîâûâàåìûõ ñèìâîëîâ.
Ïðè âûçîâå ëþáûõ èç ýòèõ ïðîöåäóð â ðåãèñòðå edi ñëåäóåò
îñòàâèòü óêàçàòåëü íà ñòðóêòóðó.
Ïðèìåð ñòðóêòóðû:
some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text
äëèíà, âûñîòà, âåðõ, öâåò ôîíà, öâåò ðàìêè, åñëè âûáðàí,
öâåò ðàìêè, åñëè íå âûáðàí, ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ,
óêàçàòåëü íà áóôåð, ãäå áóäóò õðàíèòñÿ ñèìâîëû. Áóôåð äîëæåí
îêàí÷èâàòüñÿ íóëåì, íàïðèìåð åñëè ìàêñèìàëüíîå êîëè÷åñòâî 255:
some_edit_text:
rb 256 ;255+1
Ïðèìåð âûçîâà ïðîöåäóðû:
mov edi,some_edit
call edit_box.draw
Ïðè âûçîâå ïðîöåäóðû edit_box.key êîä êëàâèøè äîëæåí
íàõîäèòñÿ â ah, òî åñòü ïåðåä âûçîâîì ýòîé ïðîöåäóðû íàäî âûçâàòü
2-óþ ñèñåìíóþ ôóíêöèþ, íàïðèìåð:
mov eax,2
int 0x40
mov edi,some_edit1
call edit_box.key
mov edi,some_edit2
call edit_box.key
Ïåðåä âûçîâîì îáðàáîò÷èêà ìûøè ñëåäóåò ïðîâåðèòü, ÿâëÿåòñÿ ëè îêíî
àêòèâíûì.
Åñëè ùåë÷îê ìûøè áûë ïðîéçâåäåí çà ïðåäåëàìè edit box
ôîêóñ òåðÿåòñÿ.
:::::::::::::::::::::::::
;;;Ìàêðîñû, è ïåðåäàâàåìûå èì ïàðàìåòðû
;;;;;;;;;;;;;;;;;;;;;;;;;
***********
use_edit_box
äàííûé ìàêðîñ âñòàâëÿåò îáùèé êîä editbox
structure_of_potock - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðêòóðó 9 ôóíöèè - îáÿçàòåëüíûé ïàðàìåòð
 
Åñëè âû èñïîëüçóåòå ïðè ïðîðèñîâêå îêíà
mcall 0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
òî 0xb3AABBCC - òðåòèé áèò - êîòîðûé ãîâîðèò ÷òî êîîðäèíàòû îò÷èòûâàòü îò êëèåíòñêîé îáëàñòè, âàì íóæíî óêàçàòü îáÿçàòåëüíî äâà ýòèõ ïàðàìåòðà
 äðóãèõ ñëó÷àÿõ ïåðåäàâàòü ýòè ïàðàìåòðû íå íóæíî
scr_h - íå îáÿçàòåëüíûé ïàðàìåòð îáû÷íî 22
scr_w - íå îáÿçàòåëüíûé ïàðàìåòð îáû÷íî 5
***********
mouse_edit_boxes
êîä îáðàáîòêè ìûøêè, âñòàâëÿåòñÿ îáû÷íî ïîñåë îáðàáîòêè âñåõ ïðåäûäóøèõ ñîáûòèé
Ïåðåäàâàåìûå ïàðàìåòðû
editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
editboxes_end - êîíåö èíôîðìàöèîííîé ñòðóêòóðû áîêñîâ
 
Êàê ïîä âàðèàíò ñóùåñòâóåò ìàêðîñ
mouse_edit_box - îí èñïîëüçóåòñÿ åñëè âûâîäèòüñÿ÷ îäèí áîêñ
Ïåðåäàâàåìûé ïàðàìåòð
editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
Áîëüøå íèêàêèõ ïàðàìåòðîâ ïåðåäàâàòü íå íóæíî.
**********
key_edit_boxes - ìàêðîñ îáðàáîêè êëàâèø áîêñàìè âñòàâëÿåòñÿ ïîñëå òîãî êàê ïðîèñõîäèò îáðàáîòêà ñîáûòèÿ ÷òî íàæàòà êëàâèøà
Ïåðåäàâàåìûå ïàðàìåòðû
editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
editboxes_end - êîíåö èíôîðìàöèîííîé ñòðóêòóðû áîêñîâ
 
Êàê ïîä âàðèàíò ñóùåñòâóåò ìàêðîñ
key_edit_box - îí èñïîëüçóåòñÿ åñëè âûâîäèòüñÿ÷ îäèí áîêñ
Ïåðåäàâàåìûé ïàðàìåòð
editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
Áîëüøå íèêàêèõ ïàðàìåòðîâ ïåðåäàâàòü íå íóæíî.
**********
draw_edit_boxes - ìàêðîñ äëÿ âûâîäà áîêñîâ èñïîëüçóåòñÿ â âûâîäå îêíà
Ïåðåäàâàåìûå ïàðàìåòðû
editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
editboxes_end - êîíåö èíôîðìàöèîííîé ñòðóêòóðû áîêñîâ
use_f9 è structure_of_potock - ïðè ïåðåäà÷å ýòîãî ïàðàìåòðà - ïðè ïåðåðèñîâêè áîêñîâ áóäåò èñïîëçîâàíà ôóíöèÿ
mcall 9,structure_of_potock,-1
êîòîðàÿ ïîëó÷àåò äàííûå î îêíå è ñêëàäûâàåò ïàðàìåòðû ïî àäðåñó structure_of_potock- åãî òî æå îáÿçàòåëüíî íóæíî ïåðåäàâàòü!!!!
Åñëè â ïðîãðàììå óæå èñïîëüçóåòñÿ ýòà ôóíöèÿ, òî íå íóæíî óêàçûâàòü äàííûå ïàðàìåòð!!!!
 
Êàê ïîä âàðèàíò ñóùåñòâóåò ìàêðîñ
draw_edit_box - îí èñïîëüçóåòñÿ åñëè âûâîäèòüñÿ÷ îäèí áîêñ
Ïåðåäàâàåìûé ïàðàìåòð
editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
use_f9 è structure_of_potock - ïðè ïåðåäà÷å ýòîãî ïàðàìåòðà - ïðè ïåðåðèñîâêè áîêñîâ áóäåò èñïîëçîâàíà ôóíöèÿ
mcall 9,structure_of_potock,-1
êîòîðàÿ ïîëó÷àåò äàííûå î îêíå è ñêëàäûâàåò ïàðàìåòðû ïî àäðåñó structure_of_potock- åãî òî æå îáÿçàòåëüíî íóæíî ïåðåäàâàòü!!!!
Åñëè â ïðîãðàììå óæå èñïîëüçóåòñÿ ýòà ôóíöèÿ, òî íå íóæíî óêàçûâàòü äàííûå ïàðàìåòð!!!!
Áîëüøå íèêàêèõ ïàðàìåòðîâ ïåðåäàâàòü íå íóæíî.
**********
default_box - ìàêðîñ êîòîðûé ïðèâîäèò îñíîâûå äàííûå ìàêðîñà ïî äåôîëòó ò.å. Ñíèìàåò áèòîâóþ ìàòðèöó âûäåëåíèÿ
Ñïåöèàëüíî äëà KFM :)) Íóæíî äîáàâèòü ýòîò êîä ïðè ïðè îáðàáîò÷èêå yes or no ïðè êîïèðîâàíèè. Åñëè áóäåò âåñòè ñåáÿ íåàäåêâàòíî - íåîáõîäèìî ðàñêîìåíòèðîâàòü ñòðîêè â äàííîì ìàêðîñå
 
 
 
 
 
 
Q:
Âîçíèêëà ïàðà ïðîáëåì:
1) Äëèíà ìàêñèìàëüíî íàáèðàåìîãî òåêñòà íè÷åì íå îãðàíè÷åíà, â ðåçóëüòàòå ïðè ïðåâûøåíèè ðàçìåðà áóôåðà çàòèðàþòñÿ äàííûå, êîòîðûå èäóò ïîñëå áóôåðà èëè êîä, åñëè îí òàì ðàñïîëîæåí.
2) Ïîëîæåíèå ýëåìåíòà ôèêñèðîâàíî, õîòåëîñü áû ðàáîòàòü ñ äèíàìè÷åñêè âû÷èñëÿåìûìè çíà÷åíèÿìè. Íàïðèìåð, åñëè ðàçìåð îêíà èçìåíèëñÿ, à ýëåìåíò äîëæåí ðàñïîëàãàòüñÿ ïî öåíòðó îêíà âñåãäà.
 
A:
1) Äëèííà íàáèðàåìîãî òåêñòà îãðàíè÷åíà, âîò ñìîòðè:
edit2 edit_box 250,5,30,0xffffff,0,0,0,308,hed,ed_focus,53 - ýòî ïðèìåð èíèöèàëèçàöèè editbox
Èòàê ïîïîðÿäêó:
Ýòî ìàêðîñ èíèöèàëèçàöèè ñòðóêòóðû
struc edit_box width,left,top,color,focus_border_color,blur_border_color,text_color,max,text,flags,size
{
.width dd width
.left dd left
.top dd top
.color dd color
.focus_border_color dd focus_border_color
.blur_border_color dd blur_border_color
.text_color dd text_color
.max dd max
.text dd text
.flags dw flags+0
.size dd size+0
.pos dd 0 - ãäå áóäåò íàõîäèòüñÿ êóðñîð
.offset dd 0
.cl_curs_x dd 0
.cl_curs_y dd 0
.shift dd 0
.shift_old dd 0
}
250 - ýòî äëèííà editbox width
5 - îòñòóï îò ëåâîãî êðàÿ left
30 - îòñòóï ñ âåðõà top
0xffffff - öâåò âíóòðè editbox
0x6a9480 - öâåò ïðè âûäåëåíèè ìûøêîé èëè ïî shift
0 - focus_border_color öâåò ðàìêè editbox, êîãäà â ôîêóñå ò.å. àêòèâåí editbox
0 - blur_border_color öâåò ðàìêè editbox, êîãäà â íå ôîêóñå ò.å. íå àêòèâåí editbox
0 - text_color öâåò òåêñòà editbox.
308 - max ìàêñèìàëüíîå êîë-âî òåêñòà êîòîðîå ìîæíîââåñòè (îòâåò íà òâîé âîïðîñ, îáðàòè âíèìàíèå íà òî ÷òî ýòî çíà÷åíèå äîëæíî áûòü ìåíüøå íà 2 ÷åì ðàçìåð áóôôåðà!! Èíà÷å ó òåáÿ áóäóò çàòåðòû 2 áàéòà ñëåäóþùèå ïîñëå áóôôåðà!)
hed - tex óêàçàòåëü íà íà÷àëî áóôôåðà
ed_focus - ôëàã(è0 â äàííîì ñëó÷àå óñòàíîâèòü ôîêóñ ýòîìó Editbox'ó - flags
53 - òåêóùåå çíà÷åíèå ðàçìåðà size. åãî íåîáõîäèìî óêàçûâàòü, åñëè òåáå íóæíî óæå îòîáðàæàòü ñóùåñòâóþùèé òåêñò. Èëè ìîæíî åùå ñäåëàòü òàê, òû óêàçûâàåøü, áóôåð ñ òåêñòîì, íî òóò íè÷åãî íå ïèøåøü, èëè 0, òîãäà, åñëè ÷åëîâåê íà÷èíàåò ââîäèòü ñâîé, ñóùåñòâóþùèé òåêñò óæå áóäåò àâòîìàòîì çàòåðò.
53 - ïîëîæåíèå êóðñîðà - ãîâîðèì, ÷òî áû îí íàõîäèëñÿ â êîíöå ñòðî÷êè íà ïîñëåäíèì ñèìâîëå, áîëüøå ýòî çíà÷åíèå áûòü íå äîëæíî, ò.ê. èíà÷å ãëþêè :)))
<DATA> - òóò ðàñïîëîæåí ñàì áóôôåð, + òåêñò.
hed db 'EDITBOX optimization and retype <Lrz> date 09.03.2007',0 ; èòîãî 54 ñèìâîëà
rb 256 ; 256+54 =310 ó ìåíÿ óêàçàí ðàçìåð 308 - 2 áàéòà íà ñèñòåèíûå íóæäû (ïî èäåå äîëæíî õâàòàòü îäíîãî, íî ãäå - òî åñòü êîñÿê â êîäå)
 
2) Èçìåíÿòü ïîëîæåíèå ïðè èçìåíåíèè ðàçìåðîâ îêíà. Âîîáùå ýòî íå çàäà÷à editbox, íî ýòî äîñòàòî÷íî ïðîñòî ñäåëàòü,
.width dd width
.left dd left
.top dd top
Âîò ÷àñòü ñòóêòóðû.
 
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;DATA äàííûå
editboxes:
edit1 edit_box 168,5,10,0xffffff,0x6a9480,0,0,0,99,ed_buffer.2,ed_figure_only
edit2 edit_box 250,5,30,0xffffff,0x6a9480,0,0xAABBCC,0,308,hed,ed_focus,53,53
edit3 edit_box 35,5,50,0xffffff,0x6a9480,0,0,0,9,ed_buffer.3,ed_figure_only
edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only
editboxes_end:
 
 
À ýòî ïðèìåð èíèöèàëèçàöèè
Èòàê ïîëó÷àåì
lea eax, editboxes - â åàõ óêàçàòåëü íà äàííûå áîêñîâ.
Äàëåå âíîñèì ïî àäðåñó
mov dword [eax], íîâîå çíà÷åíèå width
mov dword [eax+4], íîâîå çíà÷åíèå left
mov dword [eax+8], íîâîå çíà÷åíèå top
 
Ýòî âñå äëÿ ïåðâîãî editbox
äëÿ âòîðîãî
add eax,ed_struc_size
; ýòî ðàçìåðíîñòü â áàéòàõ çàïèñè äëèííû îäíîãî editbox
È ñíîâà
mov dword [eax], íîâîå çíà÷åíèå width
mov dword [eax+4], íîâîå çíà÷åíèå left
mov dword [eax+8], íîâîå çíà÷åíèå top
Ýòî óæå äëÿ âòîðîãî editbox
 
È òàê äàëåå ))).
Íàäåþñü ÿ äëÿ òåáÿ ïðîÿñíèë îáùèé àëãîðèòì èçìåíåíèÿ