Добрый день. Проблема описана в сабже. Одно замечание... В Preview dialog (RadASM) все работает нормально (фокус скачет при нажатии Tab'а в нужной последовательности). После компиляции и запуска - диалог на Tab не реагирует. Rc: Код (Text): #define IDD_DIALOG 1000 #define IDC_STC1 1050 #define IDC_STC2 1052 #define IDC_STC3 1053 #define IDC_CBO_RGN 1001 #define IDC_CBO_CITY 1003 #define IDC_EDT_STREET 1004 #define IDC_BTN_SEARCH 1005 #define IDC_EDT_LOG 1006 #define IDC_CBO_AREA 1002 #define IDC_STC4 1051 IDD_DIALOG DIALOGEX 6,6,462,187 CAPTION "test dialog" FONT 8,"MS Sans Serif",0,0 CLASS "DLGCLASS" STYLE 0x10CB0800 EXSTYLE 0x00000000 BEGIN CONTROL "",IDC_CBO_RGN,"ComboBox",0x10210143,4,18,133,153,0x00000000 CONTROL "",IDC_CBO_AREA,"ComboBox",0x50210143,4,48,133,123,0x00000000 CONTROL "",IDC_CBO_CITY,"ComboBox",0x50210143,4,77,133,92,0x00000000 CONTROL "",IDC_EDT_STREET,"Edit",0x50010080,4,107,133,15,0x00000200 CONTROL "Искать >>",IDC_BTN_SEARCH,"Button",0x50010000,62,140,76,19,0x00000000 CONTROL "",IDC_EDT_LOG,"Edit",0x503118C4,150,7,306,153,0x00000200 CONTROL "Регион:",IDC_STC1,"Static",0x50000000,4,7,133,8,0x00000000 CONTROL "Район:",IDC_STC4,"Static",0x50000000,4,35,133,9,0x00000000 CONTROL "Населенный пункт:",IDC_STC2,"Static",0x50000000,4,64,133,9,0x00000000 CONTROL "Улица:",IDC_STC3,"Static",0x50000000,4,94,133,9,0x00000000 END Спасибо за помощь!
у контрола должен быть стиль WS_TABSTOP ЗЫ: диалоговые скрипты у вас какие-то кривые вот пример нормального скрипта: Код (Text): IDD_DIALOG_1 DIALOGEX 0, 0, 308, 198 STYLE DS_3DLOOK | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX CAPTION "ISOFixer" FONT 8, "MS Sans Serif", 400, 0 { CONTROL "...", IDC_OPEN_ISOFILE, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 282, 13, 16, 12, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE CONTROL "ISO file", -1, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP, 4, 5, 300, 25 CONTROL "", IDC_ISOFILE, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 14, 270, 10, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE CONTROL "file", -1, "button", BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP, 4, 30, 300, 25 CONTROL "", IDC_FILE, "edit", ES_LEFT | ES_AUTOHSCROLL | ES_READONLY | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 39, 270, 10, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE CONTROL "...", IDC_OPEN, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 282, 38, 16, 12, 131076 CONTROL "", -1, "static", SS_ETCHEDFRAME | WS_CHILD | WS_VISIBLE, 4, 168, 300, 25 CONTROL "Do it", IDC_DOIT, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 172, 64, 16, WS_EX_DLGMODALFRAME | WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE CONTROL "Exit", IDC_EXIT, "button", BS_PUSHBUTTON | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 246, 173, 52, 14, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE CONTROL "Log", -1, "button", BS_GROUPBOX | BS_CENTER | WS_CHILD | WS_VISIBLE | WS_GROUP, 4, 58, 300, 106 CONTROL "", IDC_LISTBOX, "listbox", WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 10, 68, 288, 96, WS_EX_NOPARENTNOTIFY | WS_EX_STATICEDGE }
WS_EX_CONTROLPARENT ? А вообще - сравните WS_/WS_EX_ стили Preview и скомпиленного диалога. Только посмотрите это (а также наличие WS_TABSTOP у контролов) через что-то внешнее (например, Spy++).
зачем CLASS "DLGCLASS"??? убери ее (строчку) и создавай диалог функциями DialogBoxParam/CreateDialogParam
2 rmn > зачем CLASS "DLGCLASS"??? > убери ее (строчку) и создавай диалог функциями DialogBoxParam/CreateDialogParam Если CreateDialogParam - то без CLASS никак А заодно и о IsDialogMessage придется позаботиться. Другое дело - зачем "EXSTYLE 0x00000000" ?
kero: WS_EX_CONTROLPARENT не установлен Со Spy++ разницы в стилях не обнаружил. Rc сгенерирован RadASM'ом. Мне кажется, что наличие/отсутствие этой константы погоды не меняет. Всем спасибо! Может наковыряю что-нибудь позже.
RadASM совсем не знаю, но похоже дело вот в чем: видимо, RadASM строит Preview dialog через DialogBoxParam (=> класс #32770), что обеспечивает работу TAB; а в непоказанном коде используется CreateDialogParam, причем - без IsDialogMessage, что необходимо, хотя и недостаточно.
Спасибо, добрые люди Это почти решило проблему: Код (Text): invoke IsDialogMessage, hWnd, addr msg .if eax==0 invoke TranslateMessage,addr msg invoke DispatchMessage,addr msg .endif Почти, потому что при активном WS_TABSTOP у edit control'а, фокус, дойдя до него, больше никуда не переводится. Если убрать WS_TABSTOP edit control'а, то по остальным элементам диалога фокус начинает переходить как задумано. Где грабли на этот раз?
Может быть у вас edit-control обрабатывает tab как символ и пишет его в свое окно. Нужно смотреть стили, насколько я помню.
multiline edit и должен обрабатывать таб как символ, поэтому либо избавиться от multiline, либо сабклассить edit и если нажат таб, принудительно переводить фокус на следующий контрол.
2 f00bar > Где грабли на этот раз? Это все тот же раз Если согласны отказаться от TAB внутри мультиэдита ради TAB для диалога - то можно и без сабклассинга. Откройте урок 10 (Диалоговое окно как основное) Iczelion-а и сравните 1-ый и 2-ой примеры. Вы сейчас трепыхаетесь в пределах 1-ого примера. Так вот: перепишите-ка свой код в духе примера №2. Кстати, Вам это уже советовали (rmn).