Subversion Repositories Kolibri OS

Rev

Rev 468 | Rev 772 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. Ïîñäåäíàÿ ìîäèôèêàöèÿ
  2. ;;;;;;;;;;;;;;;;;;;;;;;;;;;
  3. ;;;Ñòðóêòóðíîå îïèñàíèå âîçìîæíîñòè êîìïîíåòà è ìîäåëåé åãî èñïîëüçîâàíèÿ.
  4. ;;;;;;;;;;;;;;;;;;;;;;;;;;;
  5.   Íàïèøèòå â èñõîäíîì êîäå ñâîåé ïðîãðàììû use_edit_box,
  6. ýòî âñòàâèò íåîáõîäèìûå ïðîöåäóðû â êîä âàøåé ïðîãðàììû.
  7.   Ïðîöåäóðû:
  8.    edit_box.draw - ïîëíàÿ ïåðåðèñîâêà;
  9.    edit_box.key - îáðàáîòêà êëàâèàòóðû;
  10.    edit_box.mouse - îáðàáîòêà ìûøè;
  11.    edit_box.focus - óñòàíîâêà ôîêóñà;
  12.    edit_box.blur - åãî ðàçìûâàíèå;
  13.    edit_box.get_n - ïîëó÷èòü êîëè÷åñòâî ïðîðèñîâûâàåìûõ ñèìâîëîâ.
  14.   Ïðè âûçîâå ëþáûõ èç ýòèõ ïðîöåäóð â ðåãèñòðå edi ñëåäóåò
  15. îñòàâèòü óêàçàòåëü íà ñòðóêòóðó.
  16.   Ïðèìåð ñòðóêòóðû:
  17. some_edit edit_box 100,10,30,0x00ffffff,0,0x00aaaaaa,0,255,some_edit_text
  18. äëèíà, âûñîòà, âåðõ, öâåò ôîíà, öâåò ðàìêè, åñëè âûáðàí,
  19. öâåò ðàìêè, åñëè íå âûáðàí, ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ,
  20. óêàçàòåëü íà áóôåð, ãäå áóäóò õðàíèòñÿ ñèìâîëû. Áóôåð äîëæåí
  21. îêàí÷èâàòüñÿ íóëåì, íàïðèìåð åñëè ìàêñèìàëüíîå êîëè÷åñòâî 255:
  22.   some_edit_text:
  23.        rb      256 ;255+1
  24.   Ïðèìåð âûçîâà ïðîöåäóðû:
  25.        mov     edi,some_edit
  26.        call    edit_box.draw
  27.   Ïðè âûçîâå ïðîöåäóðû edit_box.key êîä êëàâèøè äîëæåí
  28. íàõîäèòñÿ â ah, òî åñòü ïåðåä âûçîâîì ýòîé ïðîöåäóðû íàäî âûçâàòü
  29.  2-óþ ñèñåìíóþ ôóíêöèþ, íàïðèìåð:
  30.        mov     eax,2
  31.        int     0x40
  32.        mov     edi,some_edit1
  33.        call    edit_box.key
  34.        mov     edi,some_edit2
  35.        call    edit_box.key
  36.   Ïåðåä âûçîâîì îáðàáîò÷èêà ìûøè ñëåäóåò ïðîâåðèòü, ÿâëÿåòñÿ ëè îêíî
  37. àêòèâíûì.
  38.   Åñëè ùåë÷îê ìûøè áûë ïðîéçâåäåí çà ïðåäåëàìè edit box
  39. ôîêóñ òåðÿåòñÿ.
  40. :::::::::::::::::::::::::
  41. ;;;Ìàêðîñû, è ïåðåäàâàåìûå èì ïàðàìåòðû
  42. ;;;;;;;;;;;;;;;;;;;;;;;;;
  43. ***********
  44. use_edit_box
  45. äàííûé ìàêðîñ âñòàâëÿåò îáùèé êîä editbox
  46. procinfo - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðêòóðó 9 ôóíöèè - îáÿçàòåëüíûé ïàðàìåòð
  47.  
  48. Åñëè âû èñïîëüçóåòå ïðè ïðîðèñîâêå îêíà
  49.         mcall   0,(50*65536+390),(30*65536+200),0xb3AABBCC,0x805080DD,hed
  50. òî 0xb3AABBCC - òðåòèé áèò - êîòîðûé ãîâîðèò ÷òî êîîðäèíàòû îò÷èòûâàòü îò êëèåíòñêîé îáëàñòè, âàì íóæíî óêàçàòü îáÿçàòåëüíî äâà ýòèõ ïàðàìåòðà
  51.  äðóãèõ ñëó÷àÿõ ïåðåäàâàòü ýòè ïàðàìåòðû íå íóæíî
  52. scr_h - íå îáÿçàòåëüíûé ïàðàìåòð  îáû÷íî 22
  53. scr_w - íå îáÿçàòåëüíûé ïàðàìåòð  îáû÷íî 5
  54. ***********
  55. mouse_edit_boxes
  56. êîä îáðàáîòêè ìûøêè, âñòàâëÿåòñÿ îáû÷íî ïîñåë îáðàáîòêè âñåõ ïðåäûäóøèõ ñîáûòèé
  57. Ïåðåäàâàåìûå ïàðàìåòðû
  58. editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
  59. editboxes_end - êîíåö èíôîðìàöèîííîé ñòðóêòóðû áîêñîâ
  60.  
  61. Êàê ïîä âàðèàíò ñóùåñòâóåò ìàêðîñ
  62. mouse_edit_box - îí èñïîëüçóåòñÿ åñëè âûâîäèòüñÿ÷ îäèí áîêñ
  63. Ïåðåäàâàåìûé ïàðàìåòð
  64. editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
  65. Áîëüøå íèêàêèõ ïàðàìåòðîâ ïåðåäàâàòü íå íóæíî.
  66. **********
  67. key_edit_boxes - ìàêðîñ îáðàáîêè êëàâèø áîêñàìè âñòàâëÿåòñÿ ïîñëå òîãî êàê ïðîèñõîäèò îáðàáîòêà ñîáûòèÿ ÷òî íàæàòà êëàâèøà
  68. Ïåðåäàâàåìûå ïàðàìåòðû
  69. editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
  70. editboxes_end - êîíåö èíôîðìàöèîííîé ñòðóêòóðû áîêñîâ
  71.  
  72. Êàê ïîä âàðèàíò ñóùåñòâóåò ìàêðîñ
  73. key_edit_box - îí èñïîëüçóåòñÿ åñëè âûâîäèòüñÿ÷ îäèí áîêñ
  74. Ïåðåäàâàåìûé ïàðàìåòð
  75. editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
  76. Áîëüøå íèêàêèõ ïàðàìåòðîâ ïåðåäàâàòü íå íóæíî.
  77. **********
  78. draw_edit_boxes - ìàêðîñ äëÿ âûâîäà áîêñîâ èñïîëüçóåòñÿ â âûâîäå îêíà
  79. Ïåðåäàâàåìûå ïàðàìåòðû
  80. editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
  81. editboxes_end - êîíåö èíôîðìàöèîííîé ñòðóêòóðû áîêñîâ
  82. use_f9 è procinfo - ïðè ïåðåäà÷å ýòîãî ïàðàìåòðà - ïðè ïåðåðèñîâêè áîêñîâ áóäåò èñïîëçîâàíà ôóíöèÿ
  83. mcall   9,procinfo,-1
  84. êîòîðàÿ ïîëó÷àåò äàííûå î îêíå è ñêëàäûâàåò ïàðàìåòðû ïî àäðåñó  procinfo- åãî òî æå îáÿçàòåëüíî íóæíî ïåðåäàâàòü!!!!
  85. Åñëè â ïðîãðàììå óæå èñïîëüçóåòñÿ ýòà ôóíöèÿ, òî íå íóæíî óêàçûâàòü äàííûå ïàðàìåòð!!!!
  86.  
  87. Êàê ïîä âàðèàíò ñóùåñòâóåò ìàêðîñ
  88. draw_edit_box - îí èñïîëüçóåòñÿ åñëè âûâîäèòüñÿ÷ îäèí áîêñ
  89. Ïåðåäàâàåìûé ïàðàìåòð
  90. editboxes - óêàçàòåëü íà èíôîðìàöèîííóþ ñòðóêóðó áîêñîâ
  91. use_f9 è procinfo - ïðè ïåðåäà÷å ýòîãî ïàðàìåòðà - ïðè ïåðåðèñîâêè áîêñîâ áóäåò èñïîëçîâàíà ôóíöèÿ
  92. mcall   9,procinfo,-1
  93. êîòîðàÿ ïîëó÷àåò äàííûå î îêíå è ñêëàäûâàåò ïàðàìåòðû ïî àäðåñó  procinfo- åãî òî æå îáÿçàòåëüíî íóæíî ïåðåäàâàòü!!!!
  94. Åñëè â ïðîãðàììå óæå èñïîëüçóåòñÿ ýòà ôóíöèÿ, òî íå íóæíî óêàçûâàòü äàííûå ïàðàìåòð!!!!
  95. Áîëüøå íèêàêèõ ïàðàìåòðîâ ïåðåäàâàòü íå íóæíî.
  96. **********
  97. default_box - ìàêðîñ êîòîðûé ïðèâîäèò îñíîâûå äàííûå ìàêðîñà ïî äåôîëòó ò.å. Ñíèìàåò áèòîâóþ ìàòðèöó âûäåëåíèÿ
  98. Ñïåöèàëüíî äëà KFM :)) Íóæíî äîáàâèòü ýòîò êîä ïðè ïðè îáðàáîò÷èêå yes or no ïðè êîïèðîâàíèè. Åñëè áóäåò âåñòè ñåáÿ íåàäåêâàòíî - íåîáõîäèìî ðàñêîìåíòèðîâàòü ñòðîêè â äàííîì ìàêðîñå
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105. Q:
  106. Âîçíèêëà ïàðà ïðîáëåì:
  107. 1) Äëèíà ìàêñèìàëüíî íàáèðàåìîãî òåêñòà íè÷åì íå îãðàíè÷åíà, â ðåçóëüòàòå ïðè ïðåâûøåíèè ðàçìåðà áóôåðà çàòèðàþòñÿ äàííûå, êîòîðûå èäóò ïîñëå áóôåðà èëè êîä, åñëè îí òàì ðàñïîëîæåí.
  108. 2) Ïîëîæåíèå ýëåìåíòà ôèêñèðîâàíî, õîòåëîñü áû ðàáîòàòü ñ äèíàìè÷åñêè âû÷èñëÿåìûìè çíà÷åíèÿìè. Íàïðèìåð, åñëè ðàçìåð îêíà èçìåíèëñÿ, à ýëåìåíò äîëæåí ðàñïîëàãàòüñÿ ïî öåíòðó îêíà âñåãäà.
  109.  
  110. A:
  111. 1) Äëèííà íàáèðàåìîãî òåêñòà îãðàíè÷åíà, âîò ñìîòðè:
  112. edit2 edit_box 250,5,30,0xffffff,0,0,0,308,hed,ed_focus,53 - ýòî ïðèìåð èíèöèàëèçàöèè editbox
  113. Èòàê ïîïîðÿäêó:
  114. Ýòî ìàêðîñ èíèöèàëèçàöèè ñòðóêòóðû
  115. struc edit_box width,left,top,color,focus_border_color,blur_border_color,text_color,max,text,flags,size
  116. {
  117. .width dd width
  118. .left dd left
  119. .top dd top
  120. .color dd color
  121. .focus_border_color dd focus_border_color
  122. .blur_border_color dd blur_border_color
  123. .text_color dd text_color
  124. .max dd max
  125. .text dd text
  126. .flags dw flags+0
  127. .size dd size+0
  128. .pos dd 0 - ãäå áóäåò íàõîäèòüñÿ êóðñîð
  129. .offset dd 0
  130. .cl_curs_x dd 0
  131. .cl_curs_y dd 0
  132. .shift dd 0
  133. .shift_old dd 0
  134. }
  135. 250 - ýòî äëèííà editbox width
  136. 5 - îòñòóï îò ëåâîãî êðàÿ left
  137. 30 - îòñòóï ñ âåðõà top
  138. 0xffffff - öâåò âíóòðè editbox
  139. 0x6a9480 - öâåò ïðè âûäåëåíèè ìûøêîé èëè ïî shift
  140. 0 - focus_border_color öâåò ðàìêè editbox, êîãäà â ôîêóñå ò.å. àêòèâåí editbox
  141. 0 - blur_border_color öâåò ðàìêè editbox, êîãäà â íå ôîêóñå ò.å. íå àêòèâåí editbox
  142. 0 - text_color öâåò òåêñòà editbox.
  143. 308 - max ìàêñèìàëüíîå êîë-âî òåêñòà êîòîðîå ìîæíîââåñòè (îòâåò íà òâîé âîïðîñ, îáðàòè âíèìàíèå íà òî ÷òî ýòî çíà÷åíèå äîëæíî áûòü ìåíüøå íà 2 ÷åì ðàçìåð áóôôåðà!! Èíà÷å ó òåáÿ áóäóò çàòåðòû 2 áàéòà ñëåäóþùèå ïîñëå áóôôåðà!)
  144. hed - tex óêàçàòåëü íà íà÷àëî áóôôåðà
  145. ed_focus - ôëàã(è0 â äàííîì ñëó÷àå óñòàíîâèòü ôîêóñ ýòîìó Editbox'ó - flags
  146. 53 - òåêóùåå çíà÷åíèå ðàçìåðà size. åãî íåîáõîäèìî óêàçûâàòü, åñëè òåáå íóæíî óæå îòîáðàæàòü ñóùåñòâóþùèé òåêñò. Èëè ìîæíî åùå ñäåëàòü òàê, òû óêàçûâàåøü, áóôåð ñ òåêñòîì, íî òóò íè÷åãî íå ïèøåøü, èëè 0, òîãäà, åñëè ÷åëîâåê íà÷èíàåò ââîäèòü ñâîé, ñóùåñòâóþùèé òåêñò óæå áóäåò àâòîìàòîì çàòåðò.
  147. 53 - ïîëîæåíèå êóðñîðà - ãîâîðèì, ÷òî áû îí íàõîäèëñÿ â êîíöå ñòðî÷êè íà ïîñëåäíèì ñèìâîëå, áîëüøå ýòî çíà÷åíèå áûòü íå äîëæíî, ò.ê. èíà÷å ãëþêè :)))
  148. <DATA> - òóò ðàñïîëîæåí ñàì áóôôåð, + òåêñò.
  149. hed db 'EDITBOX optimization and retype <Lrz> date 09.03.2007',0 ; èòîãî 54 ñèìâîëà
  150. rb 256 ; 256+54 =310 ó ìåíÿ óêàçàí ðàçìåð 308 - 2 áàéòà íà ñèñòåèíûå íóæäû (ïî èäåå äîëæíî õâàòàòü îäíîãî, íî ãäå - òî åñòü êîñÿê â êîäå)
  151.  
  152. 2) Èçìåíÿòü ïîëîæåíèå ïðè èçìåíåíèè ðàçìåðîâ îêíà. Âîîáùå ýòî íå çàäà÷à editbox, íî ýòî äîñòàòî÷íî ïðîñòî ñäåëàòü,
  153. .width dd width
  154. .left dd left
  155. .top dd top
  156. Âîò ÷àñòü ñòóêòóðû.
  157.  
  158. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
  159. ;DATA äàííûå
  160. editboxes:
  161. edit1 edit_box 168,5,10,0xffffff,0x6a9480,0,0,0,99,ed_buffer.2,ed_figure_only
  162. edit2 edit_box 250,5,30,0xffffff,0x6a9480,0,0xAABBCC,0,308,hed,ed_focus,53,53
  163. edit3 edit_box 35,5,50,0xffffff,0x6a9480,0,0,0,9,ed_buffer.3,ed_figure_only
  164. edit4 edit_box 16,5,70,0xffffff,0x6a9480,0,0,0,1,ed_buffer.4,ed_figure_only
  165. editboxes_end:
  166.  
  167.  
  168. À ýòî ïðèìåð èíèöèàëèçàöèè
  169. Èòàê ïîëó÷àåì
  170. lea eax, editboxes - â åàõ óêàçàòåëü íà äàííûå áîêñîâ.
  171. Äàëåå âíîñèì ïî àäðåñó
  172. mov dword [eax], íîâîå çíà÷åíèå width
  173. mov dword [eax+4], íîâîå çíà÷åíèå left
  174. mov dword [eax+8], íîâîå çíà÷åíèå top
  175.  
  176. Ýòî âñå äëÿ ïåðâîãî editbox
  177. äëÿ âòîðîãî
  178. add eax,ed_struc_size
  179. ; ýòî ðàçìåðíîñòü â áàéòàõ çàïèñè äëèííû îäíîãî editbox
  180. È ñíîâà
  181. mov dword [eax], íîâîå çíà÷åíèå width
  182. mov dword [eax+4], íîâîå çíà÷åíèå left
  183. mov dword [eax+8], íîâîå çíà÷åíèå top
  184. Ýòî óæå äëÿ âòîðîãî editbox
  185.  
  186. È òàê äàëåå ))).
  187. Íàäåþñü ÿ äëÿ òåáÿ ïðîÿñíèë îáùèé àëãîðèòì èçìåíåíèÿ