PureBasic 3.92 beta 1 für Windows released

Ankündigungen PureBasic oder die Community betreffend.
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

PureBasic 3.92 beta 1 für Windows released

Beitrag von freak »

Die neue Beta-Version gibt es ab sofort zum download im User-Bereich auf http://www.purebasic.com/
Das ist ein bugfix Release, es gibt also nicht viel neues, aber einige wichtige
fixes. (Beispiel Memory-Leak mit Strings und LinkedLists)

Änderungen:
- Added: CalendarGadget() and DateGadget(), thanks to Fr34k !
- Added: Doubleclick on windows background now generate an event (Thanks to Rings)
- Added: LibraryID()
- Added: SaveSprite() now have an optional 'Flags' parameter and can now save 8 bits sprite/screen

- Optimized: ListCount() and ListIndex() are now very fast (it doesn't iterate each element of the list anymore).

- Changed: DeleteElement() now always goes back to the previous element (can be outside the list if
it was the first element), to be fully compatible with ForEach. An optional flag has been added to preserve previous behaviour.
- Changed: the application current directory isn't anymore touched by any PureBasic command to conform
to Windows rules.

- Fixed: IsSound() wasn't available in NT4 mode
- Fixed: AddDate() could fail depending of the computer time zone
- Fixed: Memory leak with linkedlists, arrays and local variables when using a structure which contained strings
- Fixed: SaveSprite() default value for JPEG saving is now '7'.
- Fixed: DisplayPalette() failed on XP systems (1st and last color remained unchanged)
- Fixed: ImageGadget() now supports ToolTips and bitmap/icon live switching
- Fixed: ImageButtonGadget() now supports skinning and bitmap/icon live switching
- Fixed: SetGadgetItemText() for ListViewGadget() destroyed the item user data
- Fixed: CopyImage() failed on WinNT4 under some conditions
- Fixed: A memory leak in SendNetworkFile(). Now, it returns 1 on success or 0 on failure.
- Fixed: StatusBarText() didn't refresh the statusbar with the 'Borderless' flag
- Fixed: CatchImage() with #PB_any
- Fixed: the PNG decoder nows handle corrupted PNG safely
- Fixed: the JPEG encoder with quality value inferior to 3 could lead to a crash
- Fixed: a little TreeGadget() bug when checkboxes were activated
- Fixed: several compiler bugs
Hilfe zu den neuen Befehlen:
CalendarGadget()

Syntax

CalendarGadget(#Gadget, x, y, Breite, Höhe [, Datum [, Flags]])
Beschreibung

Erstellt ein Kalendergadget innerhalb der aktuellen Gadgetliste. Dieses Gadget stellt einen Monatskalender dar und lässt den Anwender ein Datum auswählen. Die von diesem Gadget und seinen relevanten Befehlen verwendeten Datumsangaben benutzen das gleiche Datumsformat wie die PB Date Library.

Wenn #PB_Any als '#Gadget' Parameter verwendet wird, dann wird der Identifier des neuen Gadgets als 'Ergebnis' zurückgegeben. #Gadget ist die Nummer, die (später) von der EventGadgetID() Funktion zurückgegeben wird.

Der 'Datum' Parameter kann optional genutzt werden, um ein bestimmtes Datum auszuwählen. Wird keines angegeben, dann wird das aktuelle Datum verwendet.

Sie können #PB_Calendar_Borderless als 'Flags' Parameter angeben, wenn Sie das Gadget ohne einen Rand erstellen wollen.

Die folgenden Befehle können zum Zugriff auf den Inhalt des Kalendergadgets genutzt werden:

- SetGadgetState(): setzt das aktuell anzuzeigende Datum.
- GetGadgetState(): ermittelt das aktuell angezeigte Datum.

Beispiel:
If OpenWindow(0, 0, 0, 220, 200, #PB_Window_SystemMenu|#PB_Window_Screencentered,"CalendarGadget()")
If CreateGadgetList(WindowID())
CalendarGadget(0, 10, 10, 200, 180)
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
DateGadget()

Syntax

Ergebnis = DateGadget(#Gadget, x, y, Breite, Höhe [, Maske$ [, Datum [, Flags]]])
Beschreibung

Erstellt ein Stringgadget innerhalb der aktuellen Gadgetliste, in welchem ein Datum und/oder eine Zeit eingegeben werden kann.

Dieses Gadget verwendet das gleiche Datumsformat für seine Funktionen wie die Date Library. Damit können Sie z.B. FormatDate() verwenden, um die mittels GetGadgetState() erhaltenen Ergebnisse in einem ordentlichen Datumsformat anzuzeigen.

Wenn #PB_Any als '#Gadget' Parameter verwendet wird, dann wird der Identifier des neuen Gadgets als 'Ergebnis' zurückgegeben. #Gadget ist die Nummer, die (später) von der EventGadgetID() Funktion zurückgegeben wird.

Mit dem optionalen 'Maske$' Parameter können Sie das Format angeben, in welchem das Datum eingegeben werden kann. Siehe FormatDate() für das Format dieser Maske.
Wichtiger Hinweis: Das Gadget unterstützt nicht die Anzeige von Sekunden, wenn Sie also "%ss" im 'Maske$' Parameter angeben, wird dies einfach ignoriert!
Wenn Sie keine Maske oder einen leeren String angeben, wird eine Standardmaske verwendet. Die Maske kann mittels dem SetGadgetText() Befehl verändert werden.

Mit dem optionalen 'Datum' Parameter können Sie das anzuzeigende Datum auf jedes Datum Ihrer Wahl einstellen. Ohne diesen Parameter oder die Angabe einer 0 wird das aktuelle Datum verwendet.
Standardmäßig hat das Gadget einen Schalter zum Aufrufen eines Kalenders, in welchem der Anwender ein Datum auswählen kann (siehe Bild weiter unten). Sie können dies ändern, wenn Sie #PB_Date_UpDown als 'Flags' Parameter angeben. Dies versieht das Gadget mit einem Hoch/Runter-Schalter, mit welchem der Anwender den aktuell ausgewählten Teil des Gadgets verändern kann.

Die folgenden Befehle können zum Zugriff auf den Inhalt des Datumsgadgets genutzt werden:

- SetGadgetState(): Setzt das aktuell angezeigte Datum.
- SetGadgetText(): Ändert die Eingabemaske des Gadgets.
- SetGadgetAttribute(): Setzt ein Minimum/Maximum Datum, welches der Anwender auswählen kann.
- GetGadgetState(): Ermittelt das aktuell angezeigte Datum.
- GetGadgetText(): Ermittelt das aktuell angezeigte Datum als ein String, wie dieser im Gadget angezeigt wird.
- GetGadgetAttribute(): Ermittelt das Minimum/Maximum Datum des Gadgets.

Beispiel:
If OpenWindow(0, 0, 0, 200, 250, #PB_Window_SystemMenu|#PB_Window_Screencentered,"DateGadget()")
If CreateGadgetList(WindowID())
DateGadget(0, 10, 10, 180, 25, "Datum: %mm/%dd/%yyyy Zeit: %hh:%ii")
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
EndIf
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Sehr schön, die 2 neuen Gadgettypen gefallen mir. Da kann man richtig viel einstellen und genau bestimmen wie das Datum im DateGadget erscheinen soll. ;)

Kleiner Bug: Im jaPBe wird mir als Parameter für das CalendarGadget "#adget" angezeigt. Scheint als wenn da ein "G" fehlen würde.

Ansonsten schöne Sache, jetzt sind auch komplexe AND-Verknüpfungen mit Floats und Words drinne und funktionieren einwandfrei (soweit ich bisher testen konnte). Vorher gabs da Falsche Werte oder Assembler-Fehler. Nur weiter so. ;)

Was kann man sich eigentlich unter "ImageButtonGadget() now supports skinning and bitmap/icon live switching " vorstellen? Was genau ist dieses skinning oder Bitmap/Icon live switching?


Vorschlag für ein weiteres Gadget: Diese Umschaltbutton welche man aus Excel kennt, unten bei der Statusleiste. Sieht wie folgt aus:
Bild

Hat in etwa die Funktion eines PanelGadgets, nur dass es eine Art ScrollAreaGadget in mehrere Seiten unterteilt unter denen man hin und her schalten kann. Also eine Art Fenster mit eingerücktem Rahmen würd ich das nennen. Das wäre schön wenn es sowas irgendwann in der Zukunft auch für PureBasic geben könnte. :D
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

Sunny hat geschrieben:Das wäre schön wenn es sowas irgendwann in der Zukunft
auch für PureBasic geben könnte. :D
Richtig ausgedrückt - "für PureBasic", nicht "für PB/Windows only". ;)


Gibt es jetzt für Fenster nur ein LeftDoubleClick-Event, oder
auch LeftClick, RightClick, RightDoubleClick, Focus und LostFocus?

Ich habe ja die Befürchtung das hier wieder nur halbe Sachen
gemacht werden um das System endgültig undurchschaubar zu
machen und die Platformunabhängigkeit bald ganz aufzugeben -
das Event-System passt ja jetzt schon vorn und hinten nicht.

Mal noch ein paar Jahre beobachten ob sich da noch was tut... :)


BTW: Ein Control was etwas anders ist, aber auch sehr oft
benutzt wird (die Leiste ganz unten):
Bild
Sieht man in vielen Editoren, hier bei SlickEdit 9 auf Linux (Bild).
Achja, solche ToolWindows sind natürlich auch immer
dockable... auf Win + Linux ;)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Beitrag von NicTheQuick »

Das mit dem geänderten [c]DeleteElement()[/c] stört mich jetzt ja ein bisschen. Da werden sicherlich einige Codes von mir nicht mehr korrekt laufen, da sie bei manchen Löschroutinen auf diese Art und Weise wie [c]DeleteElement()[/c] funktioniert aufgebaut hatten.
Aber wie ich das jetzt gelesen habe kann man per Flag auch diese alte Weise wie [c]DeleteElement()[/c] arbeiten verwenden. Ist das richtig?
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

NicTheQuick hat geschrieben:Das mit dem geänderten [c]DeleteElement()[/c] stört mich jetzt ja ein bisschen.
Warte erstmal ab, da gibt es in der PB 3.92b1 schon wieder
einen Bug - von Fred bestätigt (engl. Forum).
Wenn er sich dann überlegt hat wie er es nun richtig macht, dann
wirst Du sehen ob es noch passt...
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

Danilo hat geschrieben:Wenn er sich dann überlegt hat wie er es nun richtig macht, dann
wirst Du sehen ob es noch passt...
Danilo ist böööse :roll: :wink: :wink:

Wenn ich das richtig verstehe, weiß Fred hier sehr wohl, was er will
und hat nur dummerweise vergessen, den ListIndex bei DeleteElement()
ordentlich zu verändern, was er jetzt geschwind fixen will.
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
MARTIN
Beiträge: 454
Registriert: 08.09.2004 14:03
Wohnort: Kiel

Beitrag von MARTIN »

Platformunabhängigkeit bald ganz aufzugeben
Windows- und Linux- Versionen trennt eine Kluft. Platformunabhängigkeit ist wirklich sehr begrenzt vorhanden, man müsste eigentlich der Linux-Version ganz andere Nummer, vielleich so 3.0.
Die Tatsache dass man so vielles in PB mit Windows-API mit bewerksteligt,ist auch nicht wirklich fördernd für die Platformunabhängigkeit.
Amilo 1667|Suse Linux 10.1_64bit/WinXP |PB 4.00/3.94
freak
PureBasic Team
Beiträge: 766
Registriert: 29.08.2004 00:20
Wohnort: Stuttgart

Beitrag von freak »

Zu DeleteElement():

Einfach "DeleteElement(MyList(), 1) machen und man hat das alte Verhalten.
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

Die Tatsache dass man so vielles in PB mit Windows-API mit bewerksteligt,ist auch nicht wirklich fördernd für die Platformunabhängigkeit.
Ist es nicht so, dass alles irgendwo per API geregelt ist? Nur eben unter Windows ist es logischer Weise die WinAPI, unter Linux dann die dort zuständige API. Die Portier-Fähigkeit von PB kommt ja daher, dass gleiche Befehle unter den verschiedenen OS eine andere API verwendet und somit portierbar bleibt.
Benutzeravatar
downi
Beiträge: 30
Registriert: 30.08.2004 19:18
Wohnort: Lübeck

Beitrag von downi »

Sunny hat geschrieben:
Die Tatsache dass man so vielles in PB mit Windows-API mit bewerksteligt,ist auch nicht wirklich fördernd für die Platformunabhängigkeit.
Ist es nicht so, dass alles irgendwo per API geregelt ist? Nur eben unter Windows ist es logischer Weise die WinAPI, unter Linux dann die dort zuständige API. Die Portier-Fähigkeit von PB kommt ja daher, dass gleiche Befehle unter den verschiedenen OS eine andere API verwendet und somit portierbar bleibt.
Ups, wieso ist die WinAPI unter Windows logisch?

Es gibt auch Qt, GTK, TK/TCL, Java Api's, wxWidgets, Motif, fltk, etc. pp.

Viele für Windows, aber auch viele zusätzlich für Mac und XWindows bzw. Posix-konforme Systeme.

Ich finde die WinAPI unter Windowas nicht logisch. Und noch weniger logisch finde ich, daß PB soviel davon nutzt. Es erschwert tatsächlich die Portierung auf andere Systeme. Bestes Beispiel: Webgadget! Na vielleicht nimmt man ja bald die Gecko Engine, dann kann man auch plattformunabhängig ein Webgadget einbauen

8)
Antworten