Вверх ↑
Этот топик читают: Гость
Разработчик
Ответов: 26061
Рейтинг: 2120
#16: 2013-12-20 12:49:38 ЛС | профиль | цитата
Вот, немного упростил схему для штатного компилятора

Add(MainForm,14330442,434,154)
{
MouseCapture=0
Point(Handle)
Point(onKillFocus)
Point(onMouseDown)
Point(doSetFocus)
}
Add(Button,12156273,294,161)
{
Left=15
Top=25
link(onClick,7479583:doWork1,[(361,167)(361,188)])
}
Add(TabControl,16410121,294,203)
{
Left=105
Top=45
Tabs=#1:1|1:2|
Bitmaps=[]
Point(onMouseDown)
Point(onMouseUp)
link(onMouseDown,7479583:doWork2,[(333,216)(333,195)])
link(onMouseUp,7479583:doWork3,[(340,223)(340,202)])
}
Add(ChildForm,7479583,371,182)
{
link(onEvent1,14330442:doSetFocus,[])
}
BEGIN_SDK
Add(EditMulti,6505759,14,21)
{
EventCount=1
WorkCount=3
Width=342
Height=340
link(doWork1,5364107:doOn,[(60,27)(60,167)])
link(doWork2,5309254:doWork1,[(53,34)(53,279)])
link(doWork3,7938082:doTimer,[(46,41)(46,321)])
}
Add(MainForm,5879619,287,133)
{
Left=35
Top=105
Visible=1
Point(Handle)
Point(doVisible)
Point(Close)
link(Close,15574186:GetData,[])
}
Add(SendMessage,16199774,287,189)
{
Message=4
link(Handle,5879619:Handle,[])
}
Add(Hub,3913542,203,154)
{
link(onEvent1,16199774:doSendMessage,[(228,160)(228,195)])
link(onEvent2,5879619:doVisible,[])
}
Add(EventFromData,15574186,287,84)
{
link(onEvent,5364107:doReset,[(326,90)(326,76)(67,76)(67,160)])
}
Add(Switch,5364107,77,147)
{
DataOn=Integer(1)
DataOff=Integer(0)
Point(State)
Point(doOn)
Point(onOn)
link(onOn,10548590:doData,[])
}
Add(IndexToChanel,9564083,77,210)
{
Point(Index)
link(onEvent2,7022322:doWork3,[(179,223)])
link(Index,5364107:State,[])
}
Add(HubEx,7022322,175,154)
{
link(onEvent,3913542:doEvent1,[])
}
Add(DoData,10548590,126,154)
{
link(onEventData,7022322:doWork2,[])
}
Add(Hub,14164389,133,315)
{
link(onEvent1,5309254:doWork2,[(158,321)(158,286)])
link(onEvent2,6505759:onEvent1,[(333,328)(333,27)])
}
Add(ChanelToIndex,5309254,182,273)
{
link(onIndex,9564083:doEvent,[(221,279)(221,265)(67,265)(67,216)])
}
Add(Timer,7938082,77,315)
{
Interval=10
Enable=1
AutoStop=1
link(onTimer,14164389:doEvent1,[])
}
END_SDK


Neo писал(а):
А чем пользоваться

Найти последний KOL от Galkov-а

Вот, ссылка на последний KOL от Galkov-a -- http://yadi.sk/d/zQhNMX1FEdEAh
карма: 22

1
Голосовали:Neo
Ответов: 8887
Рейтинг: 823
#17: 2013-12-20 12:51:29 ЛС | профиль | цитата
[flood]
Neo писал(а):
..в пробеле что-то общее между энтером и левой клавишей мышки..
Тоже много общего у китайца и скандинава![/flood]
карма: 19

0
Ответов: 4621
Рейтинг: 746
#18: 2013-12-20 12:59:33 ЛС | профиль | цитата
ser_davkin писал(а):
Кнопка в фокусе реагировала на клавишу ввода, но не на пробел
В Windows на клавишу ввода реагирует только кнопка с DefaultBtn=True (в KOL вроде были какие-то дефайны для изменения этого поведения)
карма: 26

0
Ответов: 9906
Рейтинг: 351
#19: 2013-12-20 13:27:15 ЛС | профиль | цитата
nesco писал(а):
Но зато в нем не работает вот это, случайно обнаружил


Хех... Что ж Вы за народ-то такой :
screen4nesco.png

Информация к размышлению - та же
------------ Дoбавленo в 13.27:
nesco писал(а):
Вот, ссылка на последний KOL

Дык и на форуме есть: http://forum.hiasm.com//getfile/32019
карма: 9

0
файлы: 1screen4nesco.png [9.3KB] [508]
Разработчик
Ответов: 26061
Рейтинг: 2120
#20: 2013-12-20 16:25:10 ЛС | профиль | цитата
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 нормально не работает
карма: 22

0
Ответов: 9906
Рейтинг: 351
#21: 2013-12-23 08:07:39 ЛС | профиль | цитата
nesco писал(а):
. В штатном KOL-е он же работает, может ты их для себя подпилил под исправленный KOL
Ну конечно
Цельными днями сижу и чего-то подпиливаю...

Так что, проблема все же в KOL
Чего-то я сомневаюсь.
Такую багу, какую ты показал, мы бы еще "5 лет назад" заметили.
Типа doAlign вообще не тестировался... Но мне кажется (руку на отсечение не дам - давно было-то), что это именно я его и добавлял, и как раз сразу после внедрения своего

nesco писал(а):
Выложи свой Win и MainForm
Легко (даже не заглядывал, извини - немного не до этого сейчас)
карма: 9

0
файлы: 1hisyswin.rar [8.9KB] [267]
Разработчик
Ответов: 26061
Рейтинг: 2120
#22: 2013-12-23 09:59:35 ЛС | профиль | цитата
Galkov писал(а):
Легко

Проверил, кардинальных отличий не нашел (только новые добавления, совсем не связанные с управлением), но на всякий случай подставил -- не работает с последним KOL-ом из твоего архива, а вот с KOL-ом, который ты оставлял нам до выкладывания самого последнего, с там работает, это его я и выложил с последними правками по твоим рекомендациям.
карма: 22

0
Ответов: 52
Рейтинг: 0
#23: 2021-07-27 21:39:25 ЛС | профиль | цитата
Всем привет, возможно поздно, но увидел сообщение с фокусом кнопки, я тоже сталкивался с подобной проблемой.
И решил ее, поставив скрытую кнопку, и все фокусы сбрасывал на нее, при клике на другие нужные кнопки.
Надеюсь что понятно описал)))
Спасибо за внимание.
карма: 0

0
Ответов: 263
Рейтинг: 18
#24: 2021-07-28 05:54:27 ЛС | профиль | цитата
Во чудеса творятся! Сколько не создавал дочерних окон, ни разу не видел такого. Однако, возьму на вооружение.
карма: 3

0
24
Сообщение
...
Прикрепленные файлы
(файлы не залиты)