Индентифицируется глюк как: Инструкция по адрес уууууууууу обратилась к памяти по адресу "0x0000000". Память не может быть "read".
глюк появляется при использовании кнопок %BS_OWNERDRAW. C "обычными" кнопками все работает нормально.
cудя по всему где-то не хватает памяти. Проявляется довольно редко, сложно диагностировать.
Может кто сталкивался с этим ?
место появления
- Код: Выделить всё
CASE %WM_DRAWITEM
tDrawItem = CBLPARAM
SELECT CASE @tDrawItem.CtlID
CASE %IDC_3_BUTTON1,%IDC_3_BUTTON2,%IDC_3_BUTTON5,_
%IDC_3_BUTTON3,%IDC_3_BUTTON4,%IDC_3_BUTTON6
tRect = @tDrawItem.RcItem:
IF (@tDrawItem.itemState AND %ODS_SELECTED) THEN
CALL DrawGradient(@tDrawItem.hDc,%GREEN)
DrawEdge @tDrawItem.hDC, @tDrawItem.rcItem, %EDGE_SUNKEN, %BF_RECT ' %EDGE_SUNKEN
SetBkMode @tDrawItem.hDC, %TRANSPARENT
SetTextColor @tDrawItem.hDC, %GREEN
tRect.nLeft = 0&
DrawText @tDrawItem.hDC, "Process" & $NUL, -1&, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
ELSE
CALL DrawGradient(@tDrawItem.hDc,%BLUE)
' DrawEdge @tDrawItem.hDC, @tDrawItem.rcItem, %EDGE_RAISED, %BF_RECT
SetBkMode @tDrawItem.hDC, %TRANSPARENT
SetTextColor @tDrawItem.hDC, %WHITE
SELECT CASE @tDrawItem.CtlID
CASE %IDC_3_BUTTON1: CALL DrawGradient(@tDrawItem.hDc,%GRAY): tRect.nLeft = 0&
DrawText @tDrawItem.hDC, "Browse..." & $NUL , -1&, tRect, %DT_SINGLELINE OR %DT_CENTER OR %DT_VCENTER
END SELECT
END IF
FUNCTION = %False
CASE ELSE
FUNCTION = %True
END SELECT
...
SUB DrawGradient (BYVAL hDC AS DWORD, BYVAL g_color AS LONG)
LOCAL rectFill AS RECT
LOCAL rectClient AS RECT
LOCAL fStep AS SINGLE
LOCAL hBrush AS DWORD
LOCAL lOnBand AS LONG
GetClientRect WindowFromDC(hDC), rectClient
fStep = rectClient.nbottom * 0.005!
FOR lOnBand = 0& TO 199&
SetRect rectFill, 0&, lOnBand * fStep, rectClient.nright + 1&, (lOnBand + 1&) * fStep
IF g_color = %BLUE THEN
hBrush = CreateSolidBrush(RGB(0, 155-lOnBand, 255-lOnBand))
ELSEIF g_color = %GREEN THEN
hBrush = CreateSolidBrush(RGB(0, 255-lOnBand, 0))
ELSEIF g_color = %GRAY THEN
hBrush = CreateSolidBrush(RGB(255-lOnBand, 255-lOnBand, 255-lOnBand))
END IF
Fillrect hDC, rectFill, hBrush
DeleteObject hBrush
NEXT
END SUB