Deutsch
Forum

Static mit Scrollbalken

 

Rainer
Hoefs
Hallo zusammen,
ich benötige mal wieder Hilfe.

Ich habe ein Static erstellt, welches einen vertikalen und horizontalen Scrollbalken hat. Darin soll eine BMP-Grafik gezeigt werden. Ist diese in eine oder beide Richtungen größer, soll sie mittels der Scrollbalken verschoben werden können.

Nun habe ich folgende Probleme.

Wie kann ich nach dem Laden des Bildes...
1. die benötigten Scrollbalken aktivieren oder deaktivieren Hor / Ver / Hor+Ver?
2. die Scrollrange einstellen?
3. den Slider in der Größe einstellen?
4. die beiden Scrollbalken abfangen um darauf zu reagieren?
5. überhaupt die Handles der drei Elemente (Static, hScroll und vScroll) feststellen um Messages dorthin zu senden oder sie abzufangen?

Ich hatte schon einmal auf irgendeiner Webseite Messages und Beschreibung gesehen, weiß aber nicht mehr wo. Und seit Tagen suche ich danach erfolglos im Netz.

Hier der Source eines Testprogrammes.

Für Eure Hilfe schonmal ein Dankeschön im Voraus.

Rainer
' Code erzeugt mit F.Abbing's LemonViD Version 1.0.0.3 am 11.05.2019 um 08:35 Uhr,
' Spenden-Button, sowie weitere Freeware-Tools für XProfan auf http://frabbing.net
' Technischer Support auf ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/xprofan und http://purebasic.fr/german
' --------------------------------------------------------------------------------------------------
Declare nurso%, Ende%, button2%, StaticFrame&, OriginalBMP$, OriginalBMp&, OriginalBMPWidth%, OriginalBMPHeight%, \
Style%, Message$, mwnd$, wParam$, lParam$
Def GetStockObject(1) !"GDI32","GetStockObject"
Def GetSysColor(1) !"USER32","GetSysColor"
Def GetParent(1) !"USER32","GetParent"
Def SendBMP2Static(2) SendMessage(&(1),$172,0,&(2))
Def &COLOR_BTNFACE $F
Def &DEFAULT_GUI_FONT $11
Set("Truecolor", 1)
Set("Autopaint", 1)

Proc ShowDesign

    Parameters Design&, Target&, X%, Y%, Mode%

    If Design&

        StartPaint Target&
        DrawPic Design&, X%, Y%; Mode%
        EndPaint

    Else

        MessageBox("Kein BMP geladen!", "Fehler!",64)

    EndIf

EndProc

Proc LoadDesign

    OriginalBMP$ = loadfile$("Bitte Bild oder HTML-Datei wählen","c:\css\pictures\*.bmp")

    If OriginalBMP$ <> ""

        OriginalBMp& = Create("hPic", -1, OriginalBMP$)
        OriginalBMPWidth% = %bmpx
        OriginalBMPHeight% = %bmpy
        '------------------------------------------------------------------------------------------------------------
        ' Hier werden die verschiedenen Styles im Static gesetzt, dazu bitte einfach den Style% auf 1 - 6 setzen!
        '------------------------------------------------------------------------------------------------------------
        Style% = 1
        Style% = Input$( "Style auswählen, eine Zahl zwischen 1 und 6 eingeben", "Style", Style%)'3* oder 6 wären optisch meine Favoriten

        If (Style% > 0) And (Style% < 7)

            DestroyWindow(StaticFrame&)

            Select Style%

                CaseOf 1

                StaticFrame& = Control("Static", "", $5630030f, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $060018)

                CaseOf 2

                StaticFrame& = Control("Static", "", $56320b0f, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $070018)

                CaseOf 3

                StaticFrame& = Control("Static", "", $54300107, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $020010)

                CaseOf 4

                StaticFrame& = Control("Static", "", $56300107, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $018)

                CaseOf 5

                StaticFrame& = Control("Static", "", $52b01b0e, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $0)
                OtherWise
                StaticFrame& = Control("Static", "", $54b00107, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $010010)

            EndSelect

            'SendMessage()

        Else

            MessageBox("Eine Zahl zwischen 1 und 6 eingeben!", "Fehler!",64)

        EndIf

        '------------------------------------------------------------------------------------------------------------

    Else

        MessageBox("Design laden wurde abgebrochen!","Design laden",64)

    EndIf

EndProc

Proc CreateElements

    WindowStyle 26 | 512 | 2048
    WindowTitle "Arbeitsfenster"
    Window 426, 120 - 1009, 782
    Cls GetSysColor(&COLOR_BTNFACE)
    SetDialogFont GetStockObject(&DEFAULT_GUI_FONT)
    StaticFrame& = Control("Static", "", $5630030f, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $060018)
    Ende% = Create("Button", %hwnd, "Ende", 896, 720, 96, 24)
    button2% = Create("Button", %hwnd, "Bild laden", 8, 720, 96, 24)

EndProc

Proc MainLoop

    UserMessages 16
    ShowWindow(%hwnd, 1)

    While 1

        GetMessage
        WaitInput
        Case %umessage = 16 : BREAK

        If Clicked(Ende%)

            End

        ElseIf Clicked(button2%)

            LoadDesign
            Showdesign OriginalBMp&, StaticFrame&, 0, 0, 0

        ElseIf Clicked(StaticFrame&)

            message$ = Hex$(%message)
            mwnd$ = Hex$(%mwnd)
            wParam$ = Hex$(&wparam)
            lParam$ = Hex$(&lparam)
             $D "StaticFrame angeklickt GetMessage", Message$, mwnd$, wParam$, lParam$
            Showdesign OriginalBMp&, StaticFrame&, 0, 0, 0

        EndIf

    EndWhile

EndProc

Proc Main

    CreateElements
    MainLoop

EndProc

Main
 
vor 11 Tagen  
 




Matthias
Arlt
Hier solltest Du fündig werden: [...] 

Gruß Matthias
 
WinXP SP2 - Profan 10/FreeProfan32 - Xpia
vor 9 Tagen  
 




Rainer
Hoefs
Hallo Matthias,

dankeschön.

Das muss ich erst mal sacken lassen.

Habe jetzt beim ersten schnellen Durchlesen nicht so wirklich was gefunden, was ich mit meinem Problem assoziieren könnte.

Könntest Du mir da noch einen weiteren Tip geben?

Gruß
Rainer
 
vor 9 Tagen  
 




Matthias
Arlt
Hallo Rainer,

dort findest Du halt die komplette API-Referenz für das ScrollBar-Control.
Ein Handle wird zum Abfragen und Steuern der ScrollBar nicht benötigt. Da die ScrollBar immer mit einem anderem Control bzw. Fenster assoziiert ist, ist dessen Handle in Verbindung mit dem entsprechenden Flag (z.B. SB_HORZ, SB_VERT, SB_BOTH) zu verwenden.

Auf die Schnelle mal noch ein Beispiel zum De/Aktivieren einer ScrollBar:

external("USER32","EnableScrollBar",StaticFrame&,~SB_HORZ,~ESB_DISABLE_BOTH)
SB_HORZ = 0 (betrifft die horizontale ScrollBar)
ESB_DISABLE_BOTH = 3 (deaktiviert beide Pfeiltasten)
ESB_ENABLE_BOTH = 0 (aktiviert beide Pfeiltasten wieder)

Gruß Matthias
 
WinXP SP2 - Profan 10/FreeProfan32 - Xpia
vor 8 Tagen  
 




Rainer
Hoefs
Danke Dir,
dann muß ich da mal was probieren.
Rainer
 
vor 8 Tagen  
 




Georg
Teles
Habe mal hinbekommen, beiden Balken manuell Werte zuzuweisen ... das ist total umständlich mit GetScrollInfo und SetScrollinfo, aber es geht.

Allerdings sind meine Balken ebenfalls deaktiviert, erst wenn ich die auf das Hauptfenster baue, dann sind die aktiv. Woran das liegt, keine Ahnung...

Man kann doch mit den mitgelieferten VScroll / HScroll arbeiten, hier habe ich ein Beispiel (die Designs habe ich rausgelöscht, da das Bild ja auf Static ist / für Umrandung muss man nur das Static-Handle anpassen)
' Code erzeugt mit F.Abbing's LemonViD Version 1.0.0.3 am 11.05.2019 um 08:35 Uhr,
' Spenden-Button, sowie weitere Freeware-Tools für XProfan auf http://frabbing.net
' Technischer Support auf ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/xprofan und http://purebasic.fr/german
' --------------------------------------------------------------------------------------------------
Declare nurso%, Ende%, button2%, StaticFrame&, OriginalBMP$, OriginalBMp&, OriginalBMPWidth%, OriginalBMPHeight%, \
Style%, Message$, mwnd$, wParam$, lParam$
Def GetStockObject(1) !"GDI32","GetStockObject"
Def GetSysColor(1) !"USER32","GetSysColor"
Def GetParent(1) !"USER32","GetParent"
Def SendBMP2Static(2) SendMessage(&(1),$172,0,&(2))
Def &COLOR_BTNFACE $F
Def &DEFAULT_GUI_FONT $11
Set("Truecolor", 1)
Set("Autopaint", 1)
' zusätzliche VARs -----------#
DECLARE uStatic&, Static&, hsv&, hsh&
' ----------------------------#

Proc ShowDesign

    Parameters Design&, Target&, X%, Y%, Mode%

    If Design&

        'StartPaint Target&
        'DrawPic Design&, X%, Y%; Mode%
        'EndPaint
        ' BILD an STATIC senden ------#
        SendMessage(target&,$172,0,Design&)

    Else

        MessageBox("Kein BMP geladen!", "Fehler!",64)

    EndIf

EndProc

Proc LoadDesign

    Parameters target&
    OriginalBMP$ = loadfile$("Bitte Bild oder HTML-Datei wählen","c:\css\pictures\*.bmp")

    If OriginalBMP$ <> ""

        OriginalBMp& = Create("hPic", -1, OriginalBMP$)
        OriginalBMPWidth% = %bmpx
        OriginalBMPHeight% = %bmpy
        ' BILD an STATIC senden ------#
        SendMessage(target&,$172,0,OriginalBMp&)
        ' SetWindowPos Static& = 0, 0 - OriginalBMPWidth%, OriginalBMPHeight%;0 'nicht nötig, da vorangehende Message die Static& automatisch auf die Größe anpasst
        SetScrollRange hsh&,0,OriginalBMPWidth%-964
        SetScrollRange hsv&,0,OriginalBMPHeight%-684
        SetScrollPos hsh&,0
        SetScrollPos hsv&,0
        ' ----------------------------#

    Else

        MessageBox("Design laden wurde abgebrochen!","Design laden",64)

    EndIf

EndProc

Proc CreateElements

    WindowStyle 26 | 512 | 2048
    WindowTitle "Arbeitsfenster"
    Window 426, 120 - 1009, 782
    Cls GetSysColor(&COLOR_BTNFACE)
    SetDialogFont GetStockObject(&DEFAULT_GUI_FONT)
    ' zusätzliche FOBKEJTE -------#
    hsh& = Create("HScroll",%hwnd,"",8,692,964,20)
    hsv& = Create("VScroll",%hwnd,"",972,8,20,684)
    uStatic& = Control("Static", "", $54000000, 8, 8, 964, 684, %hwnd, 2000, %hinstance, $0)' UnterSTATIC
    Static& = Control("Static", "", $5400010E, 0, 0, 0, 0, uStatic&, 2000, %hinstance, $0)' eigentliche Static mit Bild
    ' ----------------------------#
    'StaticFrame& = Control("Static", "", $5630030f, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $060018)
    Ende% = Create("Button", %hwnd, "Ende", 896, 720, 96, 24)
    button2% = Create("Button", %hwnd, "Bild laden", 8, 720, 96, 24)

EndProc

Proc MainLoop

    UserMessages 16
    ShowWindow(%hwnd, 1)

    While 1

        GetMessage
        WaitInput
        Case %umessage = 16 : BREAK

        If Clicked(Ende%)

            End

        ElseIf Clicked(button2%)

            LoadDesign(Static&)

        ElseIf Clicked(StaticFrame&)

            '            message$ = Hex$(%message)
            '            mwnd$ = Hex$(%mwnd)
            '            wParam$ = Hex$(&wparam)
            '            lParam$ = Hex$(&lparam)
            '             $D "StaticFrame angeklickt GetMessage", Message$, mwnd$, wParam$, lParam$
            '            Showdesign OriginalBMp&, StaticFrame&, 0, 0, 0

        EndIf

        ' SCROLL reaktionen / Bild scrollen

        If GetFocus(hsh&)

            SetWindowPos Static& = (-GetScrollPos(hsh&)), (-GetScrollPos(hsv&))

        EndIf

        If GetFocus(hsv&)

            SetWindowPos Static& = (-GetScrollPos(hsh&)), (-GetScrollPos(hsv&))

        EndIf

    EndWhile

EndProc

Proc Main

    CreateElements
    MainLoop

EndProc

Main

Grüße
 
TC-Programming [...] 
XProfan 10.0 - XProfan X2 - XProfan X3 - XProfan X4
vor 6 Tagen  
 




Rainer
Hoefs
Hallo und ein großes DANKE!

Das ist das was ich wollte.

Rainer
 
vor 6 Tagen  
 




Georg
Teles
Damit es etwas flüssiger läuft, hier das Beispiel mit einer CallBack Funktion
 $H Windows.ph
 $H Messages.ph
' Code erzeugt mit F.Abbing's LemonViD Version 1.0.0.3 am 11.05.2019 um 08:35 Uhr,
' Spenden-Button, sowie weitere Freeware-Tools für XProfan auf http://frabbing.net
' Technischer Support auf ./../../sys/?nohdr=1&u=www.paules-pc-forum.de/forum/xprofan und http://purebasic.fr/german
' --------------------------------------------------------------------------------------------------
Declare nurso%, Ende%, button2%, StaticFrame&, OriginalBMP$, OriginalBMp&, OriginalBMPWidth%, OriginalBMPHeight%, \
Style%, Message$, mwnd$, wParam$, lParam$
Def GetStockObject(1) !"GDI32","GetStockObject"
Def GetSysColor(1) !"USER32","GetSysColor"
Def GetParent(1) !"USER32","GetParent"
Def SendBMP2Static(2) SendMessage(&(1),$172,0,&(2))
Def &COLOR_BTNFACE $F
Def &DEFAULT_GUI_FONT $11
Set("Truecolor", 1)
Set("Autopaint", 1)
' zusätzliche DEFs ---------- #
Def CommDlgExtendedError(0)!"ComDlg32.Dll","CommDlgExtendedError"
Def GetOpenFileName(1)!"ComDlg32.Dll","GetOpenFileNameA"
' erweitertes Handling deakt. #
Set("FastMode", 1)
' zusätzliche VARs -----------#
DECLARE uStatic&, Static&, hsv&, hsh&, OldWndProc&, Api#
' ----------------------------#

Proc ShowDesign

    Parameters Design&, Target&, X%, Y%, Mode%

    If Design&

        'StartPaint Target&
        'DrawPic Design&, X%, Y%; Mode%
        'EndPaint
        ' BILD an STATIC senden ------#
        SendMessage(target&,$172,0,Design&)

    Else

        MessageBox("Kein BMP geladen!", "Fehler!",64)

    EndIf

EndProc

Proc LoadDesign

    Parameters target&
    OriginalBMP$ = loadfile_api("Bitte Bild oder HTML-Datei wählen","Alle Dateien (*.*)|*.*","c:\css\pictures\*.bmp")'loadfile$("Bitte Bild oder HTML-Datei wählen","c:\css\pictures\*.bmp")

    If OriginalBMP$ <> ""

        OriginalBMp& = Create("hPic", -1, OriginalBMP$)
        OriginalBMPWidth% = %bmpx
        OriginalBMPHeight% = %bmpy
        ' BILD an STATIC senden ------#
        SendMessage(target&,$172,0,OriginalBMp&)
        ' SetWindowPos Static& = 0, 0 - OriginalBMPWidth%, OriginalBMPHeight%;0 'nicht nötig, da vorangehende Message die Static& automatisch auf die Größe anpasst
        SetScrollRange hsh&,0,OriginalBMPWidth%-964
        SetScrollRange hsv&,0,OriginalBMPHeight%-684
        SetScrollPos hsh&,0
        SetScrollPos hsv&,0
        ' ----------------------------#

    Else

        MessageBox("Design laden wurde abgebrochen!","Design laden",64)

    EndIf

EndProc

Proc loadfile_api

    Parameters tit$,mas$,LW$
    Declare i%, Path$, Datei$
    Dim Api#,8100
    mas$ = Translate$(mas$,"|","\z")+"\z\z"
    Clear Api#,Path$
    Long Api#,0 = 76
    Long Api#,4 = %HWnd
    Long Api#,8 = %hInstance
    Long Api#,12 = Addr(mas$)
    Long Api#,16 = 0
    Long Api#,20 = 0
    Long Api#,24 = 0
    long Api#,28 = Api#+100
    long Api#,32 = 8000
    long Api#,36 = 0
    long Api#,40 = 0
    long Api#,44 = Addr(LW$)
    long Api#,48 = Addr(tit$)
    long Api#,52 = $00081006
    Word Api#,56 = 0
    Word Api#,58 = 0
    Long Api#,60 = 0
    GetOpenFileName(Api#)

    If CommDlgExtendedError()

        Err$ = If(CommDlgExtendedError() = $3003,"Sie haben zu viele Einträge ausgewählt !",Format$("'Fehlernummer : '###",CommDlgExtendedError()))
        Messagebox(Err$,"Hinweis",48)

    Else

        i% = Long(Api#,56)-1
        Datei$ = String$(Api#,100)
        return Datei$

    EndIf

    DisPose Api#

EndProc

Proc CreateElements

    WindowStyle 26 | 512 | 2048
    WindowTitle "Arbeitsfenster"
    Window 426, 120 - 1009, 782
    Cls GetSysColor(&COLOR_BTNFACE)
    SetDialogFont GetStockObject(&DEFAULT_GUI_FONT)
    ' zusätzliche FOBKEJTE -------#
    hsh& = Create("HScroll",%hwnd,"",8,692,964,20)
    hsv& = Create("VScroll",%hwnd,"",972,8,20,684)
    uStatic& = Control("Static", "", $54000000, 8, 8, 964, 684, %hwnd, 2000, %hinstance, $0)' UnterSTATIC
    Static& = Control("Static", "", $5400010E, 0, 0, 0, 0, uStatic&, 2000, %hinstance, $0)' eigentliche Static mit Bild
    ' ----------------------------#
    'StaticFrame& = Control("Static", "", $5630030f, 8, 8, 984, 704, %hwnd, 2000, %hinstance, $060018)
    Ende% = Create("Button", %hwnd, "Ende", 896, 720, 96, 24)
    button2% = Create("Button", %hwnd, "Bild laden", 8, 720, 96, 24)

EndProc

Proc MainLoop

    UserMessages 16
    ShowWindow(%hwnd, 1)
    OldWndProc& = ~GetWindowLong(%hWnd, ~GWL_WNDPROC)
    ~SetWindowLong(%hWnd, ~GWL_WNDPROC, @ProcAddr("ChangeControl", 4))

    While 1

        WaitInput
        Case %umessage = 16 : BREAK

        If Clicked(Ende%)

            End

        ElseIf Clicked(button2%)

            LoadDesign(Static&)

        ElseIf Clicked(StaticFrame&)

            '            message$ = Hex$(%message)
            '            mwnd$ = Hex$(%mwnd)
            '            wParam$ = Hex$(&wparam)
            '            lParam$ = Hex$(&lparam)
            '             $D "StaticFrame angeklickt GetMessage", Message$, mwnd$, wParam$, lParam$
            '            Showdesign OriginalBMp&, StaticFrame&, 0, 0, 0

        EndIf

    EndWhile

    ~SetWindowLong(%hWnd, ~GWL_WNDPROC, OldWndProc&)

EndProc

Proc ChangeControl

    Parameters hWnd&, Message&, wParam&, lParam&
    ' SCROLL reaktionen / Bild scrollen

    If GetFocus(hsh&)

        SetWindowPos Static& = (-GetScrollPos(hsh&)), (-GetScrollPos(hsv&))

    EndIf

    If GetFocus(hsv&)

        SetWindowPos Static& = (-GetScrollPos(hsh&)), (-GetScrollPos(hsv&))

    EndIf

    Return ~CallWindowProc(OldWndProc&, hWnd&, Message&, wParam&, lParam&)

EndProc

Proc Main

    CreateElements
    MainLoop

EndProc

Main

Grüße Georg
 
XProfan X2
TC-Programming [...] 
XProfan 10.0 - XProfan X2 - XProfan X3 - XProfan X4
Vorgestern (16:39)  
 




p.specht
Profan 11.2a free: Graues Bild, keine Buttons.
Bitte um Hinweis, was da zu ändern ist ...
Gruss
 
XProfan 11
So Computer sind halt auch nur Menschen...
Gestern (11:45)  
 




Georg
Teles
Ich habe XProfan 11 Free probiert, bei mir funktioniert es - der 2. Code natürlich nicht, da in 11 free die Funktion ProcAddr nicht gibt.



Versuche mal diese Zeile in der Prozedur LoadDesign zu aktivieren, eventuell kann es helfen
' SetWindowPos Static& = 0, 0 - OriginalBMPWidth%, OriginalBMPHeight%;0 'nicht nötig, da vorangehende Message die Static& automatisch auf die Größe anpasst

Grüße
 
TC-Programming [...] 
XProfan 10.0 - XProfan X2 - XProfan X3 - XProfan X4
Gestern (13:46)  
 




p.specht
Das allein ist es nicht. Muss wohl den Code erst mal genauer studieren...
 
XProfan 11
So Computer sind halt auch nur Menschen...
Gestern (19:38)  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

254 Betrachtungen

Unbenanntvor 0 min.
Paul Glatzvor 2 h
Georg TelesHeute (08:20)
Michael W.Heute (00:51)
Jürgen StrahlGestern (22:33)
Mehr...

Themeninformationen



AGB  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Impressum  |  Mart  |  Support  |  Suche

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie