Galkov писал(а): Информация к размышлению - та же Выложи свой Win и MainForm. Вот уж Align в этих файлах точно никто не трогал. В штатном KOL-е он же работает, может ты их для себя подпилил под исправленный KOL ------------ Дoбавленo в 16.25:Заменил твой AlignChildrenProc из архива на тот код, который правили последний раз, все заработало нормально Вот рабочий код procedure AlignChildrenProc(P: PObj); const AlignModes = (1 shl byte(caBottom))+(1 shl byte(caTop))+ (((1 shl byte(caRight)) +(1 shl byte(caLeft)))shl 8)+ (((1 shl byte(caClient))+(1 shl byte(caNone)))shl 16); asm test eax,eax jz @@Ret // cmp [eax].TControl.fParent,0 // setz dl // or dl,[eax].TControl.fisForm // btr dword ptr[eax].TControl.fAligning,oaFromSelf // ja @@20 // с этого места ------------------ btr dword ptr[eax].TControl.fAligning,oaFromSelf jc @@20 cmp [eax].TControl.fParent,0 setz dl or dl,[eax].TControl.fisForm jnz @@20 // до этого ------------------------ or byte ptr[eax].TControl.fAligning,(1 shl oaWaitAlign) mov eax,[eax].TControl.fParent @@20: call @@ToBeAlign jnz @@DoAlign @@Ret: retn
@@ToBeAlign: mov dl,[eax].TControl.fVisible or dl,[eax].TControl.fCreateHidden je @@10 and dl,[eax].TControl.fisForm jne @@Ret cmp dword ptr[eax].TControl.fParent,0 je @@11 push eax mov eax,[eax].TControl.fParent call @@ToBeAlign pop eax @@10: xor dl,1 or [eax].TControl.fAligning,dl @@11: xor dl,1 retn
@@DoAlign: push ebp push ebx push esi push edi push AlignModes //00210A14h sub esp,030h mov ebx,eax and byte ptr[ebx].TControl.fAligning,not(1 shl oaWaitAlign) or byte ptr[ebx].TControl.fAligning,(1 shl oaAligning) lea edx,[esp+20h] //@CR call TControl.ClientRect @@Main: mov eax,[ebx].TControl.fChildren mov edi,[eax].TList.fCount mov ebp,[eax].TList.fItems jmp @@entry @@loop: mov esi,[ebp] mov al,[esi].TControl.fVisible or al,[esi].TControl.fCreateHidden jz @@continue movzx eax,[esi].TControl.fAlign bt [esp+30h],eax //Allowed jnc @@continue cmp byte ptr[esi].TControl.fNotUseAlign,0 jne @@align mov edx,esp //@R mov eax,esi //C call TControl.GetBoundsRect mov eax,[esp+0Ch] //R.Bottom mov [esp+1Ch],eax //H mov eax,[esp+08h] //R.Right mov [esp+18h],eax //W mov eax,[esp+04h] //R.Top mov [esp+14h],eax //R1.Top sub [esp+1Ch],eax //H mov eax,[esp] //R.Left mov [esp+10h],eax //R1.Left sub [esp+18h],eax //W mov edx,[ebx].TControl.fMargin movzx ecx,byte ptr[esi].TControl.fAlign loop @@caTop mov eax,[esp+20h] //CR.Left sub eax,[esp] //R.Left add eax,edx //+Margin mov ecx,[esp+18h] //W add ecx,edx //+Margin add [esp+20h],ecx //CR.Left jmp @@00 @@caTop: loop @@caRight mov eax,[esp+24h] //CR.Top sub eax,[esp+04h] //R.Top add eax,edx //+Margin mov ecx,[esp+1Ch] //H add ecx,edx //+Margin add [esp+24h],ecx //CR.Top jmp @@01 @@caRight: loop @@caBottom mov eax,[esp+28h] //CR.Right sub eax,[esp+08h] //R.Right sub eax,edx //-Margin mov ecx,[esp+18h] //W add ecx,edx //+Margin sub [esp+28h],ecx //CR.Right @@00: add [esp],eax //R.Left add [esp+08h],eax //R.Right mov eax,[esp+2Ch] //CR.Bottom sub eax,edx //+Margin mov [esp+0Ch],eax //R.Bottom add edx,[esp+24h] //Margin+CR.Top mov [esp+04h],edx //R.Top jmp @@caNone @@caBottom: loop @@caClient mov eax,[esp+2Ch] //CR.Bottom sub eax,[esp+0Ch] //R.Bottom sub eax,edx //-Margin mov ecx,[esp+1Ch] //H add ecx,edx //+Margin sub [esp+2Ch],ecx //CR.Bottom @@01: add [esp+04h],eax //R.Top add [esp+0Ch],eax //R.Bottom mov eax,[esp+28h] //CR.Right sub eax,edx //-Margin mov [esp+08h],eax //R.Right add edx,[esp+20h] //Margin+CR.Left mov [esp],edx //R.Left jmp @@caNone @@caClient: loop @@caNone mov eax,[esp+2Ch] //CR.Bottom sub eax,edx //-Margin mov [esp+0Ch],eax //R.Bottom mov eax,[esp+28h] //CR.Right sub eax,edx //-Margin mov [esp+08h],eax //R.Right mov eax,[esp+24h] //CR.Top add eax,edx //+Margin mov [esp+04h],eax //R.Top add edx,[esp+20h] //Margin+CR.Left mov [esp],edx //R.Left @@caNone: mov eax,[esp] //R.Left cmp eax,[esp+08h] //R.Right jle @@02 mov [esp+08h],eax //R.Right @@02: mov eax,[esp+04h] //R.Top cmp eax,[esp+0Ch] //R.Bottom jle @@03 mov [esp+0Ch],eax //R.Bottom @@03: mov edx,[esp] //R.Left sub edx,[esp+10h] //R1.Left mov eax,[esp+04h] //R.Top sub eax,[esp+14h] //R1.Top or edx,eax //ChgPos mov ecx,[esp+08h] //R.Right sub ecx,[esp] //R.Left sub ecx,[esp+18h] //W mov eax,[esp+0Ch] //R.Bottom sub eax,[esp+04h] //R.Top sub eax,[esp+1Ch] //H or eax,ecx jz @@04 and byte ptr[esi].TControl.fAligning,not(1 shl oaWaitAlign) or byte ptr[esi].TControl.fAligning,(1 shl oaFromSelf) @@04: or eax,edx jz @@align mov edx,esp //@R mov eax,esi //C call TControl.SetBoundsRect @@align: test byte ptr[esi].TControl.fAligning,(1 shl oaWaitAlign) jz @@continue mov eax,esi //C call @@DoAlign @@continue: test byte ptr[ebx].TControl.fAligning,(1 shl oaAligning) jz @@exit add ebp,4 @@entry: dec edi jge @@loop shr dword ptr[esp+30h],8 //Allowed jnz @@Main and byte ptr[ebx].TControl.fAligning,not(1 shl oaAligning) @@exit: add esp,34h pop edi pop esi pop ebx pop ebp end;
Так что, проблема все же в KOL. Что за KOL ты засунул в архив, я без понятия, но его Align нормально не работает
|