Dark Machine писал(а):Проверил еще раз, но использую CALLBACK ф-цию, никаких глюков нет. В примере выше наблюдаемый эффект наверно связан с неправильной устновкой размера элемента
до показа диалога.
А зачем менять размер контрола сразу после его создания и до показа диалога? Как то "не эффективно" выглядит...
Этот кусок кода работает на ура. Никаких глюков.
- Код: Выделить всё
CASE %WM_COMMAND
' Process control notifications
SELECT CASE AS LONG CBCTL
CASE %IDC_TEXTBOX1
CASE %IDC_TEXTBOX2
CASE %IDC_BUTTON1
IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
CONTROL SET SIZE CBHNDL, 1002,100, 12
END IF
END SELECT
Можно также твой код проверить, переписав все на VC6.
В принципе конечно пример не отражает реально выполняемой задачи, пример отражает только глюк.
Если касаемо задачи, то например - есть рядом стоящие кнопки,
которые по тому или иному условию меняют размер (больше-возврат) либо позицию (от требований задачи) и получается, что те кнопки что остались без изменений имеют "несколько другой размер".
Наверное глюк связан с первоначльным неправильным расчетом
размера UNITS для контрола.
смотрим пример и изменение контрола №102
- Код: Выделить всё
#COMPILE EXE
#DIM ALL
#INCLUDE "win32api.inc"
GLOBAL hdlgM AS LONG
CALLBACK FUNCTION dlgproc () AS LONG
SELECT CASE CBMSG
CASE %WM_COMMAND
' Process control notifications
SELECT CASE CBCTL
CASE 500
IF CBCTLMSG = %BN_CLICKED OR CBCTLMSG = 1 THEN
CONTROL SET SIZE CBHNDL, 102,100,12
MSGBOX "Ok"
END IF
END SELECT
END SELECT
END FUNCTION
FUNCTION PBMAIN () AS LONG
DIALOG NEW 0,"",,,400,200,%DS_3DLOOK OR %WS_POPUPWINDOW OR %WS_BORDER OR %WS_CAPTION TO hdlgM
DIALOG SET COLOR hdlgM, %BLACK, RGB(0,0,127)
CONTROL ADD TEXTBOX, hdlgm, 100, "test", 10,20,100,12, %SS_SUNKEN
CONTROL ADD TEXTBOX, hdlgm, 101, "test", 111,20,100,12,%SS_SUNKEN
CONTROL ADD TEXTBOX, hdlgm, 102, "test", 212,20,100,12,%SS_SUNKEN
CONTROL SET SIZE hdlgm,101,100,12
CONTROL ADD BUTTON, hdlgM, 500, "test", 50,50,50,20
DIALOG SHOW MODAL hdlgM CALL dlgproc
END FUNCTION
по моему контрол № 103 увеличился, либо у меня зрение уже "упало"
Ладно об этом можно дискутировать. Что касаемо установки контролов до показа, возвратимся к документации:
[i]
FUNCTION PBMAIN() AS LONG
LOCAL hDlg AS DWORD
LOCAL lResult AS LONG
' ** Create a new dialog template
DIALOG NEW 0, "What is your name?", ,, 160, 50, 0, 0 TO hDlg
' ** Add controls to it
CONTROL ADD TEXTBOX, hDlg, %IDTEXT, "", 14, 12, 134, 12
CONTROL ADD BUTTON, hDlg, %IDOK, "OK", 34, 32, 40, 14, %BS_DEFAULT OR %WS_TABSTOP CALL OkButton
CONTROL ADD BUTTON, hDlg, %IDCANCEL, "Cancel", 84, 32, 40, 14 CALL CancelButton
' ** Display the dialog
DIALOG SHOW MODAL hDlg TO lResult
[i]
...
Тяжелый день - понедельник