PureWindow

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

PureWindow

Message par microdevweb »

version beta 1
Make dialog use easier

Hello Guys,

A module for make dialog easier

How install it
  • Install git HERE
  • make a right click on a directory and choice "Git Bash here"
  • In the Git terminal paste this command "git clone https://github.com/microdevweb/PureWindow"
  • Open the subdirectory PureWindow" and run
    "exemple1.pb "
    "exemple2.pb "
    "exemple3.pb "
    "exemple4.pb "
Image

Code : Tout sélectionner

; --------------------------------------------------------------
; PURE_WINDOW
; version 1.0
; EXAMPLE 1
; a simple vertical box 
; --------------------------------------------------------------
XIncludeFile "include/pw/pw.pbi"
Define flags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget
Global.PW::button bt1,bt2,bt3,bt4
Global mainForm.PW::Window = PW::newWindow(0,0,800,600,"Exemple 1",flags)
mainForm\setMinHeight(200)
mainForm\setMinWidth(200)
Global mainLayout.PW::VBox = mainForm\setLayout(PW::newVBox())
Global NewList text.s()




Procedure evButton(*bt.PW::button)
  ChangeCurrentElement(text(),*bt\getData())
  Debug text()
EndProcedure

bt1 = mainLayout\addChild(PW::newButton("Button 1"))
AddElement(text()):text()="I'm the button 1"
bt1\setData(@text())
bt1\bind(@evButton())
bt2 = mainLayout\addChild(PW::newButton("Button 2"))
AddElement(text()):text()="I'm the button 2"
bt2\setData(@text())
bt2\bind(@evButton())
bt3 = mainLayout\addChild(PW::newButton("Button 3"))
AddElement(text()):text()="I'm the button 3"
bt3\setData(@text())
bt3\bind(@evButton())
bt4 = mainLayout\addChild(PW::newButton("Button 4"))
AddElement(text()):text()="I'm the button 4"
bt4\setData(@text())
bt4\bind(@evButton())


PW::Application\run(mainForm)
Image

Code : Tout sélectionner

; --------------------------------------------------------------
; PURE_WINDOW
; version 1.0
; EXAMPLE 2
; a simple horizontal box 
; --------------------------------------------------------------
XIncludeFile "include/pw/pw.pbi"
Define flags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget
Global.PW::button bt1,bt2,bt3,bt4
Global mainForm.PW::Window = PW::newWindow(0,0,800,600,"Exemple 2",flags)
mainForm\setMinHeight(200)
mainForm\setMinWidth(200)
Global mainLayout.PW::HBox = mainForm\setLayout(PW::newHBox())
Global NewList text.s()




Procedure evButton(*bt.PW::button)
  ChangeCurrentElement(text(),*bt\getData())
  Debug text()
EndProcedure

bt1 = mainLayout\addChild(PW::newButton("Button 1"))
AddElement(text()):text()="I'm the button 1"
bt1\setData(@text())
bt1\bind(@evButton())
bt2 = mainLayout\addChild(PW::newButton("Button 2"))
AddElement(text()):text()="I'm the button 2"
bt2\setData(@text())
bt2\bind(@evButton())
bt3 = mainLayout\addChild(PW::newButton("Button 3"))
AddElement(text()):text()="I'm the button 3"
bt3\setData(@text())
bt3\bind(@evButton())
bt4 = mainLayout\addChild(PW::newButton("Button 4"))
AddElement(text()):text()="I'm the button 4"
bt4\setData(@text())
bt4\bind(@evButton())


PW::Application\run(mainForm)
Image

Code : Tout sélectionner

; --------------------------------------------------------------
; PURE_WINDOW
; version 1.0
; EXAMPLE 3 
; a fic customer 
; --------------------------------------------------------------
XIncludeFile "include/pw/pw.pbi"
Define flags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget
Global.PW::button btValide,btCancel
Global.PW::HBox btLayout
Global.PW::VBox fielLayout,mainLayout
Global.PW::stringGadget stFName,stSName,stAddress
Global mainForm.PW::Window = PW::newWindow(0,0,320,20,"Exemple 3",flags)
LoadFont(0,"Arial",11,#PB_Font_HighQuality)

Procedure init()
  SetActiveGadget(stFName\getId())
EndProcedure

SetGadgetFont(#PB_Default,FontID(0))
mainLayout = mainForm\setLayout(PW::newVBox())
mainLayout\setExpand(1) ; expand field layout
fielLayout = mainLayout\addChild(PW::newVBox())
btLayout = mainLayout\addChild(PW::newHBox())
btLayout\setExpand(PW::#EXPAND_NO)
btLayout\setAlign(PW::#ALIGN_RIGHT)
stFName = fielLayout\addChild(PW::newStringGadget())
stFName\setHeight(30)
stFName\setLabel("First name")
stSName = fielLayout\addChild(PW::newStringGadget())
stSName\setHeight(30)
stSName\setLabel("Last name")

stAddress = fielLayout\addChild(PW::newStringGadget())
stAddress\setHeight(30)
stAddress\setLabel("Address")
btValide = btLayout\addChild(PW::newButton("Validate"))
btValide\setWidth(90)
btValide\setHeight(25)
btCancel = btLayout\addChild(PW::newButton("Cancel"))
btCancel\setWidth(90)
btCancel\setHeight(25)

PW::Application\setInitiation(@init())
PW::Application\run(mainForm)
Image

Code : Tout sélectionner

; --------------------------------------------------------------
; PURE_WINDOW
; version 1.0
; EXAMPLE 4 
; a fic customer 
; --------------------------------------------------------------
XIncludeFile "include/pw/pw.pbi"
Define flags = #PB_Window_ScreenCentered|#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget
Global Dim bt.PW::button(12)
Global.PW::GridBox grid
Global mainForm.PW::Window = PW::newWindow(0,0,320,20,"Exemple 4",flags)
grid = mainForm\setLayout(PW::newGridBox(6))
For i = 0 To 11
  bt(i) = grid\addChild(PW::newButton("Button "+Str(i+1)))
  If i = 2
    grid\spanColums(bt(i),3)
  EndIf
  If i = 4
    grid\spanRows(bt(i),2)
  EndIf
Next
PW::Application\run(mainForm)
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
MLD
Messages : 1103
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: PureWindow

Message par MLD »

Heu
J'ai pas bien compris l'intérêt :oops:
C'est une histoire Belge une fois :mrgreen:
Marc56
Messages : 2147
Inscription : sam. 08/févr./2014 15:19

Re: PureWindow

Message par Marc56 »

MLD a écrit :Heu
J'ai pas bien compris l'intérêt :oops:
Pareil, je vois pas l'intérêt non-plus :(
Cela fait avec un module externe ce que fait nativement la lib Dialog
Surtout appeler 'easier' (plus facile) un truc qui complique les choses ?
D'ailleurs l'exemple "Boîte Gridbox" qui illustre OpenXMLDialog() donne la même résultat que l'exemple 4

Code : Tout sélectionner

  #Dialog = 0
  #Xml = 0
  
  XML$ = "<window id='#PB_Any' name='test' text='Gridbox' minwidth='auto' minheight='auto' flags='#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_SizeGadget'>" +
         "    <gridbox columns='6'>" +
         "          <button text='Bouton 1' />" +
         "          <button text='Bouton 2' />" +
         "          <button text='Bouton 3' colspan='3' />" +
         "          <button text='Bouton 4' />" +
         "          <button text='Bouton 5' rowspan='2' />" +
         "          <button text='Bouton 6' />" +
         "          <button text='Bouton 7' />" +
         "          <button text='Bouton 8' />" +
         "          <button text='Bouton 9' />" +
         "          <button text='Bouton 10' />" +
         "          <button text='Bouton 11' />" +
         "          <button text='Bouton 12' />" +
         "    </gridbox>" +
         "  </window>"
  
  If ParseXML(#Xml, XML$) And XMLStatus(#Xml) = #PB_XML_Success
      
    If CreateDialog(#Dialog) And OpenXMLDialog(#Dialog, #Xml, "test")
      
      Repeat
        Event = WaitWindowEvent()
      Until Event = #PB_Event_CloseWindow 
      
    Else  
      Debug "Erreur de la bibliothèque -Dialog- : " + DialogError(#Dialog)
    EndIf
  Else
    Debug "Erreur XML : " + XMLError(#Xml) + " (Ligne: " + XMLErrorLine(#Xml) + ")"
  EndIf

Code : Tout sélectionner

Compiling Dialog.pb
Loading external libraries...
Starting compilation...
34 lines processed.
Creating and launching executable.
Méthode PB 34 Lignes à compiler 1 fichier

Code : Tout sélectionner

"C:\Program Files\PureBasic\Compilers\pbcompiler.exe" exemple4.pb

******************************************
PureBasic 5.72 (Windows - x64)
******************************************

Compiling exemple4.pb
Loading external libraries...
Starting compilation...
Including source: include/pw/pw.pbi
Including source: ../../lib/pw/_pw.pbi
Including source: ../../lib/pw/__pw.pbi
Including source: classes/_window.pbi
Including source: classes/_child.pbi
Including source: classes/_box.pbi
Including source: classes/_application.pbi
Including source: classes/_vbox.pbi
Including source: classes/_hbox.pbi
Including source: classes/_gadget.pbi
Including source: classes/_button.pbi
Including source: classes/_string.pbi
Including source: classes/_gridbox.pbi
1718 lines processed.
Creating and launching executable.

- Feel the ..PuRe.. Power -
Méthode Module 1718 lignes 14 fichiers

Si c'est pour l'exploit technique et le plaisir alors d'accord :wink: (j'adore aussi réinventer des roues) mais pour la productivité et surtout la pérennité des développements, pas sur ce ce soit intéressant.
Avatar de l’utilisateur
falsam
Messages : 7244
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: PureWindow

Message par falsam »

Le module de microdevweb permettrait de créer facilement une interface utilisateur basée sur du code XML.
A module for make dialog easier
Hum et bien après un test avec tes exemples et un exemple que je voulais mettre en oeuvre j'ai envie de crier NON NON et NON!.
En cette période de confinement ça soulage :wink:

microdevweb, Ton include ne me simplifie pas du tout la création d'une interface utilisateur.

:idea: Je t'invite à regarder le sujet sur DialogDesign0R
https://www.purebasic.fr/english/viewto ... 27&t=70386

Arrêter de vouloir nous simplifier la vie si vous ne savez pas faire mieux que PureBasic nous propose.

J'allais oublier : Nous sommes sur un site francophone.
Configuration : Windows 11 Famille 64-bit - PB 6.03 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: PureWindow

Message par microdevweb »

Merci pour vos avis. Il est vrai que cela n'apporte vraiment une valeur ajoutée, le projet est donc avorté :mrgreen:

Il faut passer sont temps en cette période , je jongle donc entre C++ et Qt que je maîtrise mal et Pb.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: PureWindow

Message par G-Rom »

La vache, ça dénigre sec ici... On sent bien l'avis des gens qui ne connaisse que PB ... , bwef...
L'idée en soit est bonne, mais le fait d'apporté de l'OO en PB fait que personne ne bite rien. j'ai bien compris que tu t'inspirait de QT et que tu voulais amener les layout ici.
Raté, perd pas ton temps.

edit: La lib dialog est basé sur du XML... là c'est pas le cas.
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: PureWindow

Message par Shadow »

G-Rom a écrit :La vache, ça dénigre sec ici... On sent bien l'avis des gens qui ne connaisse que PB ... , bwef...
L'idée en soit est bonne, mais le fait d'apporté de l'OO en PB fait que personne ne bite rien. j'ai bien compris que tu t'inspirait de QT et que tu voulais amener les layout ici.
Raté, perd pas ton temps.

edit: La lib dialog est basé sur du XML... là c'est pas le cas.
Je suis bien d'accord avec toi, ça dénigre sec ici, comme pour moi d'ailleurs, mais je ne suis pas dans la même court que microdevweb donc bon au pire j'ai l'habitude moi...
Tous se que je fais c'est nul et ça intéresse jamais personne !
Ya qu'a voir mon dernier grand projet VB to PB, ça n’intéresse personne.
Bref, je comprend que certain ne partage rien ici, de toute façon c'est jamais assez bien !
Je sens que jvé me faire tapé dessus moi, je sais pas pourquoi, comme ça :mrgreen:

Ya rien de constructif a tous dénigré, moi je dis ça je dis rien ! :roll:
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: PureWindow

Message par G-Rom »

Shadow a écrit :
G-Rom a écrit :La vache, ça dénigre sec ici... On sent bien l'avis des gens qui ne connaisse que PB ... , bwef...
L'idée en soit est bonne, mais le fait d'apporté de l'OO en PB fait que personne ne bite rien. j'ai bien compris que tu t'inspirait de QT et que tu voulais amener les layout ici.
Raté, perd pas ton temps.

edit: La lib dialog est basé sur du XML... là c'est pas le cas.
Je suis bien d'accord avec toi, ça dénigre sec ici, comme pour moi d'ailleurs, mais je ne suis pas dans la même court que microdevweb donc bon au pire j'ai l'habitude moi...
Tous se que je fais c'est nul et ça intéresse jamais personne !
Ya qu'a voir mon dernier grand projet VB to PB, ça n’intéresse personne.
Bref, je comprend que certain ne partage rien ici, de toute façon c'est jamais assez bien !
Je sens que jvé me faire tapé dessus moi, je sais pas pourquoi, comme ça :mrgreen:

Ya rien de constructif a tous dénigré, moi je dis ça je dis rien ! :roll:
Toi, c'est pas pareil , Micro sait coder, son niveau est beaucoup plus haut que la plupart sur le forum. Toi, tu brûles les étapes. je pense sincèrement que tu est victime de l'effet dunning-krugger. Ni voit aucune attaque, juste un constat. j'en veut pour preuve que tu attaques la sérialisation avec des json alors que tu ne maîtrise pas du tout la base de l'enregistrement de donnée.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6962
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: PureWindow

Message par Kwai chang caine »

MicroDevWeb a écrit :Il faut passer sont temps en cette période
Putain !!! GRom a raison, n'y voit aucune agression, juste de la tristesse :cry:
Quand je vois ta puissance de feu et que depuis des années j'ai la chance de te lire, tu tires dans tous les sens....avec des codes de oufs, des trucs supers beaux et que tu arrêtes avant même d'avoir vraiment commencer.
Si j'avais ton talent, je jouerais pas l'abeille à butiner de fleurs en fleurs :mrgreen:
Mais bon, si c'est ce que tu aimes faire, tu as raison de t'éclater
Ca fait juste de la peine de voir autant de supers codes finir au fond d'un tiroir et ne jamais être assemblés tel les pièces d'un puzzle

Encore une fois sans méchanceté, des fois tu me fait penser à Miche! à moitié :wink: :lol:
https://www.dailymotion.com/video/xnjgy7
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: PureWindow

Message par Ollivier »

26 hrs que j'ai pas respiré l'atmosphère extérieure. Les parfums de femme me manquent bien sûr, mais bon... Je ne vais pas me soulager sur un belge aux bonnes intentions...

Faites un remake du Monopoly les amis (le "Confinopoly") !
G-Rom
Messages : 3627
Inscription : dim. 10/janv./2010 5:29

Re: PureWindow

Message par G-Rom »

Kwai chang caine a écrit :
MicroDevWeb a écrit :Il faut passer sont temps en cette période
Si j'avais ton talent, je jouerais pas l'abeille à butiner de fleurs en fleurs :mrgreen:
Mais bon, si c'est ce que tu aimes faire, tu as raison de t'éclater
Ca fait juste de la peine de voir autant de supers codes finir au fond d'un tiroir et ne jamais être assemblés tel les pièces d'un puzzle
https://www.dailymotion.com/video/xnjgy7
Excellent Michel a moitié :D , Pour en revenir à ce que tu dit , au contraire , il a raison d'aller butiné à droite & à gauche , ça fait travailler le ciboulot & le fait de ne pas finir les trucs , j'en sais aussi qq chose, j'ai des milliers de code ou je teste des trucs , chaine de markov, réseau neuronaux , VR en PB , moteur 3D, moteur 2D , gestionnaire de ressource , etc... le soucis, c'est le temps, même si tu diffuses des codes, il faut les expliqué , faire du propre , et comme moi, il ne doit pas forcement avoir le temps tout le temps, bon , sauf maintenant :D
Ollivier a écrit :26 hrs que j'ai pas respiré l'atmosphère extérieure. Les parfums de femme me manquent bien sûr, mais bon... Je ne vais pas me soulager sur un belge aux bonnes intentions...

Faites un remake du Monopoly les amis (le "Confinopoly") !
Arrête la beu & va te laver , tu verras , je suis sur que tu pourrais être entre les cuisses d'une femme au lieu de les renifler... :mrgreen:
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: PureWindow

Message par Ollivier »

G-Rom a écrit :Arrête la beu & va te laver , tu verras , je suis sur que tu pourrais être entre les cuisses d'une femme au lieu de les renifler..
Eh arrête d'en sortir des trop violentes comme ça : t'es pas au bout de tes surprises !!
Excellente celle-là : affaire à suivre !!

MdR, par contre les gars DailyMotion. Marche pas... Faites pas les bâtards...
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Re: PureWindow

Message par Ollivier »

Râh les crapules... J'arrive pas à voir le clip. Je ne peux pas continuer le sujet pas manque de données. Il y a vice de forme sinon...
Shadow
Messages : 1373
Inscription : mer. 04/nov./2015 17:39

Re: PureWindow

Message par Shadow »

G-Rom a écrit :
Shadow a écrit :
G-Rom a écrit :La vache, ça dénigre sec ici... On sent bien l'avis des gens qui ne connaisse que PB ... , bwef...
L'idée en soit est bonne, mais le fait d'apporté de l'OO en PB fait que personne ne bite rien. j'ai bien compris que tu t'inspirait de QT et que tu voulais amener les layout ici.
Raté, perd pas ton temps.

edit: La lib dialog est basé sur du XML... là c'est pas le cas.
Je suis bien d'accord avec toi, ça dénigre sec ici, comme pour moi d'ailleurs, mais je ne suis pas dans la même court que microdevweb donc bon au pire j'ai l'habitude moi...
Tous se que je fais c'est nul et ça intéresse jamais personne !
Ya qu'a voir mon dernier grand projet VB to PB, ça n’intéresse personne.
Bref, je comprend que certain ne partage rien ici, de toute façon c'est jamais assez bien !
Je sens que jvé me faire tapé dessus moi, je sais pas pourquoi, comme ça :mrgreen:

Ya rien de constructif a tous dénigré, moi je dis ça je dis rien ! :roll:
Toi, c'est pas pareil , Micro sait coder, son niveau est beaucoup plus haut que la plupart sur le forum. Toi, tu brûles les étapes. je pense sincèrement que tu est victime de l'effet dunning-krugger. Ni voit aucune attaque, juste un constat. j'en veut pour preuve que tu attaques la sérialisation avec des json alors que tu ne maîtrise pas du tout la base de l'enregistrement de donnée.
C'est bien se que je dis, je suis pas de taille face a Micro, mais bon ont fais avec ce qu'on as lol.
Tu vois le Json, c'est bon c'est dans la poche, je sais comment ça marche, enfin en grande partie !
Alors le XML, bha c'est dans la même tranche, et après, les dialogue que je connais pas mais qui pourrais m'aider pour un future projet !
J'aimerais bien faire un logiciel ou tu fais t'es propre module et tu ajoute toi même des possibilité au programme, ya juste le squelette a faire et après sa roule....
Bha j'ai ça en tête ont verra ça !
Processeur: Intel Core I7-4790 - 4 Cœurs - 8 Thread: 3.60 Ghz.
Ram: 32 GB.
Disque: C: SDD 250 GB, D: 3 TB.
Vidéo: NVIDIA GeForce GTX 960: 2 GB DDR5.
Écran: Asus VX248 24 Pouces: 1920 x 1080.
Système: Windows 7 64 Bits.

PureBasic: 5.60 x64 Bits.
Avatar de l’utilisateur
microdevweb
Messages : 1800
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: PureWindow

Message par microdevweb »

Mon intention était simplement la suivante, dans Pb contrairement à d'autre GUI tel que QT, Wxwidget ou JAvaFx (pour java) il manque un système de layout qui n'est disponible qu'avec les dialogues qui utilise une fichier XML.

Ceci était donc un essai qui semblerait non concluant au yeux de beaucoup, je ne vais donc pas en faire une pentatome.

Celui qui veux reprendre le projet peut si il le veux (il est open source). Je sais que l'on va me critiquer car le projet est orienté objet, juste pour info même en C mon prof de temps réel m'impose de développé style objet :mrgreen:

Marche à suivre pour

ajouter un gadget

On crée une nouvelle classes dans le répertoire PW\lib\pw\classes
Exemple text.pbi

On inclus le fichier (class) dans le fichier
PW\lib\pw\__pw.pbi

Code : Tout sélectionner

XIncludeFile "classes/_txt.pbi"
Code de la nouvelle class

Code : Tout sélectionner

;{-------------------------------------------
; AUTHOR    : microdev
; DATE      : 2020-03-30
; CLASS     : _text
; VERSION   : 
; PROCESS   : 
;}-------------------------------------------

Module _TEXT
  Procedure.s _makeFlags(*this._members) 
    With *this
      Protected flags.s
      If \flags & #PB_Text_Center = #PB_Text_Center
        flags + "#PB_Text_Center"
      EndIf
      If \flags & #PB_Text_Right = #PB_Text_Right
        If Len(flags):flags+"|":EndIf
        flags + "#PB_Text_Right"
      EndIf
      If \flags & #PB_Text_Border = #PB_Text_Border
        If Len(flags):flags+"|":EndIf
        flags + "#PB_Text_Border"
      EndIf
      If Len(flags)
        ProcedureReturn "flags='"+flags+"' "
      EndIf
      ProcedureReturn ""
    EndWith
  EndProcedure
  ;{ ABSTRACT METHODS
  Procedure.s _build(*this._members)
    With *this
      Protected xml.s 
      If Len(\label):xml + "<frame text='"+\label+"'>":EndIf 
      xml + "<text name = '"+Str(*this)+"'"
      xml + _GADGET::_setSize(*this)
      xml + " text='"+\value+"' "
      xml + _makeFlags(*this)
      xml + \order
      xml +"/>"
      If Len(\label):xml + "</frame>":EndIf
      ProcedureReturn xml
    EndWith
  EndProcedure
	;{-------------------------------------------
	; CONSTRUCTOR   : new
	; PARAMETER     : 
	;}-------------------------------------------
	Procedure new(value.s = "",flags = 0)
		Protected *this._members = AllocateStructure(_members)
		With *this
		  _GADGET::super()
		  \value = value
		  \flags = flags
		  \_build = @_build() ; address of abstract method for call it
			ProcedureReturn *this
		EndWith
	EndProcedure

	DataSection
		S_MET:

		E_MET:
	EndDataSection
EndModule
On ajoute le code suivant dans le fichier
PW\lib\pw\__pw.pbi

Code : Tout sélectionner

DeclareModule _TEXT 
   Structure _members Extends _GADGET::_members
       value.s
   EndStructure
   Declare new(value.s = "",flags = 0)
EndDeclareModule
Pour finir on ajoute l'accès aux méthodes public dans le fichier
PW\include\pw\pw.pbi

Code : Tout sélectionner

; Public class : textGadget
; inherit of   : _gadget 
Interface textGadget Extends _gadget
	  
EndInterface
Si vous voulez ajouter des méthodes public, voici la marche à suivre

Corps de la méthode à ajouter dans votre fichier class

Code : Tout sélectionner

Procedure myMethod(*this._members,yourParameters)
   With *this
	    
   EndWith
EndProcedure
Ajouter l'adresse dans data section entre S_MET: et E_MET:

Code : Tout sélectionner

Data.i @myMethod()
Enfin ajouter dans l'interface du fichier PW\include\pw\pw.pbi

Code : Tout sélectionner

Interface textGadget Extends _gadget
	myMethod(myParameters)  
EndInterface
dans le Module PW qui est dans le fichier PW\lib\pw\__pw.pbi
on ajoute

Code : Tout sélectionner

Procedure newTextGadget(value.s = "",flags = 0)
    ProcedureReturn _TEXT::new(value,flags)
EndProcedure
Et on ajoute dans le DeclareModule PW (dans le fichier PW\include\pw\pw.pbi)
on ajoute

Code : Tout sélectionner

Declare newTextGadget(value.s = "",flags = 0)
Cela évidement peut vous sembler compliquer, mais tout est encapsuler pour que l'utilisateur final n'aie qu'un seul include à faire et n'aie accès que au stricte nécessaire.

C'est le même principe pour ajouter un layout, la est la force de l'objet une fois la structure posée c'est beaucoup de copier coller (plus de code souvent que du simple procédural)
Si vous voulez que j'ajoute un exemple de layout vous le demander, ici je justifie seulement mon choix de style de code et ne vous impose pas de l'aimer :mrgreen:
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Répondre