Seite 1 von 2

purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 02:41
von udg
Aus visual basic .net kenne ich den progress bar MARQUEE
genau so einen brauche ich.

für purebasic such ich mir mal wieder einen Wolf.
gibt es das hier nicht?

Ich brauch einen den ich wärend eines Packvorganges anzeigen lassen kann.

finde leider nichts. F1 ? nix

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 02:54
von udg

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ProgressBarGadget(1,10,10,480,20,0,100,8)
  
  SendMessage_(GadgetID(1),#WM_USER+10,1,50)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
da ist er.

Ohne WinApi Library von RS Basic hätte ich das nie gefunden.

gibts das auch standard mäßig in PB?

Grüße

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 08:07
von Rudi
Ihm hier:

Code: Alles auswählen

If OpenWindow(0,0,0,500,250,"Window",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
	ProgressBarGadget(1,10,10,480,20,0,100,8)
	SetGadgetState(1, #PB_ProgressBar_Unknown)
	
	Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf 

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 09:22
von NicknameFJ
udg hat geschrieben: [...]
für purebasic such ich mir mal wieder einen Wolf.
gibt es das hier nicht?

[...]

finde leider nichts. F1 ? nix

Warum gleich so aggressiv?
Kann man nicht freundlich fragen?

... und am Ende zeigt sich
es steht in der Hilfe unter ProgressBarGadget() (da wo man es auch vermuten würde)

Code: Alles auswählen

Die folgenden Befehle können zum Zugriff auf das Gadget verwendet werden: 

- SetGadgetState(): ändert den Wert der Fortschrittsanzeige. Ein Wert von #PB_ProgressBar_Unknown kann verwendet werden, um anzuzeigen, dass der Fortschritt nicht bekannt ist. 
TsTsTs :roll:

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 11:44
von RSBasic
udg hat geschrieben:gibts das auch standard mäßig in PB?
Damals nicht, aber inzwischen schon: #PB_ProgressBar_Unknown

@NicknameFJ
Er kam mir nicht so aggressiv rüber. Er hat nur gesagt, dass er lange gebraucht hat, um das zu finden.
Wenn er negative Smileys oder mehrfache Satzzeichen verwendet hätte, könnte ich das als Ausrasten/Meckern verstehen, aber ich finde seinen Text eher neutral. :)

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 12:44
von Lord
Zum Thema "agressiv":

Wenn man den 4. Parameter der SendMessage() verringert,
z.B. auf 10, wird die Anzeige auch "agressiver". :wink:

Code: Alles auswählen

If OpenWindow(0, 0, 0, 500, 250, "Window", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
  ProgressBarGadget(1, 10, 10, 480, 20, 0, 100, 8)
  SendMessage_(GadgetID(1), #WM_USER+10, 2, 10)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 13:25
von NicknameFJ
RSBasic hat geschrieben: Er kam mir nicht so aggressiv rüber. Er hat nur gesagt, dass er lange gebraucht hat, um das zu finden.
Wenn er negative Smileys oder mehrfache Satzzeichen verwendet hätte, könnte ich das als Ausrasten/Meckern verstehen, aber ich finde seinen Text eher neutral. :)
Dann habe ich es wohl in den falschen Hals gekriegt wenn es sonst niemand so empfunden hat.

Ich habe aber immerhin noch sachlich geholfen :mrgreen: und auf die entsprechende Stelle in der Hilfe verwiesen

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 18:22
von udg
Ne ne, das war nicht aggressiv gemeint. (steht mir nicht zu)

Nur für mich wieder typisch, dass ich mir einen Wolf suche und nix finde und am Ende ist es wieder ganz einfach.
F1 und Progressbar habe ich natürlich bemüht, ich bin einfach davon ausgegangen, dass es eine Konstante gibt die sich da zB nennt:

Code: Alles auswählen

#PB_ProgressBarMarquee
RSBasic hat geschrieben:
udg hat geschrieben:gibts das auch standard mäßig in PB?
Damals nicht, aber inzwischen schon: #PB_ProgressBar_Unknown
Aha :allright:
wusste ich nicht und hätte auch nicht gewusst das ich diese Konstante suchen muss, da ich nur Marquee kenne.
-aber in PBv5.30 noch nciht vorhanden ;)



Das ich erst wieder mit SetGadgetState arbeiten muss, habe ich ausgeblendet, nahm ich an, es gibt da was standardmäßiges :)

Ein Frage zum eigentlichen Vorhaben:

Ich muss rar.exe per Command aufrufen. Dies öffnet die CMD Konsole. genau in diesem Moment werden alle PureBasic Vorgänge angehalten da das CMD Fenster Global sich in den Vordergrund dängt.
Trotz Code für meinen Idle Marquee:

Code: Alles auswählen

SetActiveWindow(#IdleWnd)
bleibt die Bewegung so lang stehen, bis das CMD Fenster wieder geschlossen ist, weil der Packvorgang beendet wurde, erst dann funktioniert Mein Marquee wieder ordnungsgemäß.

Da ich bestimmte Rar Parameter aufrufen muss, muss ich folgendes Importieren:

Code: Alles auswählen

ImportC "msvcrt.lib"
  system(cmd.p-ascii)
EndImport
die Kommando Parameter:

Code: Alles auswählen

Procedure Packer(Name.s)
  If GetGadgetState(#Rar_100_MB)=#PB_Checkbox_Checked
     Eingabetext1$ = GetGadgetText(#Rar_100_MB_TXT)      ; Eingabe auslesen
      ElseIf GetGadgetState(#Rar_250_MB)=#PB_Checkbox_Checked
        Eingabetext1$ = GetGadgetText(#Rar_250_MB_TXT)   ; Eingabe auslesen
      ElseIf GetGadgetState(#Rar_500_MB)=#PB_Checkbox_Checked
        Eingabetext1$ = GetGadgetText(#Rar_500_MB_TXT)   ; Eingabe auslesen
      ElseIf GetGadgetState(#Rar_1000_MB)=#PB_Checkbox_Checked
        Eingabetext1$ = GetGadgetText(#Rar_1000_MB_TXT)  ; Eingabe auslesen
      ElseIf GetGadgetState(#RarFile_Custom_ChkBox)=#PB_Checkbox_Checked
        Eingabetext1$ = GetGadgetText(#RarFile_Custom)   ; Eingabe auslesen  
   EndIf
 
  Protected Pfad.s = GetPathPart(ProgramFilename()) + Name
  
  Protected Parameter.s = GetPathPart(ProgramFilename()) + "Rar.exe a -m1 -ma5 -md32m -r -t -df -v" + Eingabetext1$ + "m " + #DQUOTE$ + Name + ".rar" + #DQUOTE$
  Protected ID
  
  SetCurrentDirectory(Pfad + "\")
  
  If OpenConsole()
    
    system("color 3")
    system(Parameter)
   ;system("pause")
    
    CloseConsole()    
    SetGadgetText(#Btn_Erstellen,"rar Archive erfolgreich erstellt")
  EndIf
  
  SetCurrentDirectory(GetPathPart(ProgramFilename()))
  
EndProcedure
Mein Marquee Idle Code der eigtl. während des Packens angezeigt werden soll:

Code: Alles auswählen

;Procedure IdlePacking()  
   OpenWindow(#IdleWnd, 502, 158, 300, 100, "", #PB_Window_BorderLess|#PB_Window_ScreenCentered|#WS_VISIBLE)
     ; FENSTER FARBE
       SetWindowColor(#IdleWnd, RGB(68, 87, 112))
       ; SET WINDOW ALWAYS ON TOP
         SetWindowPos_(WindowID(#IdleWnd),#HWND_TOPMOST,0,0,0,0,#SWP_NOMOVE|#SWP_NOSIZE)
         SetActiveWindow(#IdleWnd)
 ;////////////////////////////////////      
 ; CONTAINER IDLE
 ;////////////////////////////////////
     ContainerGadget(#Idle_Container, 1, 1, 298, 98, #PB_Container_BorderLess)
       SetGadgetColor(#Idle_Container, #PB_Gadget_BackColor, RGB(109, 145, 160))
       
       ProgressBarGadget(#ProgressBar,10,42,277,16,0,100,8)
       SendMessage_(GadgetID(#ProgressBar),#WM_USER+10,1,20)    
     CloseGadgetList()
;EndProcedure 
Kann man da etwas erzwingen, dass der Progressbar trotzdem weiter funktioniert?

Grüße

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 18:29
von RSBasic
Du benutzt bestimmt RunProgram() mit #PB_Program_Wait oder While ProgramRunning(Program) mit #PB_Program_Open | #PB_Program_Read oder?
Wenn ja, dann liegt es einfach daran, dass dein Fenster einfach gestoppt wird und so lange gewartet wird, bis die ausgeführte Anwendung beendet wurde.
Da die Anwendung gestoppt wird, können auch keine Events empfangen und ausgewertet werden. Du bekommst sogar von Windows die Meldung "Anwendung reagiert nicht mehr.".
Um das Problem zu beheben, kannst du z.B. in einem Thread unabhängig die Anwendung starten, so dass die Eventschleife deines Fensters trotzdem weiterläuft.

Re: purebasic Marquee idle Progress Bar ?

Verfasst: 04.06.2016 18:32
von udg

Code: Alles auswählen

Procedure CreateDirectoryEx(DirPath.s) ; TS-Soft
  RunProgram(GetEnvironmentVariable("COMSPEC"), "/c mkdir " + #DQUOTE$ + DirPath + #DQUOTE$, "", #PB_Program_Wait | #PB_Program_Hide)
  If FileSize(DirPath) = -2
    ProcedureReturn #True
  EndIf
EndProcedure
dann könnte dies, der Auslöser sein?

Ich glaube ich muss mal was fertig machen und komplett posten. Ist etwas kompliziert.