PBOSL - Eine OpenSource Library-Sammlung für PureBasic

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
nicolaus
Moderator
Beiträge: 1175
Registriert: 11.09.2004 13:09
Kontaktdaten:

Beitrag von nicolaus »

ts-soft hat geschrieben:..... Unicode wäre sowieso wichtiger als Threadsafe.
Bisher aber alles nicht so einfach umzusetzen. Jede Lib einzeln per Hand zu
kompilieren werde ich nicht machen, fehlt mir die Zeit.
......
Ok da könnte man sich jertzt streiten was wichtiger ist, denn english können wohl sicher mehr leute wie Unicode ala russisch oder so.
Ich denke das Threadsicherheit eher impimentiert werden sollte als Unicode da sicher nur wenige ihr Programm nach russisch oder Japanisch oder so übersetzten wollen.

Schade wegen dem Threadsicheren zeugs und PBOSL denn ich kann so mein Prog nicht Threadsicher kompilieren und habe dadurch hier auf meinem neuen PC auch richtig Probs Da der AMD X2 5000+ den ich jetzt habe einfach nicht mit meinem Progamm zusammen arbeiten will.
Das schmiert auf solchen Prozessoren immer ab, auf "normalen" Einkern Prozessoren gehts aber ohne probs.

Naja dann hoffe ich einfach mal das es doch noch recht bald was neues in der hinsicht geben wird.

Gruß,
Nico
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Warum nutzt Du nicht einfach den Source? Ansonsten selber mit TailBite die
LIb, welche Du bnötigts compilieren, für Threadsafe sind ja keine Änderungen
notwendig.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Update (nur windows-binary, der rest folgt später)

Added:
ScreenGadgets by Dostej (completely rewritten for PB4)

Extra:
Threadsafe Librarys:
PBOSL_ExPrinter
PBOSL_MSXML3
PBOSL_NTService
PBOSL_Process
PBOSL_RFile
PBOSL_SQLite3

Benutze Subsytem "UserLibThreadSafe"

sowie ein paar andere kleinere Korrekturen

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Beispiel für ScreenGadgets:

Code: Alles auswählen

Enumeration
  #Button_0
  #String_0
  #Text_0
  #ScrollBar_0
  #ScrollBar_1
  #CheckBox_0
  #CheckBox_1
  #ListIcon_0
  #ListIcon_1
  #ListIcon_2
  #ListIcon_3
  #Radio_0
  #Radio_1
  #Radio_2
  #TrackBar_0
  #TrackBar_1
  #Frame3D_0
  #Frame3D_1
  #Frame3D_2
  #Frame3D_3 
  #ImageButton_0
  #Image_0
EndEnumeration


Procedure.f FpS2() 
  Static Start_Zeit, Frames, SendFrames.f 
  Zeit_akt = ElapsedMilliseconds()
  Frames + 1 
  ZeitU = Zeit_akt - Start_Zeit 
  If ZeitU 
    SendFrames = Frames / ZeitU 
  EndIf  
  If Zeit_akt >= Start_Zeit + 10000 
    Start_Zeit = Zeit_akt 
    Frames = 0 
  EndIf 
  ProcedureReturn SendFrames * 1000 
EndProcedure

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse()= 0
  MessageRequester("Fehler", "init") 
  End 
EndIf

If OpenWindow(1, 0, 0, 1024, 768, "", #PB_Window_BorderLess)
  If OpenWindowedScreen(WindowID(1), 0,0, 1024, 768, 0, 0, 0)
    ; create a mouse
    If CreateSprite(0, 8, 8) 
      If StartDrawing(SpriteOutput(0)) 
        Circle(4, 4, 4, RGB(255, 255, 255)) 
        StopDrawing()
      EndIf 
    EndIf
    
    ;{ build Screengadgets
    ; set the standard appearance for the gadgets to build
    CreateSprite(2, 1024, 768)
    StartDrawing(SpriteOutput(2))
    Box(0, 0, 1024, 768, $0080FF)
    DrawingMode(4)
    For x = 0 To 200
      Circle(Random(900) + 50, Random(668) + 50, Random(40) + 10, RGB(Random(255), Random(255), Random(255)))
    Next
    StopDrawing()
    
    CreateImage(11, 100, 60)
    StartDrawing(ImageOutput(11))
    Box(0, 0, 100, 60, $00FFFF)
    DrawingMode(4)
    For x = 0 To 200
      Circle(Random(90) + 5, Random(50) + 5, Random(4) + 1, RGB(Random(255), Random(255), Random(255)))
    Next
    StopDrawing()
    
    
    If 0 ; show the gadgets with an image background; play with this to see the framerate drop if the image is too large
      #Imagesize = 50
      CreateImage(1, #Imagesize, #Imagesize)
      StartDrawing(ImageOutput(1))
      Box(0, 0, #Imagesize, #Imagesize, $0080FF)
      DrawingMode(4)
      For x = 0 To #Imagesize>>1
        Circle(Random(#Imagesize-10) + 10, Random(#Imagesize-10) + 10, Random(#Imagesize-10) + 10, RGB(Random(255), Random(255), Random(255)))
      Next
      StopDrawing()
      SG_SetBackground(2)
      SG_SetBackgroundImage(ImageID(1))
      SG_SetColor($00FFFF) 
    Else ; show the gadgets transparent
      SG_SetBackground(0)
      SG_SetColor($00FFFF)
    EndIf
    testfont = LoadFont(5, "Albany", 20)
    s.s
    ; 
    ; berechne die Objekte
    s = #CRLF$ + "teststring1" + ": " +  #CRLF$
    s = s + "teststring2" + ": " +  #CRLF$ + #CRLF$
    s = s + "teststring3" + ": " + #CRLF$ + #CRLF$
    s = s + "teststring4" + ": " + " %" + #CRLF$
    s = s + "teststring5" + #CRLF$
    s = s + "teststring6" + #CRLF$
    s = s + "teststring7" + #CRLF$
    
    ;
    SG_EditorGadget(#String_0, 40, 180, 230, 90)
    SG_SetGadgetText(#String_0, s)
    SG_SetGadgetBackground(#String_0, 0)
    SG_SetGadgetColor(#String_0, $FFFFFF)
    SG_AddGadgetItem(#String_0, -1, "Test 1. item")
    SG_SetGadgetItemFont(#String_0, 2, 5)
    SG_SetGadgetItemColor(#String_0, 2, $0000FF, $FF0000)
    
    SG_StringGadget(#Text_0, 40, 40, 240, 40, "Textgadget eingabetext", #PB_Text_Border | #PB_Text_Center)
    
    SG_CheckBoxGadget(#CheckBox_0, 40, 340, 240, 20, "CB 0")
    
    SG_ScrollBarGadget(#ScrollBar_0, 400, 10, 220, 20, 0, 100, 10)
    SG_ScrollBarGadget(#ScrollBar_1, 750, 80, 20, 220, 0, 100, 10, #PB_ScrollBar_Vertical)
    SG_OptionGadget(#Radio_0, 40, 410, 280, 20, "RD 0")
    SG_OptionGadget(#Radio_1, 40, 430, 280, 20, "RD 1")
    SG_CheckBoxGadget(#CheckBox_1, 40, 360, 240, 20, "CB 1")
    SG_OptionGadget(#Radio_2, 340, 450, 280, 20, "RD 2")
    SG_OptionGadget(40, 340, 470, 280, 20, "RD 2")
    
    
    SG_ListIconGadget(#ListIcon_0, 430, 80, 250, 315, "Column0", 100, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines) ; 
    SG_AddGadgetColumn(#ListIcon_0, 1, "Column1", 100)
    For x = 1 To 80 
      SG_AddGadgetItem(#ListIcon_0, -1, "test " + Str(x) + Chr(10) + "teil 2 / " + Str(x))
    Next
    
    SG_SetGadgetItemState(#ListIcon_0, 11, 1)
    
    SG_SetGadgetItemColor(#ListIcon_0, 0, $FF0000, -1)
    SG_SetGadgetItemColor(#ListIcon_0, 1, $00FF00, -1)
    
    CreateImage(201, 16, 16)
    StartDrawing(ImageOutput(201))
    Box(0, 0, 16, 16, $FF00FF)
    StopDrawing()
    SG_AddGadgetItem(#ListIcon_0, 5, "test 5neu", ImageID(201))
    
    CreateImage(200, 16, 16)
    StartDrawing(ImageOutput(200))
    Box(0, 0, 16, 16, $0000FF)
    StopDrawing()
    SG_AddGadgetItem(#ListIcon_0, 8, "test 8 neu", ImageID(200))
    
    
    SG_SetGadgetBackground(#ListIcon_0, 0)
    SG_SetGadgetColor(#ListIcon_0, $00FFFF)
    
    SG_ListIconGadget(#ListIcon_1, 900, 80, 100, 100, "Column0", 100, #PB_ListIcon_GridLines)
    SG_ListIconGadget(#ListIcon_3, 100, 80, 100, 95, "Column0", 100, #PB_ListIcon_GridLines)
    For x = 1 To 50 ; max number of entries for a Listicongadget
      SG_AddGadgetItem(#ListIcon_3, -1, "test " + Str(x))
    Next
    
    SG_ListIconGadget(#ListIcon_2, 700, 380, 100, 90, "Column0", 100, #PB_ListIcon_GridLines)
    
    SG_TrackBarGadget(#TrackBar_0, 40, 550, 250, 30, 0, 100, #PB_TrackBar_Ticks)
    
    
    SG_TrackBarGadget(#TrackBar_1, 800, 50, 250, 30, 0, 4, #PB_TrackBar_Vertical | #PB_TrackBar_Ticks)
    SG_ButtonGadget(#Button_0, 650, 660, 120, 40, "OK")
    SG_SetGadgetColor(#Button_0, $FFFFFF)
    SG_SetGadgetBackground(#Button_0, 0)
    
    SG_SetColor($FFFFFF)
    SG_Frame3DGadget(#Frame3D_0, 300, 510, 80, 20, "TEst 1")
    SG_Frame3DGadget(#Frame3D_1, 400, 510, 80, 20, "TEst 2", #PB_Frame3D_Double)
    SG_Frame3DGadget(#Frame3D_2, 500, 510, 80, 20, "TEst 3", #PB_Frame3D_Single)
    SG_Frame3DGadget(#Frame3D_3, 600, 510, 80, 20, "TEst 4", #PB_Frame3D_Flat)
    
    SG_ImageGadget(#Image_0, 300, 550, 100, 60, ImageID(11), 0)
    SG_ButtonImageGadget(#ImageButton_0, 450, 550, 100, 60, ImageID(11), 0)
    ;} 
    
    SG_SetGadgetState(#TrackBar_1, 4)
    
    ;{ Eventloop
    Repeat ; Start of the event loop
      ClearScreen(0)
      ; DisplaySprite(2, 0, 0) ; play with this for a background to see the "transparence" of the gadgets
      ; 
      StartDrawing(ScreenOutput())
      
      DrawText(20, 20,StrF(FpS2()))
      StopDrawing()
      
      SG_DrawAllGadgets()
      ExamineMouse () 
      DisplayTransparentSprite(0, MouseX(), MouseY())
      
      FlipBuffers()
      
      ;{ standard loop
      Event = SG_ScreenGadgetEvent() ; This line checks if an event happened
      
      GadgetID = SG_EventScreenGadgetID() ; Is it a gadget event?
      
      EventType = SG_EventType() ; The event type
      
      If Event = #PB_Event_Gadget
        
        If GadgetID = #Button_0
          If EventType = #SG_EventType_LeftRelease
            SG_FreeAllGadgets()
            Event = #PB_Event_CloseWindow
          EndIf
          
        ElseIf GadgetID = #String_0
          If EventType = #SG_EventType_LeftClick
            SG_SetGadgetText(#String_0, "Zeile1" + #CRLF$ + "Zeile2" + #CRLF$ + "Zeile3" + #CRLF$ + "Zeile4")
          EndIf
          
        ElseIf GadgetID = #Text_0
          If EventType = #SG_EventType_LeftClick
            SG_SetGadgetText(#Text_0, "New text")
          ElseIf EventType = #SG_EventType_RightClick
            SG_SetGadgetText(#Text_0, "On the right")
          ElseIf EventType = #SG_EventType_Wheel
            SG_SetGadgetText(#Text_0, Str(SG_MouseWheel_GL))
          EndIf
          
        ElseIf GadgetID = #CheckBox_0
          
        ElseIf GadgetID = #CheckBox_1
          
        ElseIf GadgetID = #ImageButton_0
          If EventType = #SG_EventType_LeftRelease
            SG_ClearGadgetItemList(#ListIcon_0)
            For x = 1 To 400 ; max number of entries for a Listicongadget
              SG_AddGadgetItem(#ListIcon_0, -1, "test " + Str(x) + Chr(10) + "teil 2 / " + Str(x))
            Next
            
            SG_ShowListItem(#ListIcon_0, 25)
            SG_SetGadgetState(#TrackBar_0, 50)
          EndIf
          SG_SetGadgetState(#ScrollBar_1, 50)
          
        ElseIf GadgetID = #Radio_0
          
        ElseIf GadgetID = #Radio_1
          
        ElseIf GadgetID = #TrackBar_0
          SG_SetGadgetText(#String_0, "TrackBar 0: " + Str(SG_GetGadgetState(#TrackBar_0)))
          
        ElseIf GadgetID = #TrackBar_1
          SG_SetGadgetText(#String_0, "TrackBar 2: " + Str(SG_GetGadgetState(#TrackBar_1)))
          
        ElseIf GadgetID = #ListIcon_0
          If EventType = #SG_EventType_LeftRelease
            ; debug " "
            ; debug "element: " + Str(SG_GetGadgetState(#ListIcon_0))
            ; debug "inhalt: " + SG_GetGadgetItemText(#ListIcon_0, SG_GetGadgetState(#ListIcon_0))
            ; debug "inhalt: " + SG_GetGadgetItemText2(#ListIcon_0, SG_GetGadgetState(#ListIcon_0), 1)
          EndIf
          
        ElseIf GadgetID = #ListIcon_1
          If EventType = #SG_EventType_LeftRelease
            SG_ClearGadgetItemList(#ListIcon_0)
            For x = 1 To 70 
              SG_AddGadgetItem(#ListIcon_0, -1, "test " + Str(x) + Chr(10) + "teil 2 / " + Str(x))
            Next
          EndIf
          
        ElseIf GadgetID = #ScrollBar_0
          SG_SetGadgetText(#String_0, "Scrollbar 1: " + Str(SG_GetGadgetState(#ScrollBar_0)) + #CRLF$ + "Scrollbar 2: " + Str(SG_GetGadgetState(#ScrollBar_1)))
          
        ElseIf GadgetID = #ScrollBar_1
          SG_SetGadgetText(#String_0, "Scrollbar 1: " + Str(SG_GetGadgetState(#ScrollBar_0)) + #CRLF$ + "Scrollbar 2: " + Str(SG_GetGadgetState(#ScrollBar_1)))
          
        EndIf
        
      EndIf
      ;}
      Delay(1)
      
      ExamineMouse()
      
    Until Event = #PB_Event_CloseWindow Or MouseButton(2) ; End of the event loop
    
    ;}
  EndIf
EndIf
;}


End
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

SubSystem UserLibThreadSafe

hinzugefügt:
PBOSL_ScreenGadgets

SubSystem UserLibUnicode

hinzugefügt:
PBOSL_RFile
PBOSL_ScreenGadgets
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
dige
Beiträge: 1235
Registriert: 08.09.2004 08:53

Beitrag von dige »

@TS-Soft: Gute Arbeit! :allright:
"Papa, ich laufe schneller - dann ist es nicht so weit."
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

dige hat geschrieben:@TS-Soft: Gute Arbeit! :allright:
Danke :D

Leider klappt das mit den SubSystem auch nicht immer, vor allem bei
Unicode, aber ein grosser Teil sollte erstmal funktionieren.

ScreenGadgets konnte ich für alle SubSysteme kompilieren, aber auch nur,
weil die Lib keinerlei API verwendet.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Creature
Beiträge: 678
Registriert: 29.08.2004 00:55
Wohnort: Frankfurt/Main

Beitrag von Creature »

ich hab den fred nicht gelesen.
darum ne frage, eigentlich ne blöde frage. ich stell sie aber trotzdem.
ist die lib-sammlung vollständig an PB 4.0 angepasst?
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Creature hat geschrieben:ich hab den fred nicht gelesen.
darum ne frage, eigentlich ne blöde frage. ich stell sie aber trotzdem.
ist die lib-sammlung vollständig an PB 4.0 angepasst?
Alle im ersten Thread aufgeführten Libs für Windows sind an PB4 angepaßt.
Libs für PB3.94 werden nicht mehr Supported.

Viele Libs, die mit TailBite erstellt wurden unterstützen zur Zeit kein Unicode,
bzw. Threadsafe.

Teilweise geht es jetzt per SubSystem. Einige Libs sind auch so
Unicode-tauglich.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Creature
Beiträge: 678
Registriert: 29.08.2004 00:55
Wohnort: Frankfurt/Main

Beitrag von Creature »

dank dir :)
Bildung kommt von Bildschirm und nicht von Buch, sonst hieße es ja Buchung.
Antworten