purebasic Marquee idle Progress Bar ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

purebasic Marquee idle Progress Bar ?

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
Rudi
Beiträge: 143
Registriert: 22.04.2010 18:28
Wohnort: #PB_Any

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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 
Win7 (x64)PB 5.4x (x86)5,7 Windows-LeistungsindexSuche
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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:
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Lord
Beiträge: 324
Registriert: 21.01.2008 19:11

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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
Bild
Benutzeravatar
NicknameFJ
Beiträge: 324
Registriert: 03.06.2007 14:36
Wohnort: Von der Sonne aus gesehen der dritte Planet

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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
PS: Alle im Text enthaltenen Schreibfehler sind beabsichtigt und dienen der Belustigung aller

Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: purebasic Marquee idle Progress Bar ?

Beitrag 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.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Antworten