FileInfos in Statusbar anzeigen

Anfängerfragen zum Programmieren mit PureBasic.
PureNoob
Beiträge: 33
Registriert: 25.09.2007 15:30

Ich peil es nicht!

Beitrag von PureNoob »

Hallo Bisonte,

Also ich habe jetzt den Code so geändert wie Du mir das vorgeschlagen hast:

Code: Alles auswählen

Procedure.s Version(Pfad.s)
If ReadFile(1, Pfad)
While Eof(1)=0
code$=ReadString(1)
Position=FindString(code$," Patch",1)
If Position>0
code$=Mid(code$, Position + Len("Version") ,5)
Break
EndIf
Wend
CloseFile(1)
EndIf
ProcedureReturn code$
EndProcedure
Im Ausgabefeld bin ich jezt von einer Statusbar auf ein TextGadget ausgewichen weil es grafische Probleme mit dem Ende der Statusbar gab.

In der Zeile in der die Versionsnummer ausgegeben werden soll steht dann bei mir folgendes:

Code: Alles auswählen

SetGadgetText(#Text_8, "Installierte Patch-Version: " + Version())
Nur seit deinem neuen codeschnipsel hat das vorne und hinten nicht mehr hin. Ich komme auch mit diesem "Übergeben" überhaupt nicht klar... man verstehe dass meine Basic-Kenntnisse auf 5.Klasse Realschule beruhen.

Wenn ich mein Programm starte, dann steht im TextGadget #Text_3 der Pfad der zu der Start-Datei (C:\Games) führt. Den hat man vorher mittels Path$ bestimmt. Dem Pfad aus #Text_3 soll jetzt der String "Upgrade.txt" hinzugefügt werden (C:\Games\Upgrade.txt), damit dann endlich die Upgrade.txt ausgelesen werden kann und der String 1.1.4 unten im TextGadget #Text_8 als "Version 1.1.4" angezeigt wird.

Und gerade das peil ich überhaupt nicht.

Danke für Deine Hilfe

PureNoob
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Ich peil es nicht!

Beitrag von Bisonte »

Wenn ich mein Programm starte, dann steht im TextGadget #Text_3 der Pfad der zu der Start-Datei (C:\Games) führt. Den hat man vorher mittels Path$ bestimmt. Dem Pfad aus #Text_3 soll jetzt der String "Upgrade.txt" hinzugefügt werden (C:\Games\Upgrade.txt), damit dann endlich die Upgrade.txt ausgelesen werden kann und der String 1.1.4 unten im TextGadget #Text_8 als "Version 1.1.4" angezeigt wird.
PureNoob
Ich hoffe in #Text_3 steht "C:\Games\" !!! Der \ am Ende ist wichtig !!!

Um so etwas selbst zu testen füge einfach mal gleich nach dem
Procedure Version(Pfad.s) ein DEBUG Pfad.s ein

Dann siehst du welchen Pfad PB benutzt

Und nach Pfad.s musst du nur noch das "Upgrade.txt" ranhängen.... simple
Addition...

also so ...

Code: Alles auswählen

Procedure.s Version(Pfad.s)
Debug Pfad.s
Pfad=Pfad+"Upgrade.txt" ; oder hier gleich das \ ranhängen... Pfad=Pfad+"\Upgrade.txt"
Debug Pfad.s
If ReadFile(1, Pfad)
While Eof(1)=0
code$=ReadString(1)
Position=FindString(code$," Patch",1)
If Position>0
code$=Mid(code$, Position + Len("Version") ,5)
Break
EndIf
Wend
CloseFile(1)
EndIf
ProcedureReturn code$
EndProcedure

SetGadgetText(#Text_8, "Installierte Patch-Version: " + Version())
2x Debug Pfad, damit du sehen kannst wie die Übergabe aussieht und was
PB danach versucht für ein File zu öffnen....

es sollte "C:\Games\" beim ersten debug und "C:\Games\Upgrade.txt" beim
zweiten debug angezeigt werden ...

Edit:
Ich sehe jetzt erst, das du debn Version() falsch aufgerufen hast ;)

Muss heissen:

Version(GetGadgetText(#Text_3))
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Du solltest dir mal die Zeit nehmen und die F1-Hilfe mal eingehend anschauen.

Da steht (meiner Meinung nach) alles recht ausführlich erklärt.

Stringmanipulation (also A$=B$+"Hu") ist eigentlich Grundwissen,
da es sonst , wie du ja siehst... ;) , schon am einfachsten hapert.

Wenn Du am probieren bist : Debug <Variable/Ausdruck> ist hilfreich. Es zeigt dir an was dein
Programm grade mit den Variablen macht ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
PureNoob
Beiträge: 33
Registriert: 25.09.2007 15:30

Trial und Error bis um 01:18

Beitrag von PureNoob »

So, ich habe jetzt den geschlagenen Tag damit zugebracht, eine Lösung für mein Problem zu finden. Ich verstehe nicht, warum der Code den du mir da gegeben hast, nicht funktioniert hat.

Code: Alles auswählen

Procedure.s Version(Pfad.s)
Pfad=Pfad+"\Upgrade.txt" ; oder hier gleich das \ ranhängen... Pfad=Pfad+"\Upgrade.txt"
If ReadFile(1, Pfad)
While Eof(1)=0
code$=ReadString(1)
Position=FindString(code$," Patch",1)
If Position>0
code$=Mid(code$, Position + Len("Version") ,5)
Break
EndIf
Wend
CloseFile(1)
EndIf
ProcedureReturn code$
EndProcedure  
(also A$=B$+"Hu") <--- Bitte was? Das sind böhmische Dörfer für mich.

Und wo kommt dann das hier hin?
Version(GetGadgetText(#Text_3))

Ich peils echt nicht.

PureNoob
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Du hast auch schon wieder was verändert ...

FindString(code$," Patch",1) <-- sieht doch anders aus als meins ;)

Wie sieht denn nun das "Upgrade.txt" aus ?
Am besten mal den ganzen Code posten....
Irgendwie ist alles aus dem zusammenhang gerissen.

Die Frage lautet auch noch, wie du den Pfad ermittelst ?

Mit GetCurrentDirectory() ist das immer so eine Sache. Wenn das Programm compiliert ist gehts, wenn nicht, glaubt er meist er wäre auf dem Desktop...

So sieht das gesamte in meiner Vorstellung aus:

Code: Alles auswählen

Enumeration
#Window_0
#Text_3
#Text_8
EndEnumeration

Procedure.s Version(Pfad.s)
  
  Pfad=Pfad+"\Upgrade.txt"
  
  If ReadFile(1,Pfad)
  
    MessageRequester("Der Pfad mit Filename lautet",Pfad)
    
    While Eof(1)=0
      code$=ReadString(1)
      Position=FindString(code$,"Version",1)
      If Position>0
          code$=Mid(code$, Position + Len("Version ") ,5)
          Break
      EndIf
    Wend
    CloseFile(1)
  EndIf
ProcedureReturn code$
EndProcedure 

Procedure Open_Window_0()
  Shared Path$
  If OpenWindow(#Window_0, 0, 0, 440, 250, "StatusBar", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
    If CreateStatusBar(0, WindowID(#Window_0))
      AddStatusBarField(160)
      AddStatusBarField(130)
      StatusBarText(0, 0, "Copyright 2007 by PureNoob", #PB_StatusBar_BorderLess)
      StatusBarText(0, 1, "Version:", #PB_StatusBar_BorderLess)
    
      If CreateGadgetList(WindowID(#Window_0))
        TextGadget(#Text_3,100,100,100,25,Path$,#PB_Text_Border)
        TextGadget(#Text_8,100,130,200,25,"Version ",#PB_Text_Border)
      EndIf
    EndIf   
  EndIf
  
EndProcedure

;##### Start des Programms

Path$="C:\Games"

Open_Window_0()

;##### Ein Textgadget

SetGadgetText(#Text_8, "Installierte Patch-Version: " + Version(GetGadgetText(#Text_3)))

;##### Oder die Statusbar

;StatusBarText(0, 1, "Version:" + Version(GetGadgetText(#Text_3)), #PB_StatusBar_BorderLess)


Repeat

  Event = WaitWindowEvent()

Until Event = #PB_Event_CloseWindow
End

;##### Das hier steht bei mir in der Upgrade.txt

; Mein Spiel !
; 
; Es sind erforderlich :
; 
; Blablubb MHz usw
; 
; Bei diesem Spiel handelt es sich um die -->Version 1.1.4<---- ..... usw. usw. das ich weiter geschrieben
; ganz langer Beschreibungstext von dem ganzen krams blablubb
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten