Français
Source/ Codesnippets

Bitmap temps réel Scrollen

 

Jörg
Sellmeyer
Repariert.
'##########################
'XProfan
'##########################
'Andreas Miethe
'juillet 2003
'##########################
 $H windows.ph
 $H structs.ph
 $H messages.ph
 $H commctrl.ph
 $H shellapi.ph
 $I profalt.inc
settruecolor 1

PROC ScrollWinMainProc

    PROC Max

        Paramètres a&,b&

        IF a& > b&

            RETOUR a&

        d'autre

            RETOUR b&

        endif

    ENDPROC

    PROC Min

        Paramètres a&,b&

        IF a& > b&

            RETOUR b&

        d'autre

            RETOUR a&

        endif

    ENDPROC

    Déclarer MinMax#
    DIM MinMax#,40
    DEF HiWord(1) Div&(&(1),$10000)
    DEF LoWord(1) And(&(1),$FFFF)
    declare srcDC&,trgDC&,Disp$,windc&
    declare ScrollInit&,HscrollPos&,HscrollMax&,VscrollPos&,VscrollMax&
    declare thumb&
    STRUCT SWindowClass = ~WndClass
    STRUCT SMsg = ~Msg
    STRUCT Sbmp = ~BITMAP
    Déclarer bmp#
    Déclarer Msg#,WindowClass#,Appname$
    Déclarer ImageControl&,Image&,Image$
    DIM bmp#,sbmp
    AppName$ = "ScrollDemo"
    set("Fastmode",1)

    PROC WindowCallback

        parameters Wnd&, uMsg&, WParam&, LParam&

        IF uMsg& = ~WM_GETMINMAXINFO

            'Fenstergrösse einschränken
            MinMax# = lParam&
            Long MinMax#,24 = 320'Min-Breite
            Long MinMax#,28 = 240'Min-Hauteur
            Long MinMax#,32 = 640'Max-Breite
            Long MinMax#,36 = 480'Max-Hauteur
            RETOUR 0

        Endif

        IF uMsg& = ~wm_create

            'la fenêtre wird angelegt
            'Screenshot erzeugen et ins Temp-Bitmap blitten
            Disp$ = "DISPLAY"
            srcDC& = ~CreateDC(addr(disp$),0,0,0)
            trgDC& = ~CreateCompatibleDC(srcdc&)
            Image& = ~CreateCompatibleBitmap(srcdc&,%maxx,%maxy)
            ~selectObject(trgdc&,Image&)
            ~BitBlt(trgdc&, 0,0 , %maxx,%maxy,srcdc&,0,0,~SRCCOPY)
            'Bitmap-données ermitteln
            ~GetObject(Image&,24,bmp#)

        endif

        IF uMsg& = ~wm_size

            'wird cela la fenêtre vergrössert ou bien verkleinert ?
            'ScrollInit& = 1
            VscrollMax& = bmp#.bmHeight&-height(wnd&)
            ~SetScrollRange(Wnd&,~SB_VERT,0,VscrollMax&,0)
            HscrollMax& = bmp#.bmWidth&-width(wnd&)
            ~SetScrollRange(Wnd&,~SB_HORZ,0,HscrollMax&,0)
            ~BitBlt(windc&,(hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
            SendMessage(Wnd&,~wm_Vscroll,0,0)Update
            SendMessage(Wnd&,~wm_Hscroll,0,0)Update

        endif

        IF uMsg& = ~wm_vscroll

            'es wird vertikal gescrollt

            IFNOT ScrollInit&

                ScrollInit& = 1
                VscrollMax& = bmp#.bmHeight&-height(wnd&)
                ~SetScrollRange(Wnd&,~SB_VERT,0,VscrollMax&,0)
                ~SetScrollPos(Wnd&,~SB_VERT,VscrollPos&,1)
                HscrollMax& = bmp#.bmWidth&-width(wnd&)
                ~SetScrollRange(Wnd&,~SB_HORZ,0,HscrollMax&,0)
                ~SetScrollPos(Wnd&,~SB_HORZ,hscrollPos&,1)

            endif

            IF LOWORD(wParam&) = ~SB_LINEUP

                VscrollPos& = VScrollPos& -4

                IF VscrollPos&<0

                    VscrollPos& = 0
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

                IF VscrollPos&>0

                    ~ScrollWindowEx(Wnd&,0,4,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_LINEDOWN

                VscrollPos& = VScrollPos& + 4

                IF VscrollPos&>VscrollMax&

                    VscrollPos& = VscrollMax&
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

                IF VscrollPos&<VscrollMax&

                    ~ScrollWindowEx(Wnd&,0,-4,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&,(hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_PAGEUP

                IF VscrollPos& < 16

                    VscrollPos& = 0
                    ~ScrollWindowEx(Wnd&,0,VscrollPos&,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                d'autre

                    VscrollPos& = VscrollPos&-16
                    ~ScrollWindowEx(Wnd&,0,16,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1),(vscrollpos& * -1), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_PAGEDOWN

                VscrollPos& = VScrollPos& +16

                IF VscrollPos&>VscrollMax&

                    VscrollPos& = VscrollMax&
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

                IF VscrollPos&<VscrollMax&

                    ~ScrollWindowEx(Wnd&,0,-16,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_THUMBTRACK

                Thumb& = HIWORD(wParam&)

                IF Thumb&>VscrollPos&

                    ~ScrollWindowEx(Wnd&,0,-(Thumb&),0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1),-(Thumb&), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
                    VscrollPos& = Thumb&

                endif

                IF Thumb&<VscrollPos&

                    ~BitBlt(windc&, (hscrollpos& * -1),-(Thumb&), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
                    VscrollPos& = Thumb&

                endif

            endif

            ~UpdateWindow(wnd&)
            VscrollPos& = Min(VscrollPos&,VscrollMax&)
            VscrollPos& = Max(0,VscrollPos&)
            ~SetScrollPos(Wnd&,~SB_VERT,VscrollPos&,1)
            RETOUR 0

        endif

        IF uMsg& = ~wm_hscroll

            'es wird horizontal gescrollt

            IFNOT ScrollInit&

                ScrollInit& = 1
                VscrollMax& = bmp#.bmHeight&-height(wnd&)
                ~SetScrollRange(Wnd&,~SB_VERT,0,VscrollMax&,0)
                ~SetScrollPos(Wnd&,~SB_VERT,VscrollPos&,1)
                HscrollMax& = bmp#.bmWidth&-width(wnd&)
                ~SetScrollRange(Wnd&,~SB_HORZ,0,HscrollMax&,0)
                ~SetScrollPos(Wnd&,~SB_HORZ,hscrollPos&,1)

            endif

            IF LOWORD(wParam&) = ~SB_LINEUP

                'hscrollPos& = hScrollPos& - 4

                IF hscrollPos&<0

                    hscrollPos& = 0
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

                IF hscrollPos&>0

                    ~ScrollWindowEx(Wnd&,4,0,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_LINEDOWN

                hscrollPos& = hScrollPos& +4

                IF hscrollPos&>hscrollMax&

                    hscrollPos& = hscrollMax&
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

                IF hscrollPos&<hscrollMax&

                    ~ScrollWindowEx(Wnd&,-4,0,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_PAGEUP

                IF hscrollPos& < 16

                    hscrollPos& = 0
                    ~ScrollWindowEx(Wnd&,hscrollPos&,0,,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                d'autre

                    hscrollPos& = hscrollPos&-16
                    ~ScrollWindowEx(Wnd&,16,0,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_PAGEDOWN

                hscrollPos& = hScrollPos& +16

                IF hscrollPos&>hscrollMax&

                    hscrollPos& = hscrollMax&
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

                IF hscrollPos&<hscrollMax&

                    ~ScrollWindowEx(Wnd&,-16,0,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, (hscrollpos& * -1), (vscrollpos& * -1) , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)

                endif

            endif

            IF LOWORD(wParam&) = ~SB_THUMBTRACK

                Thumb& = HIWORD(wParam&)

                IF Thumb&>hscrollPos&

                    ~ScrollWindowEx(Wnd&,-(Thumb&-hscrollPos&),0,,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, -(Thumb&),(vscrollpos& * -1), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
                    hscrollPos& = Thumb&

                endif

                IF Thumb&<hscrollPos&

                    ~ScrollWindowEx(Wnd&,-(Thumb&-hscrollPos&),0,,0,0,0,0,~SW_INVALIDATE)
                    ~BitBlt(windc&, -(Thumb&),(vscrollpos& * -1), %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
                    hscrollPos& = Thumb&

                endif

            endif

            ~UpdateWindow(wnd&)
            hscrollPos& = Min(hscrollPos&,hscrollMax&)
            hscrollPos& = Max(0,hscrollPos&)
            ~SetScrollPos(Wnd&,~SB_HORZ,hscrollPos&,1)
            RETOUR 0

        endif

        IF uMsg& = ~wm_close

            ~UnRegisterClass(WindowClass#,%HINSTANCE)
            DISPOSE bmp#
            DISPOSE msg#
            DISPOSE WindowClass#
            DISPOSE MinMax#
            ~DeleteDC(srcdc&)
            ~DeleteDC(trgdc&)
            ~DeleteObject(Image&)
            ~PostQuitMessage(0)

        endif

        RETOUR ~DefWindowProc(Wnd&, uMsg&, WParam&, LParam&)

    endproc

    PROC ScrollWinMain

        declare Window&,Icon$,Message&
        Icon$ = "A"
        DIM WindowClass#,SWindowClass
        DIM Msg#,SMsg

        WITH WindowClass#

            .style& = 0
            .lpfnWndProc& = ProcAddr(WindowCallback,4)
            .cbClsExtra& = 0
            .cbWndExtra& = 0
            .hInstance& = %HInstance
            .hIcon& = ~LoadIcon(%hInstance,addr(icon$))
            .hCursor& = ~LoadCursor(0, ~idc_Arrow)
            .hbrBackground& = ~CreateSolidBrush(~GetSysColor(~COLOR_BTNFACE))
            .lpszMenuName& = Addr(AppName$)
            .lpszClassName& = Addr(AppName$)

        endwith

        IF ~RegisterClass(WindowClass#) = 0

            Text1$ = "Fehler"
            Text2$ = "Fenster konnte pas registriert volonté!"
            ~MessageBox(0,Addr(Text2$),Addr(Text1$),0)
            end

        endif

        Window& = ~CreateWindowEx($80,Addr(AppName$),Addr(AppName$),\
        or(or(or(or(~ws_visible,~ws_vscroll),~ws_sysmenu),~ws_hscroll),~ws_sizebox),\
        10,10,320,240,0,0,%HInstance,0)
        windc& = ~GetDC(window&)
        ~BitBlt(windc&, 0,0 , %maxx,%maxy,trgdc&,0,0,~SRCCOPY)
        ~ShowWindow(Window&, ~sw_ShowNormal)
        ~UpdateWindow(Window&)
        ~setwindowpos(window&,~HWND_TOPMOST,0,0,0,0,or(~SWP_NOMOVE,~SWP_NOSIZE))

        WHILE ~GetMessage(Msg#, 0, 0, 0) > 0

            ~TranslateMessage(Msg#)
            ~DispatchMessage(Msg#)

        endwhile

        end

    endproc

    ScrollWinmain

endproc

ScrollWinMainProc
 
XProfan X4
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
04.06.2020  
 



[offtopic]@Jörg: chez quelque chose comme calme aussi simple den (beschädigten) Erstbeitrag effacer.[/offtopic]
 
24.09.2020  
 




p.specht

et quoi tut es avec Fensterelementen?
 
Computer: Gerät, daß es in Mikrosekunden erlaubt, 50.000 Fehler zu machen, zB 'daß' statt 'das'...
24.09.2020  
 



Zum Quelltext


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

3.706 Views

Untitledvor 0 min.
Member 862464112.05.2024
RudiB.18.09.2022
funkheld01.01.2022
ByteAttack21.01.2021
plus...

Themeninformationen

cet Thema hat 3 participant:

p.specht (1x)
Jörg Sellmeyer (1x)
iF (1x)


Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie