;===================================================================== ; ; Обработчик событий объектов "Button" ; ;===================================================================== EvButton: ld hl,what ; поле событий ld a,(hl) ;+0 inc hl cp evMouseFr jr z,EBmouse cp evKeyboard jp z,EBkeys cp evCombKey ret nz bit 7,(ix+1) ; sel or nosel ret nz ; объект уже выделен ld b,(hl) ;+1 what inc hl ld a,(hl) ;+2 what cp 56h ; курсор вправо jr z,tb__ push ix ld e,(ix+0) ; размер таблицы "Button" ld d,0 add ix,de bit 7,(ix+0) pop ix ret z ; еще не конец объектов cp 54h ; курсор влево jr z,tb__ ld a,b and 00111111b ; биты Ctrl, Alt ret nz ld a,(hl) ;+2 what cp 15+80h ; Tab скен-код+80h ret nz ; Shift+Tab tb__: xor a ld (_Push+1),a ; Push flag jp SetButton ; select my ; Событие - мышка EBmouse: ld e,(hl) ;+1 X coord inc hl ld d,(hl) ;+2 Y coord ld a,d cp (ix+4) ; Y pos button jr nz,get_fr ; if <> exit ld a,e bit 7,(ix+2) jr nz,$+6 cp (ix+2) ; Xo pos jr c,get_fr ; < bit 7,(ix+3) jr nz,get_fr cp (ix+3) ; Xi pos jr nc,get_fr ; > xor a inc a ld (_Push+1),a ; Push flag bit 7,(ix+1) jr nz,_Push jr SetButton ; Событие - обычная клавиша EBkeys: xor a ld (_Push+1),a ; Push flag ld a,(hl) ;+1 what код клавиши bit 7,(ix+1) ; Sel or nosel jr nz,EBkeyN cp 9 ; Tab jr z,SetButton ; if tab then set button jr EBkeyN1 ; EBkeyN: cp 0Dh ; Enter jr z,EBent EBkeyN1: inc hl ld a,(hl) ;+2 what скен-код cp (ix+6) ; hot-буква ret nz EBent: ld a,1 ld (_Push+1),a SetButton: call MoveObj ; Select Button call ResDialInv ; Reset previos invert ld ix,DialTab+5 ;ld de,color_array+34 ; цвет Selected buttons ;ld (set_dial_tmp_inv+1),de ld e,(ix+2) ; Xo ld d,(ix+4) ; Y ld a,(ix+3) ; Xi sub e ld c,a call SetDialInv ; выделить бутон цветом ;ld de,color_array+26 ; цвет Selected title (объекта) ;ld (set_dial_tmp_inv+1),de _Push: ld a,0 or a jr z,BTexit call PushBut ; засветить курсор ld hl,what ld (hl),evCommand inc hl ld a,(ix+5) ; номер команды ld (hl),a get_fr: jp GetFire ; ; Button exit BTexit: ld hl,what ld (hl),evNothing ret ;[]===========================================================[] ; Event button ; IX,DialTab+5 ;EButton:LD HL,what ; список событий ; LD A,(HL) ; INC HL ; CP evMouseFr ; JR Z,EBmouse ; CP evKeyboard ; JR Z,EBkeys ; CP evCombKey ; RET NZ ; BIT 7,(IX+1) ; RET NZ ; выйти - объект выделен ; PUSH IX ; LD E,(IX+0) ; LD D,0 ; ADD IX,DE ; BIT 7,(IX+0) ; POP IX ; RET Z ; INC HL ; LD A,(HL) ;+1 ; CP 9 ; Shift+Tab ; RET NZ ; xor a ; LD (_Push+1),A ; Push flag ; JP SetButt ; выделить пред. объект ; Событие от мышки, ; проверка координат ;EBmouse:LD E,(HL) ;Xcoord ; INC HL ; LD D,(HL) ;Ycoord ; LD A,D ; CP (IX+4) ;Y pos button ; RET NZ ;if <> exit ; LD A,E ; BIT 7,(IX+2) ; JR NZ,$+6 ; CP (IX+2) ;Xo pos ; RET C ;< ; BIT 7,(IX+3) ; RET NZ ; CP (IX+3) ;Xi pos ; RET NC ;> ; SUB A ; LD (Kbutt+1),A ; INC A ; LD (_Push+1),A ;Push flag ; BIT 7,(IX+1) ; JR NZ,_Push ; JR SetButt ; Событие - нажата клавиша ;EBkeys: xor a ; LD (_Push+1),A ; Push flag ; LD A,(HL) ; cp " " ; jr c,ebkey1 ; cp "A" ; ret c ;ebkey1: inc hl ; hl,what+2 ; bit 7,(hl) ; нажата клавиша с Ctrl,Shift,Alt ? ; ret nz ; да, выйти ; RES 5,A ; a..z -> A..Z ; BIT 7,(IX+1) ; выбрана или не выбрана ; JR NZ,EBkeyN ; CP 9 ; Tab ; JR Z,SetButt ; выделить след. объект ; cp 0Dh ; ### ; jr z,SetButt ; JR EBkeyN1 ; ;EBkeyN: CP 0Dh ; JR Z,EBent ;EBkeyN1:CP (IX+6) ; Hot key ; RET NZ ;EBent: LD A,1 ; LD (_Push+1),A ; LD (Kbutt+1),A ;SetButt:CALL MoveObj ; Select Button ; CALL ResDialInv ; Reset previos invert ; LD IX,DialTab+5 ; LD E,(IX+2) ; Xo ; LD D,(IX+4) ; Y ; LD A,(IX+3) ; Xi ; SUB E ; LD C,A ; CALL SetDialInv ;_Push: LD A,0 ; OR A ; JP Z,BTexit ; CALL PushBut ; Push/pop бутон ; JP C,BTexit ; LD HL,what ; LD (HL),evCommand ; INC HL ; LD A,(IX+5) ; LD (HL),A ; RET ;Button exit ;BTexit: LD HL,what ; LD (HL),evNothing ; RET