


keks-n писал(а):Похоже, что он её купил.

SUB CLEAR_WINDOW()
    #REGISTER NONE
    LOCAL i      AS LONG
    LOCAL pf     AS LONG
    ! mov OS_CLEAR,1
    updatewindow hwnd
 '   ! mov OS_MOROZ,1
    FOR i = 0& TO 63&'127
            ! pushad
            ! mov ecx,OS_X_Y_4
            ! mov pf,0&
            ! shr ecx,2
            ! sub ecx,4&
          loop_c:
                ! mov  eax,LPBIT
                ! mov  edx,pf
                ! mov  ebx,&h04040404
                ! movd mm1,[eax+edx]
                ! movd mm2,ebx
                ! psubusb mm1,mm2
                ! movd [eax+edx],mm1
                ! add pf,4&
                ! loop loop_c
            ! emms
            !popad
        DrawDibDraw DDS,HDC,0&,0&,WINDOW_X,WINDOW_Y,AVS,BYVAL LPBIT,0&,0&,MAXX,MAXY-2&,0&
        updatewindow hwnd
    NEXT i
    POKE$ VARPIX, STRING$(XO*YO*4&-4&, $NUL)
    updatewindow hwnd
    ! mov OS_CLEAR,0&
'    ! mov OS_MOROZ,0
END SUB




volo писал(а):Глюк указанный выше "разрыв изображения"
...
Проявляется при наличии фонового рисунка на главном DIALOG
и присутствии двух окон CHILD (каждое имеет отдельную CALLBACK). В 7 версии все работает "как часы"
в 8 - фоновый рисунок перекрывает часть одного из CHILD окон, либо закрывает его полностью
т.е. проблема с паразитной прорисовкой фонового рисунка
#COMPILE EXE
#DIM ALL
#INCLUDE "WIN32API.INC"
'
%IDD_DLG      =  101
%IDC_TEXTBOX1 = 1001
%IDC_TEXTBOX2 = 1002
$BackgroundBMP="SMTP.bmp" '<- change to yours BMP. I got mine from SMTP example
'
CALLBACK FUNCTION cbTB1()
  STATIC t AS STRING
  '
  FUNCTION=0
  '
  IF CBCTLMSG= %EN_CHANGE THEN
      CONTROL GET TEXT GetParent(CBLPARAM),%IDC_TEXTBOX1 TO t
      t=UCASE$(t)
      CONTROL SET TEXT GetParent(CBLPARAM),%IDC_TEXTBOX2 , t
      FUNCTION=1
  END IF
END FUNCTION
'
CALLBACK FUNCTION cbTB2()
  STATIC t AS STRING
  '
  FUNCTION=0
  '
  IF CBCTLMSG=%EN_CHANGE THEN
      CONTROL GET TEXT GetParent(CBLPARAM),%IDC_TEXTBOX2 TO t
      t=LCASE$(t)
      DIALOG SET TEXT GetParent(CBLPARAM), t
      FUNCTION=1
  END IF
END FUNCTION
'
CALLBACK FUNCTION cbDLGProc()
    STATIC  hBmp    AS LONG
    STATIC  x       AS LONG
    STATIC  y       AS LONG
    STATIC  hBmpDC  AS LONG
    STATIC  hWndSaveFocus AS DWORD
    '
    SELECT CASE AS LONG CBMSG
        CASE %WM_INITDIALOG
            DIALOG GET CLIENT CBHNDL TO x, y
            DIALOG UNITS CBHNDL, x, y TO PIXELS x, y
            hBmp = LoadImage(BYVAL %NULL, $BackgroundBMP, %IMAGE_BITMAP, x, y, %LR_LOADFROMFILE)
        CASE %WM_NCACTIVATE
            IF ISFALSE CBWPARAM THEN
                hWndSaveFocus = GetFocus()
            ELSEIF hWndSaveFocus THEN
                SetFocus(hWndSaveFocus): hWndSaveFocus = 0
            END IF
            '
        CASE %WM_ERASEBKGND
            ' Select the bitmap into a memory DC and transfer it to the dialog
            hBmpDC = CreateCompatibleDC(CBWPARAM)
            SelectObject hBmpDC, hBmp
            BitBlt CBWPARAM, 0, 0, x, y, hBmpDC, 0, 0, %SRCCOPY
            DeleteDC hBmpDC
            '
            FUNCTION = 1
            '
        CASE %WM_DESTROY
            ' The dialog is being destroyed, so release the bitmap handle
            DeleteObject hBmp
    END SELECT
END FUNCTION
'------------------------------------------------------------------------------------
FUNCTION PBMAIN()
    LOCAL hDlg  AS DWORD
    '
    DIALOG NEW  %HWND_DESKTOP, "DLG", 123, 73, 192, 78, %WS_POPUP OR %WS_BORDER OR _
        %WS_DLGFRAME OR %WS_CAPTION OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR _
        %WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR %DS_CENTER OR _
        %DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
        %WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
        %WS_EX_RIGHTSCROLLBAR, TO hDlg
    CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX1, "TextBox1", 20,  8, 64, 24, CALL cbTB1
    CONTROL ADD TEXTBOX, hDlg, %IDC_TEXTBOX2, "TextBox2", 96, 32, 60, 24, CALL cbTB2
    '
    DIALOG SHOW MODAL hDlg, CALL cbDLGProc
END FUNCTION
'     

jangle писал(а):volo - спасибо за описание глюков 8 версии!
Грустно слышать, что у PB нет будущего, возможно Боб всетаки найдет приемника который будет развивать этот безусловно интересный и необходимый компилятор.
[/img]

PBDN писал(а):volo писал(а):Глюк указанный выше "разрыв изображения"
...
Проявляется при наличии фонового рисунка на главном DIALOG
и присутствии двух окон CHILD (каждое имеет отдельную CALLBACK). В 7 версии все работает "как часы"
в 8 - фоновый рисунок перекрывает часть одного из CHILD окон, либо закрывает его полностью
т.е. проблема с паразитной прорисовкой фонового рисунка
volo,
накидал быстренько сэмпл, чтобы проверить этот глюк, но у меня все нормально прорисовывается, может подправите чтоб глючило ?
проверял на старичке Пень-2 х 300мгц
первоначальная загрузка
DIALOG NEW hdlgy, $TITLEN,,,534&,325&,%DS_3DLOOK OR %WS_POPUPWINDOW OR %WS_BORDER TO hDlgM
CONTROL ADD IMAGEX,      hdlgM,%ID_SKINE,"skine" & FORMAT$(parameters.expo_color),0&,0&,0&,0&',%WS_DISABLED
....
обработка событий
....
обработка событий
getwindowrect GetDesktopWindow, re
OS_MAXX = re.nright
OS_MAXY = OS_MAXX * 0.75!  '666!
SetWindowRgn hDlgM, %NULL, %TRUE
MoveWindow hdlgM, 0&, 0&,OS_MAXX,OS_MAXY,%TRUE     '38
....
обработка событий
DIALOG   GET SIZE  hdlgM TO x1,y1
CONTROL SET SIZE  hdlgM, %ID_SKINE, x1,y1 
...
обработка событий (перенос и прорисовка других элементов)
**** МОМЕНТ ГЛЮКА НЕПРОРИСОВКИ. рисунок глюка см. в этой ветке форума выше.

volo писал(а):видимо нить не успевает отработать
закрашивание области, как параллельно начинается прорисовка
элементов диалога
%WM_Private_SetText =%WM_USER+7500
%WM_Private_DrawLine =%WM_USER+7501
...
...
в CALLBACKе основного диалога обработка приватных сообщений
   CASE %WM_Private_SetText
       LOCAL lpsz as ASCIIZ PTR
       lpsz=CBWPARAM
       CONTROL SET TEXT CBHNDL, LOWRD(CBLPARAM), @lpsz
SendMessage[PostMessage](hDlg,%WM_Private_SetText,ByVal VARPTR(sString),MAK(DWORD, %IDC_TextBox01, 0)  )


PBDN писал(а):Как ни странно, не смотря на дополнительные телодвижения, глюки исчезли.
Т.е. что хотел сказать - все что работает с экраном - только из основного трида.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2