📄 ui_pop_up_list.lst
字号:
\ 00F7 E1 POP HL
\ 00F8 19 ADD HL,DE
\ 00F9 5E LD E,(HL)
\ 00FA 23 INC HL
\ 00FB 56 LD D,(HL)
\ 00FC 3E00 LD A,BYTE3 ResShowMultiString
\ 00FE 210000 LD HL,LWRD ResShowMultiString
\ 0101 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 0104 F1 POP AF
\ 0105 F1 POP AF
45 }
\ 0106 E1 POP HL
\ 0107 DDE1 POP IX
\ 0109 FDE1 POP IY
\ 010B C30000 JP LWRD ?BANK_FAST_LEAVE_L08
\ 010E ?0070:
\ 010E 0E09 LD C,9
\ 0110 116400 LD DE,100
\ 0113 ?0069:
\ 0113 3E00 LD A,BYTE3 ResShowPic
\ 0115 210000 LD HL,LWRD ResShowPic
\ 0118 C30000 JP LWRD ?BANK_CALL_DIRECT_L08
\ 011B ?0071:
\ 011B 010000 LD BC,0
\ 011E 11FFFF LD DE,65535
\ 0121 C30000 JP LWRD SetPenColor
\ 0124 ui_popup_list:
46
47 /*
48 ********************************************************************************
49 * Description : 弹出式列表选择窗体
50 *
51 * Arguments :
52 * list, 弹出式列表结构体指针
53 * list->string, 语言
54 *
55 * Returns : key
56 *
57 * Notes :
58 *
59 ********************************************************************************
60 */
61 int ui_popup_list(pop_up_list_t *list, const void (*callback)(int value))
62 {
\ 0124 C5 PUSH BC
\ 0125 FDE5 PUSH IY
\ 0127 DDE5 PUSH IX
\ 0129 DD210000 LD IX,0
\ 012D DD39 ADD IX,SP
\ 012F 21E8FF LD HL,65512
\ 0132 39 ADD HL,SP
\ 0133 F9 LD SP,HL
\ 0134 D5 PUSH DE
\ 0135 FDE1 POP IY
63 int i,active,old_active;
64 char key;
65 bool need_draw=FALSE;
66 bool need_drawall=TRUE;
67 bool value_changed=FALSE;
68 int max_group; // list->total / 7
69 int cur_group; //list->active / LIST_NUM_ONE_PAGE
70 int n; //the item to show
71 DC oldDC_sav;
72
73 active = list->active;
\ 0137 210400 LD HL,4
\ 013A 19 ADD HL,DE
\ 013B 46 LD B,(HL)
\ 013C DD70E8 LD (IX-24),B
\ 013F 23 INC HL
\ 0140 66 LD H,(HL)
\ 0141 DD74E9 LD (IX-23),H
74
75 if((list->total % LIST_NUM_ONE_PAGE) == 0) max_group--;
\ 0144 DD36FC00 LD (IX-4),0
\ 0148 DD36FF01 LD (IX-1),1
\ 014C DD36FE00 LD (IX-2),0
\ 0150 13 INC DE
\ 0151 13 INC DE
\ 0152 EB EX DE,HL
\ 0153 5E LD E,(HL)
\ 0154 23 INC HL
\ 0155 56 LD D,(HL)
\ 0156 010600 LD BC,6
\ 0159 CD0000 CALL LWRD ?SS_MOD_L02
\ 015C ?0002:
\ 015C ?0003:
76 GetDCStatus(&oldDC_sav);
\ 015C 210400 LD HL,4
\ 015F 39 ADD HL,SP
\ 0160 EB EX DE,HL
\ 0161 CD0000 CALL LWRD GetDCStatus
77
78 SetTextOutMode(1); //设字体透明
\ 0164 1E01 LD E,1
\ 0166 CD0000 CALL LWRD SetTextOutMode
\ 0169 ?0005:
79
80 while(1)
81 {
82 if(need_drawall)
\ 0169 AF XOR A
\ 016A DDB6FF OR (IX-1)
\ 016D 2808 JR Z,?0008
\ 016F ?0007:
83 {
84
85 need_drawall=FALSE;
86 need_draw=TRUE;
\ 016F DD36FF00 LD (IX-1),0
\ 0173 DD36FC01 LD (IX-4),1
\ 0177 ?0008:
87 }
88
89 if(need_draw)
\ 0177 AF XOR A
\ 0178 DDB6FC OR (IX-4)
\ 017B CA0A03 JP Z,?0010
\ 017E ?0009:
90 {
91 old_active=active;
92 cur_group = active / LIST_NUM_ONE_PAGE;
\ 017E 010600 LD BC,6
\ 0181 DD5EE8 LD E,(IX-24)
\ 0184 DD56E9 LD D,(IX-23)
\ 0187 CD0000 CALL LWRD ?SS_DIV_L02
\ 018A DD73F6 LD (IX-10),E
\ 018D DD72F7 LD (IX-9),D
93 n = cur_group*LIST_NUM_ONE_PAGE;
\ 0190 EB EX DE,HL
\ 0191 29 ADD HL,HL
\ 0192 4D LD C,L
\ 0193 44 LD B,H
\ 0194 29 ADD HL,HL
\ 0195 09 ADD HL,BC
\ 0196 DD75F4 LD (IX-12),L
\ 0199 DD74F5 LD (IX-11),H
94 ResShowPic(MENUTWO,0,0);
\ 019C 0E00 LD C,0
\ 019E C5 PUSH BC
\ 019F 116D00 LD DE,109
\ 01A2 CD1301 CALL LWRD ?0069
\ 01A5 F1 POP AF
95 ResShowPic(DHT,194,8);
\ 01A6 0E08 LD C,8
\ 01A8 C5 PUSH BC
\ 01A9 0EC2 LD C,194
\ 01AB 112D00 LD DE,45
\ 01AE CD1301 CALL LWRD ?0069
\ 01B1 F1 POP AF
96 SetPenColor(Color_WHITE_def);
\ 01B2 CD1B01 CALL LWRD ?0071
97 ResShowMultiString(list->headid, list->string_id,
98 list_str_x_def, list_str_y_def);
\ 01B5 0E94 LD C,148
\ 01B7 C5 PUSH BC
\ 01B8 0E16 LD C,22
\ 01BA C5 PUSH BC
\ 01BB FD4E08 LD C,(IY+8)
\ 01BE FD5E06 LD E,(IY+6)
\ 01C1 FD5607 LD D,(IY+7)
\ 01C4 3E00 LD A,BYTE3 ResShowMultiString
\ 01C6 210000 LD HL,LWRD ResShowMultiString
\ 01C9 CD0000 CALL LWRD ?BANK_CALL_DIRECT_L08
\ 01CC F1 POP AF
\ 01CD F1 POP AF
99
100 SetPenColor(Color_WHITE_def);
\ 01CE CD1B01 CALL LWRD ?0071
101 if(callback != NULL)
\ 01D1 DD6EE8 LD L,(IX-24)
\ 01D4 DD66E9 LD H,(IX-23)
\ 01D7 DD75F8 LD (IX-8),L
\ 01DA DD74F9 LD (IX-7),H
\ 01DD DD7E0A LD A,(IX+10)
\ 01E0 DDB60B OR (IX+11)
\ 01E3 DDB60C OR (IX+12)
\ 01E6 2804 JR Z,?0012
\ 01E8 ?0011:
102 callback(active);
\ 01E8 EB EX DE,HL
\ 01E9 CDBE04 CALL LWRD ?0073
\ 01EC ?0012:
103
104 for(i=0; i<LIST_NUM_ONE_PAGE; i++)
\ 01EC AF XOR A
\ 01ED DD77EA LD (IX-22),A
\ 01F0 DD77EB LD (IX-21),A
\ 01F3 ?0014:
\ 01F3 010680 LD BC,32774
\ 01F6 DD6EEA LD L,(IX-22)
\ 01F9 DD66EB LD H,(IX-21)
\ 01FC 78 LD A,B
\ 01FD AC XOR H
\ 01FE 67 LD H,A
\ 01FF ED42 SBC HL,BC
\ 0201 D20603 JP NC,?0013
\ 0204 ?0015:
105 {
106 if(n+i >= list->total) break; //处理不足LIST_NUM_ONE_PAGE个的情况
\ 0204 FD4E02 LD C,(IY+2)
\ 0207 FD4603 LD B,(IY+3)
\ 020A DD6EEA LD L,(IX-22)
\ 020D DD66EB LD H,(IX-21)
\ 0210 DD5EF4 LD E,(IX-12)
\ 0213 DD56F5 LD D,(IX-11)
\ 0216 19 ADD HL,DE
\ 0217 F680 OR 128
\ 0219 ED42 SBC HL,BC
\ 021B E21F02 JP PO,?0061
\ 021E AC XOR H
\ 021F ?0061:
\ 021F F20603 JP P,?0013
\ 0222 ?0017:
\ 0222 ?0018:
107 if(n+i==active)
\ 0222 DD6EEA LD L,(IX-22)
\ 0225 DD66EB LD H,(IX-21)
\ 0228 4B LD C,E
\ 0229 42 LD B,D
\ 022A 09 ADD HL,BC
\ 022B DD4EE8 LD C,(IX-24)
\ 022E DD46E9 LD B,(IX-23)
\ 0231 A7 AND A
\ 0232 ED42 SBC HL,BC
\ 0234 210000 LD HL,menu_pos_list
\ 0237 DD4EEA LD C,(IX-22)
\ 023A DD46EB LD B,(IX-21)
\ 023D 09 ADD HL,BC
\ 023E 2071 JR NZ,?0020
\ 0240 ?0019:
108 {
109 {
110 ResShowPic(MENUBCK, menu_bck_x_def, menu_pos_list[i]-4);
\ 0240 7E LD A,(HL)
\ 0241 C6FC ADD A,252
\ 0243 5F LD E,A
\ 0244 D5 PUSH DE
\ 0245 CD0E01 CALL LWRD ?0070
\ 0248 F1 POP AF
111 ResShowPic(DHTHK,194, menu_pos_list[i]+6);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -