Глюки в 9 версии

Раздел посвящен программированию с использованием Power Basic.
volo
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 10.12.2004 (Пт) 11:18
Откуда: Soviet Union

Глюки в 9 версии

Сообщение volo » 05.12.2008 (Пт) 15:03

В 7 версии не замечал, в 9 начали изредка появлятся глюки, отловить удалось только место где все происходи.
Индентифицируется глюк как: Инструкция по адрес уууууууууу обратилась к памяти по адресу "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


volo
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 10.12.2004 (Пт) 11:18
Откуда: Soviet Union

Re: Глюки в 9 версии

Сообщение volo » 26.01.2009 (Пн) 23:06

В продолжение темы.
Повторился глюк который был замечен лет 4-5 назад, на определенных OS
Проявления следующие (выявил глюк один из клиентов с Ирландии):
Окно диалога получается "не того размера" - видимо не правильно считается размер,
изображения на кнопках так же растягиваются не правильно.

Такое встреалось изредка и раньше (еще с 7 версией PB) с OEM операционками "не лецинзионными", которые использовали некоторые клиенты.
По всей видимости глюк связан с неадекватной работой некоторых библиотек.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Re: Глюки в 9 версии

Сообщение jangle » 27.01.2009 (Вт) 10:28

В продолжение темы.
Повторился глюк который был замечен лет 4-5 назад, на определенных OS
Проявления следующие (выявил глюк один из клиентов с Ирландии):
Окно диалога получается "не того размера" - видимо не правильно считается размер,
изображения на кнопках так же растягиваются не правильно.


А выложи этот код, хочется потестить на своей машине

volo
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 142
Зарегистрирован: 10.12.2004 (Пт) 11:18
Откуда: Soviet Union

Re: Глюки в 9 версии

Сообщение volo » 27.01.2009 (Вт) 15:23

jangle писал(а):
В продолжение темы.
Повторился глюк который был замечен лет 4-5 назад, на определенных OS
Проявления следующие (выявил глюк один из клиентов с Ирландии):
Окно диалога получается "не того размера" - видимо не правильно считается размер,
изображения на кнопках так же растягиваются не правильно.


А выложи этот код, хочется потестить на своей машине


Код работает нормально на 99% аппаратов. Продукт в принципе работает годами и проблемы только в нескольких случаях, по всей видимости связано с GDI32

Выложу для начала фрагменты проявления:
dm2.jpg и dm3.jpg

в dm2.jpg - "диалог урезал кнопки" (проблема масштабирования)
рисунки кнопок "Control add imgbuttonx" не растянулись

во втором продукте
dm3.jpg - не сработала Stretch растяжка экрана

Проявление одно - потеря масштабирования в разных функциях.
Это проявилось на операционке XP (номер версии клиент не прислал)
Думаю что проблема связана либо с вирусами либо с подрезанной DLL

Элементарное CONTROL ADD IMGBUTTONX - срабатывает не правильно.
Вложения
dm2.jpg
пример 1
dm2.jpg (59.24 Кб) Просмотров: 1751
dm3.jpg
пример 2
dm3.jpg (53.93 Кб) Просмотров: 1740


Вернуться в Power Basic

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38

    TopList