Français
Source/ Codesnippets

Fortschrittsbalken Progressbar - 2

 

KompilierenMarqueSéparation
Source wurde am 15.07.2007 aus der MMJ-Quellcodesammlung (Dietmar Horn) in die Babyklappe auf XProfan.Com abgelegt:
ProgressBar (2)  - Fortschrittsbalken -
(C) 2006 Nico Madysa
----- TPROGRESSBAR.INC --------------------------------------------------------------------------------------------
Def SysMetrics(1)   !USER32,GetSystemMetrics
Def CaptionX(1) %(1) + (SysMetrics(7) * 2            )
Def CaptionY(1) %(1) + (CaptionX(0)   + SysMetrics(4))
Def CenterX(1)  (%MaxX - CaptionX(%(1)) ) / 2
Def CenterY(1)  (%MaxY - CaptionY(%(1)) ) / 2
Eine ProgressBar
Class ProgressBar = -handle& , #MaxVal% , #ActVal% , GetHandle@, Destroy@,
ProgressBar@ , RaiseVal@ , SetVal@ , LowerVal@ , GetVal@
ProgressBar
Konstruktor einer Progressbar
pWnd&   : übergeordnetes Fenster
dir%    : 0 = horizontale Füllrichtung
1 = vertikale Füllrichtung
mode%   : 0 = Kästchen-Füllung
1 = fließend füllen
x%,y%   : Koordinaten der oberen, linken Ecke
dx%,dy% : Länge und Breite der ProgressBar
max%    : Füllschritte(bei z.B. 200 Dateien muss die Leiste
in 200 Schritten gefüllt werden)
Result  : Handle der ProgrssBar(eigentlich eher unwichtig)

proc ProgressBar.ProgressBar

    parameters pWnd& , dir% , mode% , x% , y% , dx% , dy% , Max%
    declare style&
    case (max% <= 0) : max% = 100
    style& = $50800000 + if(dir%,4,0) + if(mode%,1,0)
    .handle& = Control(msctls_progress32,$(3),style&,x%,y%,dx%,dy%,pWnd&,101,%hInstance)
    .MaxVal% = max%
    .ActVal% = 0
    Return .handle&

endproc

GetHandle
Liefert das Handle der ProgressBar(eigentlich eher unwichtig)
Result  : Handleder Progressbar

proc ProgressBar.GetHandle

    Return .handle&

endproc

RaiseVal
Füllt die ProgressBar
x%     : Wert, um den die Bar gefüllt wird(Die Bar zeigt an,
wie viele Prozente der aktulle Wert vom maximalen beträgt)
Result : momentaner Wert oder -1 bei Fehler

proc ProgressBar.RaiseVal

    parameters x%
    declare val% , res%
    .ActVal% = .ActVal% + x%

    if .ActVal% > .MaxVal%

        .ActVal% = .MaxVal%

    endif

    val% = (.ActVal% * 100) / .MaxVal%
    res% = Sendmessage(.handle&,$402,val%,0)
    case    res% : Return .ActVal%
    casenot res% : Return (-1)

endproc

LowerVal
Leert die ProgressBar
x%     : Wert, um den die Bar geleert wird(Die Bar zeigt an,
wie viele Prozente der aktulle Wert vom maximalen beträgt)
Result : momentaner Wert oder -1 bei Fehler

proc ProgressBar.LowerVal

    parameters x%
    declare val% , res%

    if .ActVal% > x%

        .ActVal% = .ActVal% - x%

    else

        .ActVal% = 0

    endif

    val% = (.ActVal% * 100) / .MaxVal%
    res% = Sendmessage(.handle&,$402,val%,0)
    case    res% : Return .ActVal%
    casenot res% : Return (-1)

endproc

RaiseVal
Setzt den Wert der ProgressBar
x%     : Wert, auf den .Actval% gesetzt wird(Die Bar zeigt an,
wie viele Prozente der aktulle Wert vom maximalen beträgt)
Result : momentaner Wert oder -1 bei Fehler

proc ProgressBar.SetVal

    parameters x%
    declare val% , res%
    .ActVal% = x%

    if .ActVal% < 0

        .Actval% = 0

    elseif .ActVal% > .MaxVal%

        .ActVal% = .MaxVal%

    endif

    val% = (.ActVal% * 100) / .MaxVal%
    res% = Sendmessage(.handle&,$402,val%,0)
    case    res% : Return .ActVal%
    casenot res% : Return (-1)

endproc

GetVal
Gibt den momentanen Wert der ProgressBar zurück.
Selber Effekt wie ProgressBar.RaiseVal(0)
Result : momentaner Wert

proc ProgressBar.GetVal

    Return .ActVal%

endproc

Destroy
Destruktor-Methode

proc ProgressBar.Destroy

    parameters class#

    if Upper$(ClassOf(class#)) = PROGRESSBAR

        DestroyWindow(class#.GetHandle())
        dispose class#
        return 1

    elseif Upper$(ClassOf(class#)) = PROGRESSBARWINDOW

        DestroyWindow(.hDia&)
        dispose class#
        return 1

    else

        return 0

    endif

endproc

Eine Dialogbox mit ProgressBar
von ProgressBar abgeleitet
Class ProgressBarWindow = ProgressBar , -handle& , -hdia& , -ht& , -valincpt%,
ProgressBarWindow@ , SetCaption@ , GetCaption@ ,
SetWText@ , GetWText@ , GetHandle@ , RaiseVal@ ,
SetVal@ , LowerVal@ , ValToCaption@ , DelCaptionVal@ ,
ValInCaption@
ProgressBarWindow
Konstruktor-Methode
pWnd&    : übergeordnetes Fenster der Dialogbox
caption$ : Titel der Dialogbox
text$    : evtl. erläuternder Text
mode%    : 0 = Kästchen-Füllung
1 = fließendes Füllen
x% , y%  : obere linke Ecke der Dialogbox
max%     : maximaler Wert der ProgressBar (bei actval = maxval ist
die ProgressBar voll)
Result   : Handle der Dialogbox

proc ProgressBarWindow.ProgressBarWindow

    parameters pWnd& , caption$ , text$ , mode% , x% , y% , max%
    declare style& , dx% , dy%
    style& = $50800000 + if(mode%,1,0)
    .hdia&   = Create(Dialog,pWnd& ,caption$,%MaxX,%MaxY,225,90)
    .ht&     = Create(Text  ,.hdia&,text$   ,5    ,5    ,215,50)
    .handle& = Control(msctls_progress32,$(3),style&,5,60,215,25,.hdia&,101,%hInstance)
    .MaxVal% = max%
    .ActVal% = 0
    dx% = 450 -  width(.hdia&)
    dy% = 180 - height(.hdia&)
    SetWindowPos .hdia& = x% , y% - dx% , dy% ; 0
    Return .hdia&

endproc

SetCaption
Setzt den Titel der Dialogbox
caption$ : Neuer Titel

proc ProgressBarWindow.SetCaption

    parameters caption$
    declare ncap$ , val%
    ncap$ = caption$
    val% = (.Actval% * 100) / .MaxVal%

    if .valincpt%

        ncap$ = ncap$ +  -  + str$(val%) + %

    endif

    SetText .hdia& , ncap$

endproc

GetCaption
Liest den Titel der Dialogbox aus
Result : Titel

proc ProgressBarWindow.GetCaption

    declare hpbw& , cpt$
    hpbw& = .hdia&
    cpt$  = Gettext$(hpbw&)
    Return cpt$

endproc

SetWText
Setzt den erläuternden Text IN der Dialogbox
text$ : neuer Text

proc ProgressBarWindow.SetWText

    parameters text$
    SetText .ht& , text$

endproc

GetWText
Liest den erläuternden Text aus
Result : erläuternder Text

proc ProgressBarWindow.GetWText

    Return GetText$(.ht&)

endproc

GetHandle
Liefert das Handle der Dialogbox
Result : Handle der DialogBox

proc ProgressBarWindow.GetHandle

    Return .hdia&

endproc

ValToCaption
Der momentane Prozentsatz wird in der Titelzeile angezeigt

proc ProgressBarWindow.ValToCaption

    ifnot .valincpt%

        .SetCaption(.GetCaption()+ - +str$(.ActVal%)+%)
        .valincpt% = 1

    endif

endproc

DelCaptionVal
Der Prozentsatz wird wieder aus der Titelzeile entfernt

proc ProgressBarWindow.DelCaptionVal

    declare cpt$

    if .valincpt%

        cpt$ = .GetCaption()

        if .ActVal% >= 100  7(3) Stellen weg

            cpt$ = Left$(cpt$,len(cpt$)-7)

        elseif .ActVal% >= 10  6(2) Stellen weg

            cpt$ = Left$(cpt$,len(cpt$)-6)
            else  5(1) Stellen weg
            cpt$ = Left$(cpt$,len(cpt$)-5)

        endif

        .valincpt% = 0

    endif

endproc

ValInCaption
Fragt ab, ob der momentane Prozentsatz in der Titelzeile
angezeigt wird.
ValToCaption und DelCaptionVal beachtetn dies bereits!

proc ProgressBarWindow.ValInCaption

    return .valincpt%

endproc

RaiseVal
Füllt die ProgressBar
x%     : Wert, um den die Bar gefüllt wird(Die Bar zeigt an,
wie viele Prozente der aktulle Wert vom maximalen beträgt)
Result : momentaner Wert oder -1 bei Fehler

proc ProgressBarWindow.RaiseVal

    parameters x%
    declare val% , res% , exval% , c$
    exval% = (.ActVal% * 100) / .MaxVal%
    .ActVal% = .ActVal% + x%

    if .ActVal% > .MaxVal%

        .ActVal% = .MaxVal%

    endif

    val% = (.ActVal% * 100) / .MaxVal%
    res% = Sendmessage(.handle&,$402,val%,0)

    if .valincpt%

        c$ = .GetCaption()

        if exval% >= 100

            c$ = Left$(c$,len(c$) - 7)

        elseif exval% >= 10

            c$ = Left$(c$,len(c$) - 6)

        else

            c$ = Left$(c$,len(c$) - 5)

        endif

        .SetCaption(c$)

    endif

    case    res% : Return .ActVal%
    casenot res% : Return (-1)

endproc

LowerVal
Leert die ProgressBar
x%     : Wert, um den die Bar geleert wird(Die Bar zeigt an,
wie viele Prozente der aktulle Wert vom maximalen beträgt)
Result : momentaner Wert oder -1 bei Fehler

proc ProgressBarWindow.LowerVal

    parameters x%
    declare val% , res% , exval% , c$
    exval% = (.ActVal% * 100) / .MaxVal%
    .ActVal% = .ActVal% - x%

    if .ActVal% < 0

        .ActVal% = 0

    endif

    val% = (.ActVal% * 100) / .MaxVal%
    res% = Sendmessage(.handle&,$402,val%,0)

    if .valincpt%

        c$ = .GetCaption()

        if exval% >= 100

            c$ = Left$(c$,len(c$) - 7)

        elseif exval% >= 10

            c$ = Left$(c$,len(c$) - 6)

        else

            c$ = Left$(c$,len(c$) - 5)

        endif

        .SetCaption(c$)

    endif

    case    res% : Return .ActVal%
    casenot res% : Return (-1)

endproc

RaiseVal
Setzt den Wert der ProgressBar
x%     : Wert, auf den .Actval% gesetzt wird(Die Bar zeigt an,
wie viele Prozente der aktulle Wert vom maximalen beträgt)
Result : momentaner Wert oder -1 bei Fehler

proc ProgressBarWindow.SetVal

    parameters x%
    declare val% , res% , exval% , c$
    exval% = (.ActVal% * 100) / .MaxVal%
    .ActVal% = .ActVal% + x%

    if .ActVal% > .MaxVal%

        .ActVal% = .MaxVal%

    elseif .ActVal < 0

        .Actval% = 0

    endif

    val% = (.ActVal% * 100) / .MaxVal%
    res% = Sendmessage(.handle&,$402,val%,0)

    if .valincpt%

        c$ = .GetCaption()

        if exval% >= 100

            c$ = Left$(c$,len(c$) - 7)

        elseif exval% >= 10

            c$ = Left$(c$,len(c$) - 6)

        else

            c$ = Left$(c$,len(c$) - 5)

        endif

        .SetCaption(c$)

    endif

    case    res% : Return .ActVal%
    casenot res% : Return (-1)

endproc

Für Methoden von ProgressBarWindow, die nicht überladen wurden,
gilt dasselbe, wie für die gleichnamigen Methoden von ProgressBar
Ende der Include-Datei
--------------------------------------------------------------------------------------------------

PROC NICHTLADEN

    declare pb# , i%
    EnableWindow %hWnd , 0
    pb# = New(ProgressBarWindow,%hWnd,Keine Dateien laden,
    Datei 1 von 200 wird nicht geladen...,1,100,100,200)
    pb#.ValToCaption()
    i% = 1

    whilenot i% > 200

        pb#.SetWText(Datei +str$(i%)+ von 200 wird nicht geladen...)
        Sleep Rnd(250 - 20) + 20
        pb#.RaiseVal(1)
        case (%Key = 2) or IsKey(27) : Break
        inc i%

    EndWhile

    DestroyWindow(pb#.GetHandle())
    Dispose pb#
    EnableWindow %hWnd , 1

ENDPROC

##### Hauptprogramm #################################################################
declare button&,exit&
Randomize
WindowTitle Demo zur TProgressBar.inc von Timo Madysa
cls
button& = Create(Button,%hWnd,Keine Dateien laden,5,5,200,25)
exit&= Create(Button,%hWnd,Demo beenden,Width(%HWnd) - 200 - 5,5,200,25)

whilenot IsKey(27)

    waitinput

    if Clicked(button&)

        NICHTLADEN
        SetFocus(%HWndn class=s2>)

    elseif Clicked(exit&)

        pause

    endif

Wend

end
 
16.07.2007  
 



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

1.725 Views

Untitledvor 0 min.
Gast.081525.08.2024
Thomas Freier30.01.2024
Tommy08.08.2021
Frank16.04.2021
plus...

Themeninformationen

cet Thema hat 1 participant:

unbekannt (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