tech:notes_gambas
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tech:notes_gambas [2025/04/26 11:10] – Jean-Baptiste | tech:notes_gambas [2026/06/30 21:27] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Notes Gambas | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | Voir aussi : | ||
| + | * [[Notes Lazarus|Lazarus]] | ||
| + | * https:// | ||
| + | * [RAD Basic](https:// | ||
| + | * [Visual_Basic](https:// | ||
| + | * [Visual_Basic_.NET](https:// | ||
| + | * https:// | ||
| + | * [Rapid application development (RAD)](https:// | ||
| + | * Programmation orientée objets | ||
| + | * [Programmation événementielles](https:// | ||
| + | * [Programmation visuelle](https:// | ||
| + | * ResEdit / ResHack | ||
| + | |||
| + | |||
| + | Différences avec Visual Basic : http:// | ||
| + | |||
| + | Tutos | ||
| + | |||
| + | Demo rapide : | ||
| + | * [Gambas 3 Tutorial 1 : To Make Simple Calculator](https:// | ||
| + | * https:// | ||
| + | |||
| + | Visual Programming using Gambas in Linux | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 1](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 2](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 3](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 4](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.0](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.1](https:// | ||
| + | * [Visual Programming using Gambas in Linux Tutorial - Video 5.2](https:// | ||
| + | * [Visual Programming using Gambas in Linux Tutorial - Video 5.3](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.4 (Resize)](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.5](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.6 - PREVIEW](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.6 (PART 1)](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.6 (PART 2)](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.6 (PART 3)](https:// | ||
| + | * [Visual Programming using Gambas in Linux - Tutorial 5.6 (PART 4)](https:// | ||
| + | |||
| + | CURSO GAMBAS LINUX : | ||
| + | * https:// | ||
| + | |||
| + | Gambas report short demo / tutorial | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | ## Notions | ||
| + | |||
| + | * Classes | ||
| + | * Objects | ||
| + | * Properties | ||
| + | * Methods | ||
| + | * Controls | ||
| + | * Containers | ||
| + | * Code | ||
| + | * Events | ||
| + | * Procedural | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ## Configuration | ||
| + | |||
| + | Tools - Preferences - Highlighting theme : | ||
| + | |||
| + | * ~~Amber~~ | ||
| + | * Blue | ||
| + | * Obsidienne | ||
| + | * Pastel | ||
| + | * Zen | ||
| + | |||
| + | Pour forcer une lib graphique particulière | ||
| + | ~~~bash | ||
| + | # | ||
| + | GB_GUI=gb.qt5 gambas3 | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ## Compilation et autres | ||
| + | |||
| + | ### Execution | ||
| + | |||
| + | Pour pouvoir exécuter le code Gambas, seul le Runtime (et quelques autres composants) sont nécessaires. Le Runtime est ici : \ | ||
| + | `/ | ||
| + | |||
| + | Pour lancer un programme Gambas il suffit de lancer gbx3 en étant à la racine du projet | ||
| + | |||
| + | ### Compilation et création d'un fichier exécutable | ||
| + | |||
| + | Pour compiler en ligne de commande un projet Gambas vous pouvez utiliser gbc3 | ||
| + | |||
| + | Exemple | ||
| + | ~~~bash | ||
| + | gbc3 -a | ||
| + | ~~~ | ||
| + | |||
| + | Une archive correspond à un exe presque autonome (le Runtine est tout de même nécessaire) \\ | ||
| + | Pour créer une archive Gambas il suffit de lancer la commande `gba3` en étant à la racine du projet. | ||
| + | Un fichier .gambas est crée. C'est du bytecode avec le shebang `/ | ||
| + | |||
| + | ## Scripting | ||
| + | |||
| + | Voir : | ||
| + | * http:// | ||
| + | |||
| + | Il est possible de scripter en langage Gambas | ||
| + | |||
| + | Exemple | ||
| + | |||
| + | `hello.gbs` | ||
| + | ~~~vb | ||
| + | # | ||
| + | Public Sub Main() | ||
| + | Print "Hello Wolrd" | ||
| + | End | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | chmod +x hello.gbs | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | gbs3 -c -S -w hello_world.gbs | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Le langage Gambas | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | |||
| + | ### Les commentaires et autres | ||
| + | |||
| + | Pour commenter il suffit de procéder le commentaire du caractère apostrophe "'" | ||
| + | |||
| + | |||
| + | Le multiligne s' | ||
| + | |||
| + | |||
| + | |||
| + | ### Les class | ||
| + | |||
| + | Startup class | ||
| + | Each project must have a startup class. This startup class must define a static public method named **Main** with no arguments. | ||
| + | |||
| + | |||
| + | #### Creating a class | ||
| + | |||
| + | From the Integrated Development Environment file, create a class file rhubarbstructure.class as follows: | ||
| + | ~~~vb | ||
| + | PUBLIC foo AS STRING PUBLIC bar AS INTEGER | ||
| + | ~~~ | ||
| + | |||
| + | It is now possible to define a variable utilizing that class, by creating an appropriate definition in the code module as follows: | ||
| + | ~~~vb | ||
| + | DIM rhubarb AS rhubarbstructure | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Les variables | ||
| + | |||
| + | Voir : | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | In Gambas it is necessary to declare every variable. To dimension a variable, the code is: | ||
| + | ~~~vb | ||
| + | Dim variablename as type | ||
| + | ~~~ | ||
| + | |||
| + | You can just skip the word Dim , so the following is also correct: | ||
| + | ~~~vb | ||
| + | variablename as type | ||
| + | ~~~ | ||
| + | |||
| + | Remplacer `Dim` par `Static` pour que la variable ne soit pas détruite à la sortie de la procédure / fonction mais seulement à la fermeture de l' | ||
| + | |||
| + | Gambas also supports the **+=** and **-=** shorthand | ||
| + | |||
| + | Pour le type **Variant** voir l' | ||
| + | |||
| + | #### Les tableaux | ||
| + | |||
| + | Les tableaux peuvent avoir plusieurs dimension (60 !?) | ||
| + | |||
| + | ~~~vb | ||
| + | Dim Tab(15,5) | ||
| + | Tab(1,2) = 10 | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Création de structure (Struct) | ||
| + | |||
| + | ~~~vb | ||
| + | PUBLIC STRUCT Article | ||
| + | Ref AS STRING | ||
| + | Designation AS STRING | ||
| + | Prix AS INTEGER | ||
| + | Poids AS INTEGER | ||
| + | END STRUCT | ||
| + | ~~~ | ||
| + | |||
| + | Utilisation | ||
| + | ~~~vb | ||
| + | Dim ArticleAchete As Article | ||
| + | Dim ArticleVendu As Article | ||
| + | |||
| + | Articlechete.Poids = 10 | ||
| + | ArticleVendu = ArticleAchete | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ? Existe t-il un ORM pour faire le mapping entre l' | ||
| + | |||
| + | #### Variables glocales | ||
| + | |||
| + | Il n'y a pas de variables globales en Gambas | ||
| + | |||
| + | Un contournement et de les mettre dans le module Main et de les déclarer comme `Public` | ||
| + | |||
| + | Si vous n'avez pas de module Main dans votre projet mais un Main form, vous pouvez les déclarer as Static Public. | ||
| + | |||
| + | Pour accèder à ces variables vous devez utiliser le nom du module ou du formulaire `Main`. | ||
| + | ~~~vb | ||
| + | MyMainModule.MyGlobalVariable or MyMainForm.MyGlobalVariable | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | ### Les boucles | ||
| + | |||
| + | Exemple | ||
| + | ~~~vb | ||
| + | Sub Option1_Click () | ||
| + | Dim i | ||
| + | For i = 1 To 10 | ||
| + | Beep | ||
| + | Next | ||
| + | End Sub | ||
| + | ~~~ | ||
| + | |||
| + | ### Les chaînes de caractères | ||
| + | |||
| + | String concatenation operator : " | ||
| + | |||
| + | Path concatenation with " | ||
| + | This operator deals with trailing slashes | ||
| + | |||
| + | Examples | ||
| + | ~~~vb | ||
| + | Print "/ | ||
| + | Print "/ | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Les fichiers | ||
| + | |||
| + | Voir : | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | Ouvrir un fichier | ||
| + | ~~~vb | ||
| + | Dim handle As File | ||
| + | handle = Open " | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Traduction | ||
| + | |||
| + | Translate | ||
| + | ~~~vb | ||
| + | Print (" | ||
| + | Print "But do not translate me!" | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Substitution | ||
| + | |||
| + | Substitution avec Subst | ||
| + | ~~~vb | ||
| + | Print Subst((" | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Les procédures / fonctions | ||
| + | |||
| + | |||
| + | Voir : | ||
| + | * http:// | ||
| + | |||
| + | |||
| + | Exemple de syntaxe d'une fonction qui additionne deux nombres | ||
| + | |||
| + | Fonction | ||
| + | ~~~vb | ||
| + | Function Fonc1(Param1 As Float, Param2 As Float) As Float | ||
| + | Dim Ret As Float | ||
| + | Ret = Param1 + Param2 | ||
| + | Return Ret | ||
| + | End Function | ||
| + | ~~~ | ||
| + | |||
| + | Appel de la fonction | ||
| + | ~~~vb | ||
| + | Print (Fonc1(2, 3)) | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | |||
| + | ## Autres | ||
| + | |||
| + | Dépendances du projet | ||
| + | ~~~ | ||
| + | $ dpkg -S $(strace --trace=%file -f ./ | ||
| + | gambas3-runtime: | ||
| + | gambas3-gb-form: | ||
| + | gambas3-runtime: | ||
| + | gambas3-gb-gtk3: | ||
| + | gambas3-gb-gtk3-x11: | ||
| + | gambas3-runtime: | ||
| + | gambas3-gb-gui: | ||
| + | gambas3-gb-image: | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Questions / Réflexions | ||
| + | |||
| + | Comment faire pour : | ||
| + | * Accéder simplement à une API Rest | ||
| + | * Gérer le Multithreading | ||
| + | * Génerer une appli Gambas autonome avec toutes les dépendances inclus (DLL, runtime, comme avec VB msvbvm60.dll) | ||
| + | * Chiffrer simplement un mot de passe (Vault) ? | ||
| + | * Créer dynamiquement des " | ||
| + | * You can create controls and menu dynamically, | ||
| + | * " | ||
| + | * Faire appel à du code écrit dans un autre langage (mais dans un autre langage compiler tel que Go) peut-être via les IPC, les sockets, via API Rest Microservices | ||
| + | * Forcer un backend graphique (Si GTK et QT sont tous les deux installés) ? | ||
| + | * Porter un code Python simple en Gambas | ||
| + | * Créer des tableaux nommés / dictionnaires | ||
| + | |||
| + | Questions : | ||
| + | * Il n'y a pas de Current Directory dans Gambas. Comment faire ? | ||
| + | * Existe-il une technique similaire à ResHack ? | ||
| + | * Quel est le langage le plus ressemblant syntaxiquement à Gambas pour avoir la coloration syntaxique avec d' | ||
| + | * Existe-il des linter et formateur (tel que **black** ou **flake8** sous Python ou encore à `go fmt` sous Go) | ||
| + | * Pourquoi n'y a t-il pas de Package Manager avec des dépôts de libs et frameworks en ligne? | ||
| + | * Ne serait-il pas souhaitable d' | ||
| + | * Que manque t-il pour le portage des applis gérées sur ARM Android ? | ||
| + | * Pourquoi VB a disparu ? (ou a t-il été remplacé par VB .NET ?) | ||
| + | * Existe t-il un ORM pour faire le mapping entre l' | ||
| + | |||
| + | |||
| + | |||
| + | Limitation : | ||
| + | * La commande **Shell** n'est pas capable de récupérer la STDERR !? | ||
| + | * Voir les instructions SHELL, EXEC et la class Process | ||
| + | * Ils n'y a pas d' | ||
| + | |||
| + | Notes marketing : | ||
| + | * Mettre en avant la simplicité d' | ||
| + | * Mettre en avant les améliorations par rapport à VB | ||
| + | * Support commercial ? | ||
| + | * Renommer ou insister sur programmation événementiel / objet. Car le mot " | ||
| + | * Crossfounding ? | ||
| + | * Mettre en avant la capacité à générer facilement des paquets Debian, RedHat, Archinux, Slackware, Autotools, Opensuze... | ||
| + | * Mettre à jours car beaucoup de liens morts concernant des vieux projets | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
