Page loading

Share your opinion
What do you think about gambaslinux.fr?
 
Interesting
It miss some informations
Excellent website
Results
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 !!! eek ) 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
Last update : 01/07/2009 @ 20:17
Category : Lessons
Page read 4389 times


Print the article Print the article


react.gifReactions to this article


Reaction #2 

by spheris5 01/07/2009 @ 20:19

Ca y est ! maintenant le lien fonctionne.wink

Reaction #1 

by Popaul 01/07/2009 @ 15:02

Bonjour..!
Ca m' intéresse..Je voulais télécharger la source..mais rien.. le lien ne me donne rien.
A+

QUICK MENU
SEARCH




LANGUAGE
COMPONENTS
Other
LANGUAGE
Where, who?
VISITS

   visitors

   visitors online

ARCHIVES GAMBAS 1/2
^ Top ^