Share your opinion
WIDGETS GAMBAS
GAMBAS 3 SOFTWARES
TUTORIALS
Library
|
Lessons - Lesson 3
Sorry, french lesson only...
COURS 3 : Un BLOC NOTE EN GB pour notre 3eme cours'ou 4eme, je ne sais plus !!! ) nous allons réaliser un petit éditeur de texte en GAMBAS (que nous nommerons GB par la suite) ouvrez gb et creons un projet graphique Qt ou GTK. maintenant double cliquez sur Fmain pour faire apparaitre la fenetre double cliquez sur lafenetre fmain pour ouvrir le code 1ERE PARTIE REALISATION DE L'interface dans la fonction fmain_open() mettez : me.center cela centrera la fenetre au lileu de l'ecran quand nous lancerons notre appli revenez maintenant par l'onglet Fmain sur la fenetre clic droit au milieu et : editeur de menu cliquez maintenant sur inserer nous allons inserer les menus classiques a savoir: fichier, quitter edition, coller,copier,couper Aide, apropos de... les noms resteront Menu1,Menu2 etc..., et les captions (etiquettes ) seront fichier, edition, coller... inserez menu1 avec caption fichier inserez menu2 (un sous menu) caption Quitter pour faire un sous menu cliquez sur la fleche vers la droite inserez menu3 caption Edition (menu prinicpal) pour faire un menu principal cliquez sur la fleche vers la gauche inserez sous menu menu4 caption copier inserez menu5 caption couper inserez menu6 caption coller inserez menu7 caption aide en menu principal inserez menu8 caption "a propos de..." la gestion du texte va se faire par une Textarea posez en une sur le Fmain.form n'importe ou et de la taille que vous voulez Remarque : il semblerait qu'il y ait une difference entre gtk et qt pour la gestion des coordonnées de l'interface. les coordonnées ne reagissent pas de la meme maniere, C'est pour cette raison que j'ai pris pour habitude de mettre la mise ne forme de mes widgets dans le code. je met en forme mon code par la fonction resize cliquez droit sur fmain.form evenement, resize, ajoutez maintenant ce code : TextArea1.X = 0 TextArea1.y = 0 TextArea1.Width = ME.Width TextArea1.Height = ME.Height cela etant, executez votre application et admirez le résultat essayez meme de redimensionner la fenetre que se passe t il ? fenetre = textearea maintenant arretez votre appli, nous allons nous concentrer sur le menu dans la fenetre fmain.form cliquez sur fichier puis sur quitter, le code du menu2 s'ouvre PUBLIC SUB Menu2_Click() par le menu quitter nous allons quitter l'application par la commande .........? Quit eh bien NON ! Fmain qu'elle doit se fermer par : Me.close ce qui donne : PUBLIC SUB Menu2_Click() ME.close END Maintenant je vais m'occuper du menu "a propos de..." retournez dans fmain.form, cliquez sur aide puis a propos de ... saisissez ceci : PUBLIC SUB Menu8_Click() Message.Info("petit blocnote en gambas") END vous l'aurez deviné il s'agit d'une fenetre de message, avec un bouton ok, pour informer l'utilisateur maintenant nous allons nous occuper de la gestion du texte proprement dit, l'appli lancé, l'utilisateur saisi du texte et il veut copier.. il selectionne son texte avec la souris puis clique sur le menu edition puis copier. Nous allons donc inserer dans le menu edition ,copier le code suivant : PUBLIC SUB Menu4_Click() TextArea1.Copy END dans le menu couper on met: TextArea1.Cut et dans coller : TexteArea.Paste ce qui nous donne comme code : PUBLIC SUB Menu5_Click() TextArea1.Cut END PUBLIC SUB Menu6_Click() TextArea1.Paste END voila pour la textarea, mais il manque un truc important a notre blocnote : ouvrir ,modifier des fichiers. retournons dans l'editeur de menu, et ajoutons apres fichier, plutot entre fichier et quitter, le menu caption ouvrir, le menu enregistrer, le menu enregsitrer sous... Maintenant cliquez sur fichier enregistrer pour ouvrir le code. Lorsque l'utilisateur cliquera sur fichier ouvrir, il verra une boite de dialogue pour choisir le fichier. entrez ce code : DIM $sPath AS String 'ouverture fenetre dialogue pour image Dialog.Path = $sPath IF Dialog.OpenFile() THEN RETURN $sPath = Dialog.Path excutez votre appli et ouvrez un fichier, une boite de dialogue s'ouvre.Et pourtant rien dans la textarea. Il faut lier spath et textarea. $sPath est une chaine de caratere qui a recu le nom complet du fichier avec l'arborecence avec l'extention aussi, maintenant il suffit d'ouvrir le fichier avec la l'instruction OPEN, de lire ligne par ligne et d'inserer le contenu dans la texxtarea par textarea1.insert. Ajoutez ce code : DIM monfichier AS File DIM maligne AS String dans la fonction menu9, puis avant END mettez : monfichier = OPEN $sPath FOR INPUT WHILE NOT Eof(monfichier) LINE INPUT #monfichier, maligne TextArea1.Insert(maligne) WEND explication de cette fonction : while not tant que le fichier n'est pas EOF (fini) lit la ligne n+1 et sotcke dans maligne ensuite insere dans la textarea et reboucle par wend executez votre code et il y a un gros probleme, il ajoute sur la meme ligne... retounez dans fmain.form et passez la propriété wrap a TRUE . maintenant nous allons enregistrer notre fichier modifié REMARQUE : lorsqu'on ouvre un nouveau fichier, il faut d'abord effacer l'interieur de la textarea par textarea1.clear ensuite on ouvre le fichier puis a la fin de l'ouverture, on raffraichi la textarea par textarea.refresh maintenant le menu enregistrer : il suffit de reprendre la variable $sPath $sPath n'est valable que dans la fonction Menu9_Click() en fait soit nous la sortons de la fonction menu9, soit nous en creons une autre en public pour les cours d'avant si on sort une variable d'une fonction, le DIM devient PUBLIC donc enlevons DIM $sPath AS String de menu9_click() et ecrivons tout en haut avant PUBLIC SUB _new() Private $sPath AS String maintenant dans le menu enregistrer soit PUBLIC SUB Menu10_Click() entrons ce code : DIM monfichier AS File monfichier = OPEN $sPath FOR CREATE PRINT #monfichier, TextArea1.Text on ouvre le fichier avec nom sPath pour le creer sinon ecraser celui qui existe, puis on imprime dedans le contenu texte de textarea ASTUCE : en GB, difference avec VB, on a ps besoin de ferner le fichier par CLOSE maintenant on s'occupe de enregistrer sous... la doc gb nous met meme un petit exemple a ce sujet : Dialog.Filter = ["*.txt", "Text Files"] IF Dialog.SaveFile() THEN RETURN File.Save(Dialog.Path, TextAreaEdit.Text) voici donc le code pour le menu enregistrer sous : PUBLIC SUB Menu11_Click() Dialog.Filter = ["*.txt", "Text Files"] IF Dialog.SaveFile() THEN RETURN File.Save(Dialog.Path, TextArea1.Text) END notre blocnote est vraiment bien il lu manque encore un petit truc pour etre une vrai application pro, la commande REMPLACER bien sur ! editons notre menu et ajoutons la commande remplacer apres coller, remplacer du texte dans un textearea ? gb nous offre un panel d'instruction impressionnant et une simple commande REPLACE fera l'affaire on copie la chaine a remplacer dans le presse papier, par un textarea.copy. mais avant il faut creer un autre formulaire avec deux texbox et deux bouton OK et annuler clic droit sur formulaire puis creer un formulaire, nommez le fremplace n'oubliez pas le PUBLIC SUB Form_Open() ME.Center END puis dans le clic du bouton annuler evrivez me.close, dans le clic du bouton ok idem. comment passer le texte copié de ma textarea a la textbox1 nous allons creer une fonction bidon dans le form fremplace avec un parametre string exemple : public sub jerecoiletexte(marecherche as string) end c'est une fonction associée a aucun widget qui a un parametre(ou variable locale) de type string allez y ecrivez ce code : PUBLIC SUB jerecoiletexte(marecherche AS String) TextBox1.Text = marecherche END maintenant que j'ai traité la réception de ma chaine, je vais m'occuper de l'envoi je retourne dans fmain.form dans le menu remplacer et dans le code je vais envoyer ma chaine avec ceci : PUBLIC SUB Menu12_Click() DIM machaine AS String machaine = TextArea1.Copy fremplace.jerecoiletexte(machaine) END mais la si tu executes le code il y a une enorme erreur machaine = textarea.copy est faux car on stocke une fonction dans une chaine bien sur dans Menu12_Click() il faut avant le END afficher notre fenetre fremplace par : fremplace.Show puis : machaine = TextArea1.Selection.Text textarea1.insert mais comme on ne peut pas faire une insertion directement dans la fmain.textarea, il faut donc passer par une nouvelle fonction bidon dans fmain genre : public sub jeremplace(nouveautexte as string) end voila pour cette fin un peu rapide, mais si vous voulez compléter ou améliorer ce bloc note, vous pouvez télécharger les sources ICI : Bonne semaine à tous. Creation date : 27/06/2009 @ 22:27 Reactions to this article
| QUICK MENU
SEARCH
LANGUAGE
COMPONENTS
Other
LANGUAGE
Where, who?
VISITS
visitors visitor online ARCHIVES GAMBAS 1/2
|