----------------------------------------------------------------------------------------------- [NEW.....] VFP 9.0 FIX - THE NEW ACCESS KEYS FOR THE MENU ITEMS COMMENT AND UNCOMMENT March 2024 ----------------------------------------------------------------------------------------------- CCB 1. THE ACCESS KEYS IN EDITOR (from dv_foxhelp9.chm): Visual FoxPro Advanced (10.0.0.0) Language Reference. Keyboard Shortcuts Visual FoxPro supports keyboard shortcuts in these areas: Browse window Class Browser Code window Controls Editor Form Designer and Class Designer Help Menu commands Print Preview window Properties window Report Designer and Label Designer Window manipulation Visual FoxPro supports the following keyboard shortcuts in Editor: --------------------------------------------------------------------------------------------------------------- | Shortcut | Action | --------------------------------------------------------------------------------------------------------------- | ALT+Drag | Cuts and pastes. | --------------------------------------------------------------------------------------------------------------- | CTRL+Drag | Copies and pastes. | --------------------------------------------------------------------------------------------------------------- | CTRL+I | Show IntelliSense Quick Info. | --------------------------------------------------------------------------------------------------------------- | CTRL+J | Show IntelliSense List Members or List Values. | --------------------------------------------------------------------------------------------------------------- | F2 | Moves to the line containing the next bookmark. | --------------------------------------------------------------------------------------------------------------- | SHIFT+F2 | Moves to the line containing the previous bookmark. | --------------------------------------------------------------------------------------------------------------- | ALT+SHIFT+F2 | Toggles a bookmark for the current line on and off. | --------------------------------------------------------------------------------------------------------------- | F3 | Finds the next occurrence of the specified text. | --------------------------------------------------------------------------------------------------------------- | CTRL+F3 or CTRL+G | Finds the next occurrence of the selected text. | --------------------------------------------------------------------------------------------------------------- | SHIFT+F3 | Finds the previous occurrence of the specified text. | --------------------------------------------------------------------------------------------------------------- | CTRL+SHIFT+F3 | Finds the previous occurrence of the selected text. | --------------------------------------------------------------------------------------------------------------- | CTRL+DOWNARROW | Scrolls window up without moving cursor. | --------------------------------------------------------------------------------------------------------------- | CTRL+UPARROW | Scrolls window down without moving cursor. | --------------------------------------------------------------------------------------------------------------- | CTRL+LEFTARROW | Moves the cursor one word to the left. | --------------------------------------------------------------------------------------------------------------- | CTRL+RIGHTARROW | Moves the cursor one word to the right. | --------------------------------------------------------------------------------------------------------------- | F9 | Inserts or removes a breakpoint. | --------------------------------------------------------------------------------------------------------------- | CTRL+F9 | Enables or disables a breakpoint. | --------------------------------------------------------------------------------------------------------------- | CTRL+B | Brings up Breakpoints dialog box. | --------------------------------------------------------------------------------------------------------------- | ALT+F2 | Adds/Removes Task List shortcut. | --------------------------------------------------------------------------------------------------------------- | CTRL+U | Makes the selection all lowercase. | --------------------------------------------------------------------------------------------------------------- | CTRL+SHIFT+U | Makes the selection all uppercase. | --------------------------------------------------------------------------------------------------------------- | CTRL+BACKSPACE | Deletes a word to the left. | --------------------------------------------------------------------------------------------------------------- Visual FoxPro Advanced supports the following keyboard shortcuts in Editor: --------------------------------------------------------------------------------------------------------------- | Shortcut | Action | --------------------------------------------------------------------------------------------------------------- | CTRL++ | Enlarge font (only in VFP Advanced IDE and VFP Advanced Runtime). | --------------------------------------------------------------------------------------------------------------- | CTRL+- | Reduce font (only in VFP Advanced IDE and VFP Advanced Runtime). | --------------------------------------------------------------------------------------------------------------- | CTRL+] | Indent (only in VFP Advanced IDE and VFP Advanced Runtime). | --------------------------------------------------------------------------------------------------------------- | CTRL+[ | Unindent (only in VFP Advanced IDE and VFP Advanced Runtime). | --------------------------------------------------------------------------------------------------------------- | CTRL+* | Comment (only in VFP Advanced IDE). | --------------------------------------------------------------------------------------------------------------- | CTRL+SHIFT+* | Uncomment (only in VFP Advanced IDE). | --------------------------------------------------------------------------------------------------------------- NOTE: We can use these keyboard shortcuts in Editor if the Format menu is shown. We can't use these keyboard shortcuts in Editor if the Format menu is not shown, for example, MODIFY COMMAND ... NOMENU && there is no the Format menu. MODIFY FILE ... NOMENU && there is no the Format menu. MODIFY MEMO ... NOMENU && there is no the Format menu. The suggestion comes from Eric Selje and Douglas Sanchez Guillen. 2. CAUSE: There are some BUGs in the following code. 3. RESOLUTION: We can write some code to fix the BUG. Fun415b39 :: ; proc near push ebx ;0x00415b39 : 53 mov ebx , dword ptr [ esp + 8 ] ;0x00415b3a : 8b5c2408 push ebp ;0x00415b3e : 55 mov ebp , dword ptr [ esp + 20 ] ;0x00415b3f : 8b6c2414 push esi ;0x00415b43 : 56 mov esi , eax ;0x00415b44 : 8bf0 push edi ;0x00415b46 : 57 mov edx , ebx ;0x00415b47 : 8bd3 mov ecx , esi ;0x00415b49 : 8bce call Fun43de2a ;0x00415b4b : e8da820200 mov edx , eax ;0x00415b50 : 8bd0 xor eax , eax ;0x00415b52 : 33c0 mov ecx , 016h ;0x00415b54 : b916000000 mov edi , edx ;0x00415b59 : 8bfa rep stosd ;0x00415b5b : f3ab stosb ;0x00415b5d : aa mov ax , word ptr [ ebp + 2 ] ;0x00415b5e : 668b4502 or edi , 0FFFFFFFFh ;0x00415b62 : 83cfff cmp ax , di ;0x00415b65 : 663bc7 je Label483e17 ;0x00415b68 : 0f84a9e20600 movsx ecx , ax ;0x00415b6e : 0fbfc8 mov dword ptr [ esp + 28 ] , ecx ;0x00415b71 : 894c241c Label415b75 :: mov eax , dword ptr [ esp + 28 ] ;0x00415b75 : 8b44241c mov dword ptr [edx] , eax ;0x00415b79 : 8902 movsx ecx ,word ptr [ ebp + 0 ] ;0x00415b7b : 0fbf4d00 mov dword ptr [ edx + 4 ] , ecx ;0x00415b7f : 894a04 mov dword ptr [ edx + 32 ] , edi ;0x00415b82 : 897a20 mov al , byte ptr [ ebp + 12 ] ;0x00415b85 : 8a450c mov byte ptr [ edx + 54 ] , al ;0x00415b88 : 884236 mov cx , word ptr [ ebp + 14 ] ;0x00415b8b : 668b4d0e mov eax , dword ptr [ edx + 4 ] ;0x00415b8f : 8b4204 or eax , 0200h ;0x00415b92 : 0d00020000 mov word ptr [ edx + 55 ] , cx ;0x00415b97 : 66894a37 mov dword ptr [ edx + 40 ] , edi ;0x00415b9b : 897a28 mov word ptr [ edx + 65 ] , di ;0x00415b9e : 66897a41 mov word ptr [ edx + 50 ] , di ;0x00415ba2 : 66897a32 mov word ptr [ edx + 69 ] , di ;0x00415ba6 : 66897a45 mov dword ptr [ edx + 4 ] , eax ;0x00415baa : 894204 mov ecx , eax ;0x00415bad : 8bc8 mov ax , word ptr [ ebp + 16 ] ;0x00415baf : 668b4510 ; ; ------------------------------------------------------------------------------------ ; VFP 9.0 FIX - THE NEW ACCESS KEYS FOR THE MENU ITEMS COMMENT AND UNCOMMENT ; March 2024 ; ------------------------------------------------------------------------------------ ; CCB ; ; The new access keys for the menu items "Comment" (Ctrl+*) and "Uncomment" (Ctrl+Shift+*). ; ; 2024/3/1, by ccb ; cmp dword ptr vfpa_sys9153_data,00h je Label415bb3_uncomment_end Label415bb3_comment_start: cmp dword ptr [edx] , 0FFFFB50Bh jne Label415bb3_comment_end mov ax , 21B2h mov word ptr [ edx + 63 ] , ax jmp Label415b21 Label415bb3_comment_end: Label415bb3_uncomment_start: cmp dword ptr [edx] , 0FFFFB50Ch jne Label415bb3_uncomment_end mov ax , 31B2h mov word ptr [ edx + 63 ] , ax jmp Label415b21 Label415bb3_uncomment_end: Label415bb3 :: test ax , ax ;0x00415bb3 : 6685c0 mov word ptr [ edx + 63 ] , ax ;0x00415bb6 : 6689423f jne Label415b21 ;0x00415bba : 0f8561ffffff Label415bc0 :: mov ax , word ptr [ ebp + 10 ] ;0x00415bc0 : 668b450a cmp ax , di ;0x00415bc4 : 663bc7 jne Label5a1809 ;0x00415bc7 : 0f853cbc1800 Label415bcd :: mov ax , word ptr [ ebp + 6 ] ;0x00415bcd : 668b4506 test ax , ax ;0x00415bd1 : 6685c0 jne Label5a1824 ;0x00415bd4 : 0f854abc1800 cmp word ptr [ ebp + 8 ] , ax ;0x00415bda : 66394508 jne Label5a1824 ;0x00415bde : 0f8540bc1800 Label415be4 :: mov ax , word ptr [ ebp + 4 ] ;0x00415be4 : 668b4504 test ax , ax ;0x00415be8 : 6685c0 jne Label41825c ;0x00415beb : 0f856b260000 Label415bf1 :: movzx ebx ,word ptr [ ebp + 34 ] ;0x00415bf1 : 0fb75d22 movsx eax ,word ptr [ ebp + 26 ] ;0x00415bf5 : 0fbf451a add ebx , ebp ;0x00415bf9 : 03dd cmp eax , 0FFFFFFFFh ;0x00415bfb : 83f8ff je Label415c24 ;0x00415bfe : 7424 add eax , ebx ;0x00415c00 : 03c3 mov ecx , eax ;0x00415c02 : 8bc8 lea edi , dword ptr [ ecx + 1 ] ;0x00415c04 : 8d7901 lea ebx , dword ptr [ebx] ;0x00415c07 : 8d1b Label415c09 :: mov dl , byte ptr [ecx] ;0x00415c09 : 8a11 inc ecx ;0x00415c0b : 41 test dl , dl ;0x00415c0c : 84d2 jne Label415c09 ;0x00415c0e : 75f9 sub ecx , edi ;0x00415c10 : 2bcf test ecx , ecx ;0x00415c12 : 85c9 jle Label415c24 ;0x00415c14 : 7e0e mov edx , dword ptr [ esp + 20 ] ;0x00415c16 : 8b542414 push ecx ;0x00415c1a : 51 pushd 017h ;0x00415c1b : 6a17 push edx ;0x00415c1d : 52 push esi ;0x00415c1e : 56 call Fun43120e ;0x00415c1f : e8eab50100 Label415c24 :: ; ; ------------------------------------------------------------------------------------ ; VFP 9.0 FIX - THE NEW ACCESS KEYS FOR THE MENU ITEMS COMMENT AND UNCOMMENT ; March 2024 ; ------------------------------------------------------------------------------------ ; CCB ; ; The new access keys for the menu items "Comment" (Ctrl+*) and "Uncomment" (Ctrl+Shift+*). ; ; 2024/3/1, by ccb ; cmp dword ptr vfpa_sys9153_data,00h je Label415c24_uncomment_end2 mov edx , dword ptr [ esp + 20 ] mov ecx , esi call Fun43de2a mov edx , eax Label415c24_comment_start2: cmp dword ptr [edx] , 0FFFFB50Bh jne Label415c24_comment_end2 call vfpa_getlanguage cmp ax , "68" je Label415c24_comment_chs cmp ax , "88" je Label415c24_comment_cht cmp ax , "93" je Label415c24_comment_csy cmp ax , "84" je Label415c24_comment_deu cmp ax , "00" je Label415c24_comment_enu cmp ax , "43" je Label415c24_comment_esn cmp ax , "33" je Label415c24_comment_fra cmp ax , "55" je Label415c24_comment_kor cmp ax , "70" je Label415c24_comment_rus jmp Label415c24_comment_other Label415c24_comment_chs: mov eax , offset vfpa_comment_key_chs mov ecx , 06h jmp Label417892 Label415c24_comment_cht: mov eax , offset vfpa_comment_key_cht mov ecx , 06h jmp Label417892 Label415c24_comment_csy: mov eax , offset vfpa_comment_key_csy mov ecx , 06h jmp Label417892 Label415c24_comment_deu: mov eax , offset vfpa_comment_key_deu mov ecx , 06h jmp Label417892 Label415c24_comment_enu: mov eax , offset vfpa_comment_key_enu mov ecx , 06h jmp Label417892 Label415c24_comment_esn: mov eax , offset vfpa_comment_key_esn mov ecx , 06h jmp Label417892 Label415c24_comment_fra: mov eax , offset vfpa_comment_key_fra mov ecx , 06h jmp Label417892 Label415c24_comment_kor: mov eax , offset vfpa_comment_key_kor mov ecx , 06h jmp Label417892 Label415c24_comment_rus: mov eax , offset vfpa_comment_key_rus mov ecx , 06h jmp Label417892 Label415c24_comment_other: mov eax , offset vfpa_comment_key_other mov ecx , 06h jmp Label417892 Label415c24_comment_end2: Label415c24_uncomment_start2: cmp dword ptr [edx] , 0FFFFB50Ch jne Label415c24_uncomment_end2 call vfpa_getlanguage cmp ax , "68" je Label415c24_uncomment_chs cmp ax , "88" je Label415c24_uncomment_cht cmp ax , "93" je Label415c24_uncomment_csy cmp ax , "84" je Label415c24_uncomment_deu cmp ax , "00" je Label415c24_uncomment_enu cmp ax , "43" je Label415c24_uncomment_esn cmp ax , "33" je Label415c24_uncomment_fra cmp ax , "55" je Label415c24_uncomment_kor cmp ax , "70" je Label415c24_uncomment_rus jmp Label415c24_uncomment_other Label415c24_uncomment_chs: mov eax , offset vfpa_uncomment_key_chs mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_cht: mov eax , offset vfpa_uncomment_key_cht mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_csy: mov eax , offset vfpa_uncomment_key_csy mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_deu: mov eax , offset vfpa_uncomment_key_deu mov ecx , 0Fh jmp Label417892 Label415c24_uncomment_enu: mov eax , offset vfpa_uncomment_key_enu mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_esn: mov eax , offset vfpa_uncomment_key_esn mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_fra: mov eax , offset vfpa_uncomment_key_fra mov ecx , 0Ah jmp Label417892 Label415c24_uncomment_kor: mov eax , offset vfpa_uncomment_key_kor mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_rus: mov eax , offset vfpa_uncomment_key_rus mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_other: mov eax , offset vfpa_uncomment_key_other mov ecx , 0Ch jmp Label417892 Label415c24_uncomment_end2: Label415c25 :: movsx eax ,word ptr [ ebp + 22 ] ;0x00415c24 : 0fbf4516 cmp eax , 0FFFFFFFFh ;0x00415c28 : 83f8ff jne Label41787a ;0x00415c2b : 0f85491c0000 Label415c31 :: movsx eax ,word ptr [ ebp + 24 ] ;0x00415c31 : 0fbf4518 cmp eax , 0FFFFFFFFh ;0x00415c35 : 83f8ff je Label415c5c ;0x00415c38 : 7422 add eax , ebx ;0x00415c3a : 03c3 mov ecx , eax ;0x00415c3c : 8bc8 lea edi , dword ptr [ ecx + 1 ] ;0x00415c3e : 8d7901 Label415c41 :: mov dl , byte ptr [ecx] ;0x00415c41 : 8a11 inc ecx ;0x00415c43 : 41 test dl , dl ;0x00415c44 : 84d2 jne Label415c41 ;0x00415c46 : 75f9 sub ecx , edi ;0x00415c48 : 2bcf test ecx , ecx ;0x00415c4a : 85c9 jle Label415c5c ;0x00415c4c : 7e0e mov edx , dword ptr [ esp + 20 ] ;0x00415c4e : 8b542414 push ecx ;0x00415c52 : 51 pushd 02h ;0x00415c53 : 6a02 push edx ;0x00415c55 : 52 push esi ;0x00415c56 : 56 call Fun43120e ;0x00415c57 : e8b2b50100 Label415c5c :: movsx eax ,word ptr [ ebp + 18 ] ;0x00415c5c : 0fbf4512 cmp eax , 0FFFFFFFFh ;0x00415c60 : 83f8ff jne Label5a1839 ;0x00415c63 : 0f85d0bb1800 Label415c69 :: movsx eax ,word ptr [ ebp + 20 ] ;0x00415c69 : 0fbf4514 cmp eax , 0FFFFFFFFh ;0x00415c6d : 83f8ff jne Label5a1864 ;0x00415c70 : 0f85eebb1800 Label415c76 :: test byte ptr [ ebp + 0 ] , 04h ;0x00415c76 : f6450004 jne Label415c96 ;0x00415c7a : 751a mov eax , dword ptr [ ebp + 28 ] ;0x00415c7c : 8b451c mov ecx , dword ptr [ esp + 20 ] ;0x00415c7f : 8b4c2414 pushd 04h ;0x00415c83 : 6a04 pushd 03h ;0x00415c85 : 6a03 push ecx ;0x00415c87 : 51 mov dword ptr [ esp + 36 ] , eax ;0x00415c88 : 89442424 push esi ;0x00415c8c : 56 lea eax , dword ptr [ esp + 40 ] ;0x00415c8d : 8d442428 call Fun43120e ;0x00415c91 : e878b50100 Label415c96 :: mov eax , dword ptr [esi] ;0x00415c96 : 8b06 mov edx , dword ptr [ esp + 20 ] ;0x00415c98 : 8b542414 inc edx ;0x00415c9c : 42 mov dword ptr [ eax + 64 ] , edx ;0x00415c9d : 895040 mov ecx , dword ptr [esi] ;0x00415ca0 : 8b0e mov eax , edx ;0x00415ca2 : 8bc2 mov dword ptr [ ecx + 0ECh ] , eax ;0x00415ca4 : 8981ec000000 mov edx , dword ptr [esi] ;0x00415caa : 8b16 mov ecx , dword ptr [ esp + 28 ] ;0x00415cac : 8b4c241c mov dword ptr [ edx + 68 ] , eax ;0x00415cb0 : 894244 mov eax , dword ptr [esi] ;0x00415cb3 : 8b06 mov ebp , dword ptr [ eax + 12 ] ;0x00415cb5 : 8b680c push ecx ;0x00415cb8 : 51 lea edx , dword ptr [ esp + 24 ] ;0x00415cb9 : 8d542418 or ebp , 080000000h ;0x00415cbd : 81cd00000080 push edx ;0x00415cc3 : 52 mov dword ptr [ eax + 12 ] , ebp ;0x00415cc4 : 89680c call Fun415a13 ;0x00415cc7 : e847fdffff test eax , eax ;0x00415ccc : 85c0 je Label415cdf ;0x00415cce : 740f mov eax , dword ptr [esi] ;0x00415cd0 : 8b06 mov ecx , dword ptr [ eax + 8 ] ;0x00415cd2 : 8b4808 cmp ecx , dword ptr [ esp + 20 ] ;0x00415cd5 : 3b4c2414 jne Label40b8ef ;0x00415cd9 : 0f85105cffff Label415cdf :: pop edi ;0x00415cdf : 5f pop esi ;0x00415ce0 : 5e pop ebp ;0x00415ce1 : 5d pop ebx ;0x00415ce2 : 5b ret 0Ch ;0x00415ce3 : c20c00 4. APPLIES TO: VFP 10 (VFP Advanced) 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix318.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix92.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix155.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix156.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix307.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix316.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix317.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix352.asp http://www.baiyujia.com/vfpdocuments/f_vfp9fix353.asp 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |