---------------------------------------------------------- [BUG/PRB.] VFP 9.0 FIX - FIX THE ANCHOR PROPERTY January 2024 ---------------------------------------------------------- CCB 1. BUG: In vfp9, the Anchor property can only work fine when the Form.ScaleMode property is 3 (Pixels), it can not work fine when the Form.ScaleMode property is 0 (Foxels). The bug only occurs when the Form.ScaleMode property is 0 (Foxels). The bug only occurs when the Anchor property includes the following flags: 4 (Bottom Absolute), 8 (Right Absolute), 16 (Top Relative), 32 (Left Relative), 64 (Bottom Relative), 128 (Right Relative), 256 (Horizontal Fixed Size), 512 (Vertical Fixed Size). The bug also occurs for the PageFrame control when we set the TabOrientation property. In vfp9, the Anchor property can not work fine when the Form.ScaleMode property is 0 (Foxels), please refer to the picture testanchor-vfp9.jpg: 2. CAUSE: In vfp9, when Form.ScaleMode property is 0 (Foxels), it ALWAYS calls the Move() Method with Pixel values, it will NOT convert Pixel values to Foxel values. For example, in the caller: THIS.Move(10,20) && nLeft = 10 Pixels, nTop = 20 Pixels in the callee: nLeft = 10 Foxels, nTop = 20 Foxels they are incorrect! In VFP Advanced, when Form.ScaleMode property is 0 (Foxels), it will convert Pixel values to Foxel values, and then the object will be displayed normal. 3. RESOLUTION: We can write some code to fix the BUG. Label50641a :: xor eax , eax ;0x0050641a : 33c0 mov dword ptr [ ebp + 64 ] , 01h ;0x0050641c : c7454001000000 call Fun42c118 ;0x00506423 : e8f05cf2ff mov esi , dword ptr [ Data9370c4 ] ;0x00506428 : 8b35c4709300 mov eax , ebx ;0x0050642e : 8bc3 imul eax , eax , 02Ch ;0x00506430 : 6bc02c mov ecx , esp ;0x00506433 : 8bcc sub ecx , esi ;0x00506435 : 2bce cmp ecx , eax ;0x00506437 : 3bc8 jle Label5bc9e4 ;0x00506439 : 0f8ea5650b00 add eax , 07h ;0x0050643f : 83c007 and eax , 0FFFFFFF8h ;0x00506442 : 83e0f8 call Fun42c118 ;0x00506445 : e8ce5cf2ff mov edi , esp ;0x0050644a : 8bfc Label50644c :: test edi , edi ;0x0050644c : 85ff mov dword ptr [ ebp + 84 ] , edi ;0x0050644e : 897d54 je Label5bc9eb ;0x00506451 : 0f8494650b00 test ebx , ebx ;0x00506457 : 85db jbe Label502a79 ;0x00506459 : 0f861ac6ffff mov esi , ebx ;0x0050645f : 8bf3 imul esi , esi , 0FFFFFFD4h ;0x00506461 : 6bf6d4 Label506464 :: mov ecx , dword ptr [ Data9370f0 ] ;0x00506464 : 8b0df0709300 push edi ;0x0050646a : 57 lea edx , dword ptr [ esi + ecx + 44 ] ;0x0050646b : 8d540e2c push edx ;0x0050646f : 52 call Fun505990 ;0x00506470 : e81bf5ffff add edi , 02Ch ;0x00506475 : 83c72c add esi , 02Ch ;0x00506478 : 83c62c dec ebx ;0x0050647b : 4b ; ; ------------------------------------------------- ; VFP 9.0 FIX - FIX THE ANCHOR PROPERTY ; September 2021 ; ------------------------------------------------- ; CCB ; ; In vfp9, the Anchor property can only work fine when the Form.ScaleMode property is 3 (Pixels), ; it can not work fine when the Form.ScaleMode property is 0 (Foxels). ; Now the Anchor property can work fine when the Form.ScaleMode property is 3 (Pixels) or 0 (Foxels). ; ; 2021/9/18, by ccb ; ; je Label502a79 ;0x0050647c : 0f84f7c5ffff ; jmp Label506464 ;0x00506482 : ebe0 jne Label506464 ;0x00506482 : ebe0 cmp dword ptr vfpa_sys9070_data,00h je Label502a79 cmp dword ptr vfpa_movemethod_inmovemethod,00h je Label502a79 cmp dword ptr [ ebp + 92 ] , 0107h jne Label502a79 cmp dword ptr [ ebp + 116 ] , 04h jne Label502a79 mov eax , dword ptr [ ebp + 84 ] cmp byte ptr [eax] , 49h jne Label502a79 add eax , 2Ch cmp byte ptr [eax] , 49h jne Label502a79 add eax , 2Ch cmp byte ptr [eax] , 49h jne Label502a79 add eax , 2Ch cmp byte ptr [eax] , 49h jne Label502a79 push edi mov edi , dword ptr [ ebp + 96 ] call Fun4f1526 pop edi cmp eax , 00h jne Label502a79 sub esp , 10h lea eax , dword ptr [ esp ] push eax mov eax , dword ptr [ ebp + 96 ] call Fun507352 mov ecx , dword ptr [ ebp + 84 ] fild dword ptr [ ecx + 12 ] mov edx , dword ptr [eax] movzx edx ,word ptr [ edx + 0160h ] mov dword ptr [ esp ] , edx fild dword ptr [ esp ] fdivr st(0) , st(1) fstp qword ptr [ ecx + 16 ] mov byte ptr [ecx] , 04Eh mov dword ptr [ ecx + 4 ] , 0Fh mov dword ptr [ ecx + 8 ] , 02h fstp st(0) add ecx , 2Ch fild dword ptr [ ecx + 12 ] mov edx , dword ptr [eax] movzx edx ,word ptr [ edx + 0162h ] mov dword ptr [ esp ] , edx fild dword ptr [ esp ] fdivr st(0) , st(1) fstp qword ptr [ ecx + 16 ] mov byte ptr [ecx] , 04Eh mov dword ptr [ ecx + 4 ] , 0Fh mov dword ptr [ ecx + 8 ] , 02h fstp st(0) add ecx , 2Ch fild dword ptr [ ecx + 12 ] mov edx , dword ptr [eax] movzx edx ,word ptr [ edx + 0160h ] mov dword ptr [ esp ] , edx fild dword ptr [ esp ] fdivr st(0) , st(1) fstp qword ptr [ ecx + 16 ] mov byte ptr [ecx] , 04Eh mov dword ptr [ ecx + 4 ] , 0Fh mov dword ptr [ ecx + 8 ] , 02h fstp st(0) add ecx , 2Ch fild dword ptr [ ecx + 12 ] mov edx , dword ptr [eax] movzx edx ,word ptr [ edx + 0162h ] mov dword ptr [ esp ] , edx fild dword ptr [ esp ] fdivr st(0) , st(1) fstp qword ptr [ ecx + 16 ] mov byte ptr [ecx] , 04Eh mov dword ptr [ ecx + 4 ] , 0Fh mov dword ptr [ ecx + 8 ] , 02h fstp st(0) add esp , 10h jmp Label502a79 Now in VFP Advanced, the Anchor property can work fine when the Form.ScaleMode property is 3 (Pixels) or 0 (Foxels). Please refer to the picture testanchor-vfpa.jpg: 4. APPLIES TO: VFP 9.0.0.2412 VFP 9.0.0.3504 (SP1) VFP 9.0.0.4611 (SP2) VFP 9.0.0.5015 (SP2) VFP 9.0.0.5411 (SP2) VFP 9.0.0.5721 (SP2) VFP 9.0.0.5815 (SP2) VFP 9.0.0.6303 (SP2) VFP 9.0.0.6602 (SP2) VFP 9.0.0.7423 (SP2) The bug has been fixed in VFP Advanced. 5. REFERENCE WEBSITES: 1, baiyujia.com: http://www.baiyujia.com http://www.baiyujia.com/vfpdocuments/f_vfp9fix196.asp 2, foxite.com: https://www.foxite.com/archives/items-on-form-disappear-0000376871.htm 6. OTHER: For reference only, there is no guarantees. Any questions or suggestions, please send me an email at ccb2000@163.com. |