Wert einer ProgBar ermitteln

Übersicht BlitzBasic BlitzPlus

Neue Antwort erstellen

KnorxThieus

Betreff: Wert einer ProgBar ermitteln

BeitragDi, Feb 07, 2012 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo! Smile


Da ich eine kleine Funktion über ProgBars baue, benötige ich jetzt einen Befehl zum Fortschrittswert der ProgBar. Ich kann nicht den Wert eingeben, da der User der Funktion nur die PB-ID angeben soll.

Unter ProgBar-Befehlen in der BlitzBasic-Hilfe stehen aber nur CreateProgBar und UpdateProgBar. Sad

Dafür weiß ich, dass USER32 oder solch artige Befehle lesen kann, denn an dem Beispiel, das Pummelie im Verzeichnis DLL und Userlibs hier schrieb, sieht man, dass
BlitzBasic: [AUSKLAPPEN]
SendMessage(QueryObject(progbar,1),1024+16,stat,0)
den ProgBar-Fortschrittswert ausliest.

Kennt also jemand so einen Befehl? Als ich googelte und auch blitzelte, fand ich leider keine Treffer.

Danke schon im Vorraus! Wink

Danke bis dann
Version: BlitzPlus / Blitz+
  • Zuletzt bearbeitet von KnorxThieus am Mo, Mai 11, 2015 14:18, insgesamt 2-mal bearbeitet

ozzi789

BeitragDi, Feb 07, 2012 18:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Keine Ahnung wie das per Windows Api Call geht, aber man kann sich auch selber was basteln Wink

Grüsse

Code: [AUSKLAPPEN]
Type progbarvalues
   Field phandle
   Field value#=0.0
End Type


window = CreateWindow("Fenster", 0, 20, 400, 300, 0, 3)
PBar = create_progbar(0, 40, 100, 10, window)
update=CreateButton("Update", 0, 0, 100, 30, window)
get=CreateButton("Get", 0, 60, 100, 30, window)


Repeat
   If GetKey() = 27 Then End
   event = WaitEvent()
   Select event
      Case $803
         End
      Case $401
      If EventSource()=update
         update_progbar( PBar, 0.05)
      EndIf
      If EventSource()=get
         Notify get_progbar_value(PBar)
      EndIf
   End Select
Forever


Function update_progbar(progbar,val#)
   For p.progbarvalues=Each progbarvalues
      If p\phandle=progbar
      p\value#=p\value#+val#
      UpdateProgBar(progbar,p\value#+val#)
      DebugLog p\value#
      EndIf
   Next 
   
End Function

Function get_progbar_value#(progbar)
   For p.progbarvalues=Each progbarvalues
      If p\phandle=progbar
         Return (p\value#)
      EndIf
   Next
End Function

Function create_progbar(x,y,w,h,group,style=0)
   phandle=CreateProgBar(x,y,w,h,group,style)
   p.progbarvalues=New progbarvalues
   p\phandle=phandle
   Return phandle
End Function
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

KnorxThieus

BeitragMi, Feb 08, 2012 17:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau's mir an!

Bis danach!

Very Happy


...


Schon geschehen!

Super Very Happy Very Happy Very Happy Smile

Übrigens: Sind diese Types wirklich nötig? Ich würde es gern selbst beurteilen können, aber wirklich mehr als den Namen kenne ich nicht. Embarassed

Auf jeden Fall Danke!!! Very Happy


PS2: Das mit Api war bloß eine Alternativsidee, nicht nötig Smile .
Version: BlitzPlus / Blitz+
  • Zuletzt bearbeitet von KnorxThieus am Mi, März 07, 2012 16:17, insgesamt 2-mal bearbeitet

ozzi789

BeitragMi, Feb 08, 2012 18:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Types bevorzuge ich, klar man könnt einen zwei Dimensionalen Array (Dim) nehmen aber das ist für meinen Geschmack etwas unschön..

Wenn du Types noch nicht kennst, würd ich sie dir ans Herz legen, sind ne tolle Sache Wink

Grüsse
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

KnorxThieus

BeitragDo, Feb 09, 2012 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann erzähl' mir doch mal was über Types! Razz

Und: Kann ich die Types in die/eine Funktion verlegen?
Version: BlitzPlus / Blitz+
  • Zuletzt bearbeitet von KnorxThieus am Mi, März 07, 2012 16:17, insgesamt einmal bearbeitet
 

PhillipK

BeitragDo, Feb 09, 2012 18:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Edit: Warnung, falschangabe! Meine unwissenheit *grml* - Siehte Xeres' beitrag!


In eine funktion verlegen?

Eher andersrum - funktionen in ein Type verlegen!

Ein Type ist ein "Objekt" wenn du so willst.

Zb kannst du, wenn du ein rennspiel schreibst, ein type anlegen:

*BB-codeblock rausgenommen - falsch!

Dazu kannst du, unter die "Fields" auch Methoden und Funktionen schreiben. Wie genau das bei bb aussieht, kann ich dir allerdings nicht sagen.

Wenn du nun 5 instanzen davon erzeugst, kann jede ihre eigene Beschleunigung, ihren eigenen treibstoff, ihre eigenen speedwerte haben, obwohl alle identisch sind (alles ist TAuto).
  • Zuletzt bearbeitet von PhillipK am Do, Feb 09, 2012 18:41, insgesamt einmal bearbeitet

KnorxThieus

BeitragDo, Feb 09, 2012 18:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok. ' Werde ich mal versuchen. Mein Problem war meistens, wo kmmt denn jetzt "/" hin, wo "\", weshalb überhaupt?

Dann heißt's oft: KnorxThieus hat Folgendes geschrieben:
Question Question Question


Trzd. Danke! Razz
Version: BlitzPlus / Blitz+
  • Zuletzt bearbeitet von KnorxThieus am Mi, März 07, 2012 16:17, insgesamt einmal bearbeitet

Xeres

Moderator

BeitragDo, Feb 09, 2012 18:27
Antworten mit Zitat
Benutzer-Profile anzeigen
PhillipK hat Folgendes geschrieben:
Wie genau das bei bb aussieht, kann ich dir allerdings nicht sagen.
In dem Fall wäre es besser, wenn du deine Hilfsbereitschaft zügelst und keine Falschinformationen verbreitest. In BB gibt es weder Methoden, noch kann man Funktionen innerhalb des Types definieren und Fields wie in deinem Code zu definieren, wird nichts bringen - sie werden in jedem Fall mit 0 initialisiert.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

ozzi789

BeitragDo, Feb 09, 2012 18:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktionen in Types gibts in BB leider nicht, Monkey hingegen hat das.. und Bmax(?)

Hoffe dieser Code hilft dir, falls du was nicht verstehst, fragen! Smile
Code: [AUSKLAPPEN]
;--------------------------
;Type Demo
;ozzi789 - 9.2.12
;--------------------------


;Grafik zeugs...
Graphics 800,600,32,2
SetBuffer BackBuffer()


;Hier erstellen wir einen Type namens Gegner
Type gegner
   Field x ;In dem Type legen wir eine Variable an namens X
   Field y ;Dito - Y
End Type

;Ein For Loop (10x)
For zaehler = 1 To 10
   ;Einen neue neuen Gegner erstellen
   g.gegner = New gegner
      ;Die oben erstellten Variabeln mit zufalls Zahlen abfüllen
      g\x=Rnd(0,800)
      g\y=Rnd(0,600)
Next

;Demonstration der zahlreichen tollen Befehlen
;Siehe auch : After & Before..
g.gegner = First gegner
Print "Der erste erstellte Gegner befindet sich auf "+g\x+"/"+g\y

g.gegner = Last gegner
Print "Der zuletzt erstellte Gegner befindet sich auf "+g\x+"/"+g\y

Print "Drücke eine Taste um weiterzufahren!"

WaitKey





While Not KeyHit(1)
   Cls
   ;Maus Koordinaten und Linksklick speichern
   mx=MouseX()
   my=MouseY()
   mh=MouseHit(1)
   
   ;Jeden gegner durchgehen in einem For Loop
   For g.gegner = Each gegner
      ;Gegner an den Koordinaten als Rect zeichnen
      Rect g\x,g\y,10,10,1
      ;Falls die linke Maustaste gedrückt wurde und sie sich innerhalb des weisses Feldchen (Gegner) befindet
      If mh=1 And mx>g\x And mx<g\x+10 And my>g\y And my<g\y+10
         ;Die Instanz des Gegners löschen
         Delete g.gegner
      EndIf
   Next
   
   Flip 30
Wend
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Lobby

BeitragDo, Feb 09, 2012 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Falls Du den Fortschritt noch immer direkt vom Progbargadget auslesen können willst, könntest Du folgende Funktion verwenden:
BlitzBasic: [AUSKLAPPEN]
Function GetProgValue#(progbar)
Return(SendMessage(QueryObject(progbar,1),$408,0,0)/100.0)
End Function

Sie benötigt die selbe .decls-Datei wie das SendMessage von Pummelie, sollte also eigentlich kein Problem sein sie zu nutzen. Warum Du mit Google oder anderen Suchmaschinen nicht fündig wurdest, wundert mich jedoch. Zumindest mit englischen Suchbegriffen hättest Du früher oder später genau hier landen müssen, und damit ist der Rest nur noch ein Kinderspiel (das Wissen, wie man mit solchen Messages umgeht, sollte sich ebenfalls, sofern noch nicht vorhanden, erarbeiten lassen).

Hier noch ein kleiner Testcode:
BlitzBasic: [AUSKLAPPEN]
win=CreateWindow("",200,200,400,300,0,1)
progbar=CreateProgBar(20,20,360,40,win)
UpdateProgBar(progbar,0.85)

Print GetProgValue(progbar) ;Hier sollte der oben gesetzte Wert herauskommen

While True
WaitEvent()
Select EventSource()
Case win
Select EventID()
Case $803
Exit
End Select
End Select
Wend

FreeGadget win
End

Pummelies Code liest übrigens in keinster Weise den aktuellen Fortschritt einer ProgBar aus. Wie kommst Du darauf?

ozzi789

BeitragDo, Feb 09, 2012 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
@Lobby
Nice thx Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

KnorxThieus

BeitragSa, Feb 18, 2012 13:35
Antworten mit Zitat
Benutzer-Profile anzeigen
@Lobby:
Aber der Wert wird übertragen.

PS (7.3.12): Um die Grafik auszufüllen, liest Windows7 Daten der ProgBar aus.
Version: BlitzPlus / Blitz+

Neue Antwort erstellen


Übersicht BlitzBasic BlitzPlus

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group