Seite 1 von 1

Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 24.02.2014 17:32
von hoerbie
Hallo,

ich komme ganz prima voran mit dem Einfinden in Purebasic, stolpere aber leider immer wieder über meiner Meinung nach Lücken in der (deutschen) PB-Doku/-Hilfe. In den meisten mir bekannten Entwicklungssystemen ist z.B. bei jeder Funktion, die einen Wert zurückliefert, klar dokumentiert, welchen Typ der Rückgabewert hat (Word, Long etc.), bzw. auch wenn man Werte an Funktionen übergibt, welchen Typ der Wert haben darf.

Da ich natürlich im Sinne eines ordentlichen Programms mit EnableExplicit arbeite, stellt sich mir aber nun oft die Frage, was für einen Typ gibt mir Purebasic da eigentlich zurück, bzw. was für einen Typ kann Purebasic da von mir verarbeiten?

Beispielsweise würden mich fürs Zwischenspeichern in Variablen die Funktionen EventGadget, EventMenu, EventTimer, EventType oder EventWindow, WaitWindowEvent, oder auch banale Funktionen wie GetFileAttributes interessieren.

Genauso dann die Frage, welche Werte darf ich denn beispielsweise bei OpenWindow für das #Window oder beim Anlegen eines Gadgets für das #Gadget verwenden, ohne mir irgendwelche Probleme einzuhandeln usw. usf.?

Und noch ein Thema, direkt zu Windows und Gadgets: Ich kenne es vom bisher viel benutzten GFA so, daß ich in jedem Fenster/Dialog die dortigen Controls (Gadgets) unter denselben Nummern anlegen kann, und ich dann in meiner Event-Behandlung zunächst schaue, zu welchem Fenster/Dialog die Message gehört, und dann in der jeweiligen Dialog-Behandlung erst die einzelnen Controls (Gadgets) behandle. Z.B. habe ich in GFA den OK-Button immer auf der #Gadget Nr 150 oder so. Ebenso habe ich in einem größeren Programm, weil GFA nur 31 verschiedene Dialognummern konnte, mit einer zusätzlichen Variable unterschieden, welcher Dialog Nr. 11 gerade offen ist, weil ich diese Nummern mehrfach (aber natürlich nicht gleichzeitig) genutzt habe.
Geht das in PB genauso? Irgendwo hier im Forum hab ich Beispiele gefunden, wo für die Gadgets wohl immer andere Nummern benutzt werden sollen?

Ebenso habe ich bisher leider keine Liste gefunden, welche #PB_* Konstanten welchen Zahlenwert haben, wie das z.B. bei der WinApi für die ganzen WM_* existiert.

Fragen über Fragen, deren Antworten mir hoffentlich beim Erkennen einiger nun auftretender Probleme helfen, daher vielen Dank im Voraus.

Gruß, Hoerbie

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 24.02.2014 18:47
von Andreas21
hoerbie hat geschrieben:Ebenso habe ich bisher leider keine Liste gefunden, welche #PB_* Konstanten welchen Zahlenwert haben, wie das z.B. bei der WinApi für die ganzen WM_* existiert.
Geh oben in PB auf Werkzeuge->Strukturverzeichnis und da auf Konstanten.
Dort findest du sie unter P. z.b. #PB_Entity_SphereBody = 3

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 24.02.2014 19:03
von NicTheQuick
hoerbie hat geschrieben:Und noch ein Thema, direkt zu Windows und Gadgets: Ich kenne es vom bisher viel benutzten GFA so, daß ich in jedem Fenster/Dialog die dortigen Controls (Gadgets) unter denselben Nummern anlegen kann, und ich dann in meiner Event-Behandlung zunächst schaue, zu welchem Fenster/Dialog die Message gehört, und dann in der jeweiligen Dialog-Behandlung erst die einzelnen Controls (Gadgets) behandle. Z.B. habe ich in GFA den OK-Button immer auf der #Gadget Nr 150 oder so. Ebenso habe ich in einem größeren Programm, weil GFA nur 31 verschiedene Dialognummern konnte, mit einer zusätzlichen Variable unterschieden, welcher Dialog Nr. 11 gerade offen ist, weil ich diese Nummern mehrfach (aber natürlich nicht gleichzeitig) genutzt habe.
Geht das in PB genauso? Irgendwo hier im Forum hab ich Beispiele gefunden, wo für die Gadgets wohl immer andere Nummern benutzt werden sollen?
PB-Hilfe hat geschrieben:PureBasic Objekte

I. Indexierte Nummerierung
Der statische bzw. indexierte Weg ermöglicht Ihnen, auf ein Objekt durch einen vordefinierten numerischen Wert zu verweisen. Die erste verfügbare Index-Zahl ist 0, weitere Indizes werden anschließend fortlaufend (sequentiell) zugeordnet. Dies bedeutet, wenn Sie die Index-Nummer 0 und dann die Nummer 1000 verwenden, werden 1001 Indizes reserviert und 999 (von 1 bis 999) bleiben unbenutzt, welches keine effiziente Art und Weise zur Benutzung von indexierten Objekten darstellt. Wenn Sie eine flexiblere Methode brauchen, verwenden Sie die dynamische Art zum Zuordnen von Objekten, wie im Abschnitt II. beschrieben.
PB-Hilfe hat geschrieben:Handles und Nummern
Die Zahlen, die man Objekten zuweist, müssen keine Konstanten sein, sie müssen aber für jedes Objekt einmalig sein. (Ein Bild kann z.B. aber die gleiche Zahl wie ein Gadget haben, weil dies ja unterschiedliche Dinge sind.) Diese Nummern werden benötigt, um die Objekte später im Programm anzusprechen.
hoerbie hat geschrieben:Ebenso habe ich bisher leider keine Liste gefunden, welche #PB_* Konstanten welchen Zahlenwert haben, wie das z.B. bei der WinApi für die ganzen WM_* existiert.
Was willst du mit dieser Liste denn erreichen? Ich hoffe du willst nicht damit anfangen Zahlenwerte statt Konstanten zu verwenden.
hoerbie hat geschrieben:Da ich natürlich im Sinne eines ordentlichen Programms mit EnableExplicit arbeite, stellt sich mir aber nun oft die Frage, was für einen Typ gibt mir Purebasic da eigentlich zurück, bzw. was für einen Typ kann Purebasic da von mir verarbeiten?
Grundsätzlich gilt als Standardtyp "Integer", also ".i". Alles andere wird notfalls angegeben.
Weitere häufig genutzte Typen sind natürlich "String (.s)", "Quad (.q)", "Character (.c)", "Float (.f)" und "Double (.d)". Alle anderen Typen haben meistens nur Sinn in bestimmten Strukturen. Wenn man Ganzzahlen nutzen möchte, die nicht größer als 2³¹ -1 werden, dann nutzte man Integer. Für größere nimmt man Quad. Integer wird bevorzugt, weil das die Größe eines CPU-Registers ist und die CPU damit am schnellsten rechnen kann.

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 25.02.2014 10:50
von hoerbie
Hallo!

@Andreas21: Danke für den Tip, da hab ich echt noch nicht gesucht.
NicTheQuick / PB-Hilfe hat geschrieben: PureBasic Objekte
I. Indexierte Nummerierung
Der statische bzw. indexierte Weg ermöglicht Ihnen, auf ein Objekt durch einen vordefinierten numerischen Wert zu verweisen. Die erste verfügbare Index-Zahl ist 0, weitere Indizes werden anschließend fortlaufend (sequentiell) zugeordnet. Dies bedeutet, wenn Sie die Index-Nummer 0 und dann die Nummer 1000 verwenden, werden 1001 Indizes reserviert und 999 (von 1 bis 999) bleiben unbenutzt, welches keine effiziente Art und Weise zur Benutzung von indexierten Objekten darstellt. Wenn Sie eine flexiblere Methode brauchen, verwenden Sie die dynamische Art zum Zuordnen von Objekten, wie im Abschnitt II. beschrieben.
Handles und Nummern
Die Zahlen, die man Objekten zuweist, müssen keine Konstanten sein, sie müssen aber für jedes Objekt einmalig sein. (Ein Bild kann z.B. aber die gleiche Zahl wie ein Gadget haben, weil dies ja unterschiedliche Dinge sind.) Diese Nummern werden benötigt, um die Objekte später im Programm anzusprechen.
Danke, das hab ich in der Hilfedatei nicht gefunden. Das heißt also je Gadget, egal in welchem Window, eine eigene Nummer. Na toll, das macht dann aber reichlich Mehrarbeit bei der Portierung und den Quelltext nicht gerade übersichtlicher. Da hätte ich mehr erwartet von einer Hochsprache, zumal PB intern doch wohl eh die eindeutigen Nummern des jeweiligen Betriebssystems nutzen wird, naja, mal ein Punkt wo GFA in den 90ern schon weiter war...
NicTheQuick hat geschrieben:Was willst du mit dieser Liste denn erreichen? Ich hoffe du willst nicht damit anfangen Zahlenwerte statt Konstanten zu verwenden.
Um Gottes Willen, bloß nicht, der Sinn der Konstanten erschließt sich mir da voll! Ich fragte nach der Liste, weil ich verstehen will, was mir PB da alles so an Events schickt. Diesbezüglich ist auch der Hinweis von Andreas21 leider nur bedingt brauchbar, da ich unter Werkzeuge offensichtlich nicht nach den Zahlenwerten suchen kann. Und eine Umkehrfunktion zu den Konstanten seh ich auch nicht, also z.B. GetNameOfPBEventCode(15) -> #PB_Event_Repaint oder sowas.

Denn ich bin z.B. auch sehr überrascht, daß PB mir neben seinen eigenen Events auch die ganzen WM_* von Windows weiterschickt, obwohl die teilweise dasselbe bedeuten. Und bei anderen Events kommt nur eine Message, wo dann #PB und WM_ denselben Wert haben.
NicTheQuick hat geschrieben:Grundsätzlich gilt als Standardtyp "Integer", also ".i". Alles andere wird notfalls angegeben.
Weitere häufig genutzte Typen sind natürlich "String (.s)", "Quad (.q)", "Character (.c)", "Float (.f)" und "Double (.d)". Alle anderen Typen haben meistens nur Sinn in bestimmten Strukturen. Wenn man Ganzzahlen nutzen möchte, die nicht größer als 2³¹ -1 werden, dann nutzte man Integer. Für größere nimmt man Quad. Integer wird bevorzugt, weil das die Größe eines CPU-Registers ist und die CPU damit am schnellsten rechnen kann.
Danke. Das heißt dann ja für mich, wenn ich für die Nummern bei Funktionen, Windows, Gadgets, Bildern, etc. - sofern nix anderes dokumentiert ist - immer den Typ Integer .i nehme, welcher dann ja CPU-abhängig jeweils passend Long oder Quad bedeutet, kann ich nix verkehrt machen.

Gruß, Hoerbie

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 25.02.2014 11:35
von ts-soft
hoerbie hat geschrieben:Da hätte ich mehr erwartet von einer Hochsprache, zumal PB intern doch wohl eh die eindeutigen Nummern des jeweiligen Betriebssystems nutzen wird, naja, mal ein Punkt wo GFA in den 90ern schon weiter war...
oder auch nicht. Kann ja keiner was dafür, wenn Du den Sinn der einheitlichen Objektverwaltung von PB nicht verstehst. Unter anderem, wäre
es nicht möglich, Mithilfe des hWnd aufeinanderfolgende Nummerierung zu erhalten, z.B. For i = #Gadget_Bla to #Gadget_Blub usw.
Nur um ein Beispiel zu erwähnen.

GFA Basic war zu seiner Zeit sicher eine gute Programmiersprache, aber Syntaktisch weder Einheitlich noch Einsteigerfreundlich.
Nur weil Du da mehr Übung hast, heisst es nicht, das die schon weiter waren :mrgreen:

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 25.02.2014 12:32
von NicTheQuick
Ich stehe ja sowieso eher darauf #PB_Any zu nutzen. Damit bekomme ich dynamische IDs zurück, die ich dann je nach Anwendungsgebiet in einfachen Variablen speichere oder in Strukturen oder Listen.

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 25.02.2014 18:25
von hoerbie
Hallo,
NicTheQuick hat geschrieben:Ich stehe ja sowieso eher darauf #PB_Any zu nutzen. Damit bekomme ich dynamische IDs zurück, die ich dann je nach Anwendungsgebiet in einfachen Variablen speichere oder in Strukturen oder Listen.
Das schwebt mir nun auch vor, da kann ich mir mit Strukturen/Arrays/Listen ja wieder sowas bauen, wie ich es gewohnt bin.
ts-soft hat geschrieben:oder auch nicht. Kann ja keiner was dafür, wenn Du den Sinn der einheitlichen Objektverwaltung von PB nicht verstehst. Unter anderem, wäre es nicht möglich, Mithilfe des hWnd aufeinanderfolgende Nummerierung zu erhalten, z.B. For i = #Gadget_Bla to #Gadget_Blub usw. Nur um ein Beispiel zu erwähnen.
Ich sehe ja, daß da ein gewisser Sinn drin steckt, bei fortlaufender Nummerierung alle zusammengehörenden Gadgets in einer For-Schleife behandeln zu können etc. Das konnte ich in GFA mit je Fenster vergebenen Gadget-Nummern aber auch :D
ts-soft hat geschrieben:GFA Basic war zu seiner Zeit sicher eine gute Programmiersprache, aber Syntaktisch weder Einheitlich noch Einsteigerfreundlich. Nur weil Du da mehr Übung hast, heisst es nicht, das die schon weiter waren
Das hat nur bedingt was mit Übung zu tun, sondern auch mit logischer/hierarchischer Ordnung, in GFA gabs halt als Oberkategorie immer das Fenster/den Dialog, und darin dann erst die jeweiligen Gadgets, und diese Zuordnung fehlt in PB anscheinend ja ganz, obwohl ein Gadget ja immer zu einem Fenster gehört. Und es war da halt schon einfacher, wenn man genau wußte, daß in jedem Dialog das Gadget mit der Nr. 150 halt der OK-Button und mit der 151 der Abbruch-Button oder so war.

Naja, Schwamm drüber, dann bau ich mir halt ein paar Verwaltungsstrukturen drumherum.

Gruß, Hoerbie

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 26.02.2014 12:44
von Andesdaf
du kannst dir ja deine Gadget-Konstanten auch so benennen, dass sie diese Hierarchie quasi wiederspiegeln. Also nennst du beispielsweise
das erste Fenster #WIN_MAIN und alle darin enthaltenen Buttons #BUT_MAIN_<Button>. Insgesamt heißen dann alle Konstanten für die
OK-Buttons halt #BUT_<Window>_OK.

Re: Datentypen bei Aufruf oder Rückgabe der PB-Funktionen

Verfasst: 26.02.2014 14:16
von hoerbie
@Andesdaf: Wow, danke für den Tip! Auf die Idee wär ich echt nicht gekommen!
Es kann ja so einfach sein, und ist mit Sicherheit Resourcen-schonender als ein zweidimensionales Array(Fenster,Gadget) oder so.