36

LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de
Page 2: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET

Chapitre 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET_____2

1.1 Introduction _______________________________________________4 1.2 Création d' un objet _________________________________________5

1.2.1 Résumé de la Démarche _________________________________5 1.2.2 Démarche ____________________________________________5 1.2.3 Pour utiliser un objet ____________________________________7

1.3 L'héritage _________________________________________________8 1.3.1 L'héritage simple _______________________________________8

1.4 Les Visual Standard ________________________________________10 1.4.1 Un premier exemple : un Command Button _________________10 1.4.2 Un deuxième exemple : Une Listbox + une Méthode __________11

1.5 Les Visual Custom_________________________________________12 1.5.1 Premier exemple : Une ComboBox________________________12 1.5.2 Une deuxième exemple : Un Bloc DataWindow______________13 1.5.3 Côté Utilisateur de la classe______________________________13 1.5.4 Côté Classe __________________________________________14

1.6 Les Classes non visuelles____________________________________16 1.7 Les Non-Visuelles Standards _________________________________16 1.8 Le polymorphisme _________________________________________16 1.9 Le paramétrage optionnel____________________________________18 1.10 Les Services de classe _____________________________________19

1.10.1 Le schéma de la Uo_Dw ________________________________20 1.10.2 Les scripts de la Uo_Dw ________________________________21 1.10.3 Le schéma de N_cst_dw_mono_select _____________________23 1.10.4 Le script_____________________________________________23 1.10.5 Le schéma de N_cst_dw_multi_select______________________24 1.10.6 Le script_____________________________________________24 1.10.7 Le schéma de N_cst_dw_mono_export_____________________24 1.10.8 Le script_____________________________________________24 1.10.9 Le schéma de N_cst_dw_multi_export _____________________25 1.10.10 Le script ___________________________________________25 1.10.11 L'interface__________________________________________26 1.10.12 Les scripts__________________________________________26

1.11 La création dynamique de contrôles __________________________27 1.12 Annexes________________________________________________30

1.12.1 Service de classe : un exemple – une liste en mono ou multi sélection et transfert___________________________________________30

Page 3: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 3

1.12.2 Service de classe : un autre exemple – une dw en mono ou multi sélection - un seul service de classe. ______________________________33

Page 4: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 4

1.1 INTRODUCTION La Programmation Orientée Objet nous permet d’enrichir des classes de PowerBuilder. Elle permet de créer des classes (ou objets) qui accéléreront le développement d’application. Il faut donc désormais distinguer : Les classes (User objects) objets du chapitre actuel Les objets (ou contrôles) que l’on "posent" sur les fenêtres en phase de conception. Les instances qui sont en mémoire pendant l’exécution de l’application. Exemple : jusqu’à présent dans la boîte à outils nous avons choisi une classe (CommandButton par exemple) pour créer un objet CommandButton (cb_suivant par exemple) et à l’exécution nous avions sous les yeux une instance de ce bouton. Les "User Objects" sont de plusieurs types :

- Class :

- Custom : Classes nouvelles (pour des services de classe par exemple) - Standard : Connection, Datastore, DynamicDescriptionArea, Error, Message, OleObject, OleStorage, OleStream, Pipeline, Transaction, etc. - Visual : - Custom : combinaison de classes visuelles - External : dll, exe,… - Standard : CommandButton, DataWindow,... - OCX : Cmdialog, Grid, Msole2,....

Page 5: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 5

1.2 CREATION D' UN OBJET

1.2.1 Résumé de la Démarche

• Cliquez sur le bouton New • Choisissez la catégorie • Choisissez le type • Changez les propriétés • Ajoutez des variables d'instance (Attributs) • Codez le ou les scripts (Méthodes) • Ajoutez des fonctions publiques (Méthodes)

1.2.2 Démarche Dans ce paragraphe nous allons créer une classe CommandButton cb_fermer pour avoir un bouton de commande qui ferme une fenêtre.

• Cliquez sur New

• Cliquez sur l'onglet PB OBject

• Choix de la catégorie d'objet Custom Class Standard Class Custom Visual External Visual Standard Visual

Page 6: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 6

Double-cliquez sur la catégorie. Ici Standard Visual

• Choix du type de la classe d'objet

Ici CommandButton

• L'interface de programmation d'une classe visuelle

• Changez les propriétés de votre classe Text &Fermer Font … Default False Cancel True …

• Codez le(s) script(s) Ici Close(Parent)

• Enregistrez la classe Ici Uo_cb_fermer

Page 7: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 7

1.2.3 Pour utiliser un objet

1.2.3.1 Objet Graphique Dans la liste déroulante des contrôles cliquer sur "User Object"

Sélectionnez votre classe dans la liste et cliquez sur OK.

Posez-la sur la fenêtre et testez.

1.2.3.2 Objet non graphique Déclarez dans le code une variable de type de votre UserObject Utilisez l'instruction Create Utilisez l'instruction Destroy Pour un exemple cf plus loin dans ce chapitre.

Page 8: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 8

1.3 L'HERITAGE

1.3.1 L'héritage simple Une classe peut hériter d'une autre classe Pour la créer vous avez deux possibilités :

o Fichier / Inherit / Target / Librairies / User Objet

o Vous sélectionnez le user object parent, vous cliquez droit et vous cliquez sur Inherit.

Le code événementiel du parent est exécuté avant le code du descendant

1.3.1.1 Inhiber l'héritage Si le code du parent ne doit pas être exécuté vous cliquez droit dans le script et vous désélectionnez Extend Ancestor Script qui l'option par défaut.

1.3.1.2 Exécuter le script d'un parent Du parent direct : Super::EVENT Clicked() Du parent indirect : Call uo_cb_parent::Clicked // par exemple du grand Parent

Page 9: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 9

1.3.1.3 Exemples d'héritages

• Le schéma Uo_cb_parent Clicked : Messagebox('','Parent') Uo_cb_enfant Uo_cb_enfant_déshé

rité Uo_enfant_Inversé

Clicked : Msg(Enfant) Clicked : Msg(Désh) Clicked : Msg(inversé) Uo_cb_petit_enfant Clicked : Msg(Petit Enfant)

• La fenêtre

Page 10: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 10

1.4 LES VISUAL STANDARD

1.4.1 Un premier exemple : un Command Button Boutons de commande pour manipuler une DataWindow : 3 niveaux Variable d'instance au premier niveau, méthodes au deuxième niveau, affectation au niveau "instance" Uo_cb_navig DataWindow idw Uo_cb_precedent Uo_cb_suivant Idw.scrollPriorRow() idw.ScrollToNext() Cb_premier Cb_suivant Idw=dw_clients idw=dw_clients

Page 11: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 11

1.4.2 Un deuxième exemple : Une Listbox + une Méthode Une liste à remplir avec un ordre Select via une fonction (of_remplir) ou bien via un message utilisateur (user-event ue_remplir)

Uo_liste String is_chaine of_remplir SelectionChanged : is_chaine = This.selectedItem()

Lb_nomsclients Constructor : of_remplir("select……..") Function : of_remplir(as_Select) // Remplir une liste ; paramètre chaine select = as_Select string lsChaine // déclaration du curseur dynamique declare lc_liste dynamic cursor for sqlsa; // Compilation prepare sqlsa from :as_Select using sqlca; open dynamic lc_liste; fetch lc_liste into :lsChaine; do while sqlca.sqlcode = 0 this.additem(lsChaine) fetch lc_liste into :lsChaine; loop close lc_liste;

Page 12: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 12

1.5 LES VISUAL CUSTOM

1.5.1 Premier exemple : Une ComboBox Cet objet est une combinaison d'un SingleLineEdit et d'une ListBox.

Pour le créer sur la fenêtre de conception il faut "poser" les deux éléments. Un SingleLineEdit nommé Sle_Combo et une ListBox nommée Lb_Combo // Event SelectionChanged for lb_Combo de UO_Combo dans oodyn.pbl sle_combo.text = lb_combo.selecteditem ( ) // Event ue_sur_Touche (pbm_keyup) pour sle_combo de UO_Combo long ll_index // -------------------------------- ll_index = lb_combo.finditem(this.text,0) lb_combo.selectitem ( ll_index )

Page 13: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 13

1.5.2 Une deuxième exemple : Un Bloc DataWindow

• Objectif Cet objet permet de gérer des données au travers d'une DW. L'utilisateur de la classe ne doit spécifier que le code SQL source de la DataWindow et la transaction .

• L'écran utilisateur

• Scripts

1.5.3 Côté Utilisateur de la classe // Event Constructor for uo_dw_bloc_villes inherited from uo_dw_tot of_init("dwo_villes_ff" , sqlca)

Page 14: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 14

1.5.4 Côté Classe

// of_init for uo_dw_bloc dans oodyn.pbl // Arguments : as_dwo (type string) et atrans_sql (type transaction) dw_generique.dataobject = as_dwo dw_generique.settransobject(atrans_sql) dw_generique.retrieve()

// Event clicked for cb_suivant dw_generique.scrollnextrow() // Event RowFocusChanged pour dw_generique de uo_dw_bloc long ll_count long ll_position ll_count = dw_generique.rowcount() ll_position = dw_generique.getrow() cb_premier.enabled = true cb_precedent.enabled = true

Page 15: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 15

cb_suivant.enabled = true cb_dernier.enabled = true CHOOSE CASE ll_position CASE 1 cb_premier.enabled = false cb_precedent.enabled = false CASE ll_count cb_suivant.enabled = false cb_dernier.enabled = false END CHOOSE

Page 16: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 16

1.6 LES CLASSES NON VISUELLES Les objets non visuels permettent :

• D’enrichir les classes non visuelles standards de PowerBuilder Par exemple de type Transaction ou de type Pipeline ( cf le chapitre sur les Pipelines, celui sur les DataStores et celui sur les procédures stockées)

• De gérer le polymorphisme pour les fonctions • De gérer le paramétrage optionnel de fonctions • De créer des services de classe

Les objets non visuels doivent être instanciés avec un ordre Create et détruit avec l’instruction Destroy. Leur validité est testée avec la fonction IsValid()

1.7 LES NON-VISUELLES STANDARDS Cette catégorie sera détaillée par la suite dans plusieurs chapitres ( Pour les connexions multiples, pour les procédures stockées, pour des Pipelines, pour les DataStores).

1.8 LE POLYMORPHISME La hiérarchie est à lire à l’envers

Admettons la nécessité d’avoir la même fonction pour des opérations quelque peu différentes ( le calcul d’une surface,….) . Pour l’utilisateur le nom de la fonction est toujours le même; ce sont les paramètres qui vont être différents en nombre ou en type. Dans l’exemple suivant la « même » fonction permet de faire soit une addition soit une concaténation. La classe n_cst_op est vide Elle est utilisée comme niveau racine La classe n_cst_op_num contient une fonction

Page 17: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 17

Of_add ( ai_x , ai_y ) qui fait la somme des deux nombres et renvoie le résultat La classe n_cst_op_string contient une fonction Of_add ( as_x , as_y ) qui fait la concaténation des deux chaînes et renvoie le résultat La classe n_cst_op_user est vide Elle est utilisée comme interface inv_op_user est déclarée comme variable d’instance Open de w_fct_polymorphes inv_op_user = Create n_cst_op_user Close de w_fct_polymorphes If isvalid(inv_op_user) then Destroy inv_op_user SetNull(inv_op_user) End if Clicked de cb_add_num integer li_result li_result = inv_op_user.of_add(3,10) sle_num.text = string(li_result) Clicked de cb_add_string string ls_concat ls_concat = inv_op_user.of_add("Bon","jo") sle_string.text = ls_concat

Page 18: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 18

1.9 LE PARAMETRAGE OPTIONNEL La hiérarchie est à lire à l’envers

Admettons la nécéssité d’avoir la même fonction avec des paramètres optionnels. Pour l’utilisateur de cette fonction il ne devra passer que le nombre nécessaire de paramètres. Dans l’exemple suivant la « même » fonction permet de faire soit une addition de deux nombres soit de trois nombres La classe n_cst_optionnel est vide Elle est utilisée comme niveau racine La classe n_cst_optionnel_3 contient une fonction Of_add ( ai_x , ai_y , ai_z ) qui fait la somme des trois nombres et renvoie le résultat La classe n_cst_optionnel_2 contient une fonction Of_add ( ai_x , ai_y ) qui fait la somme des deux nombres et renvoie le résultat La classe n_cst_optionnel_user est vide Elle est utilisée comme interface Open de w_fct_parm_optionnels inv_optionnel_user = create n_cst_optionnel_user Close de w_fct_parm_optionnels if isvalid(inv_optionnel_user) then destroy(inv_optionnel_user) Clicked de cb_optionnel2 integer li_result li_result = inv_optionnel_user.of_add(3,10) sle_num2.text = string(li_result) Clicked de cb_optionnel3 integer li_result li_result = inv_optionnel_user.of_add(3,10,10) sle_num3.text = string(li_result)

Page 19: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 19

1.10 LES SERVICES DE CLASSE Les services de classe – utilisés dans les PFC (cf le chapitre correspondant) – permettent « d’ externaliser » des fonctions et aussi de les généraliser. Plutôt que de créer une fonction - méthode d’un objet visuel la fonction devient une méthode d’un objet non-visuel Les services de classe permettent de pallier l'absence d'héritage multiple.

Dans l’exemple présenté graphiquement ci-dessus cinq user objects sont créés :

un user object de type visual standard DataWindow quatre user object de type class custom

Deux classes vont permettre soit la mono sélection soit la multi sélection. Deux autres classes vont permettre l'export en mono ou en multi sélection.

Page 20: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 20

1.10.1 Le schéma de la Uo_Dw Uo_dw Inv_multi_select Inv_mono_select Inv_multi_export Inv_mono_export Of_activer_export_mono() Of_activer_export_multi() Of_desactiver_export_mono() Of_desactiver_export_multi() Of_multi_select(ab_multi_select) Of_init(a_trans) Of_export_mono(adw_destination) Of_export_multi(adw_destination) Clicked Destructor RowFocusChanging

Page 21: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 21

1.10.2 Les scripts de la Uo_Dw Uo_dw type variables n_cst_dw_multi_select inv_multi_select n_cst_dw_mono_select inv_mono_select n_cst_dw_mono_export inv_mono_export n_cst_dw_multi_export inv_multi_export transaction i_trans long il_current_row long il_new_row public subroutine of_multi_select (boolean ab_multi_select) if ab_multi_select then // Multi Select if isvalid(inv_mono_select) then destroy inv_mono_select inv_multi_select = create n_cst_dw_multi_select inv_multi_select.idw = this else // Mono Select if isvalid(inv_multi_select) then destroy inv_multi_select inv_mono_select = create n_cst_dw_mono_select inv_mono_select.idw = this end if public subroutine of_init (transaction a_trans) i_trans = a_trans this.setTransObject(i_trans) this.retrieve() public subroutine of_activer_export_multi () // Activation du multi export this.inv_multi_export = create n_cst_dw_multi_export inv_multi_export.idw = this public subroutine of_desactiver_export_multi () if IsValid(inv_multi_export) then destroy inv_multi_export SetNull(inv_multi_export) end if public subroutine of_activer_export_mono () this.inv_mono_export = create n_cst_dw_mono_export inv_mono_export.idw = this public subroutine of_desactiver_export_mono () if IsValid(inv_mono_export) then

Page 22: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 22

destroy inv_mono_export SetNull(inv_mono_export) end if public subroutine of_export_mono (datawindow adw_destination) if isvalid(inv_mono_export) then this.inv_mono_export.of_export_mono(adw_destination) else messagebox("Alerte","Service non Disponible") end if end subroutine public subroutine of_export_multi (datawindow adw_destination) if isvalid(inv_multi_export) then this.inv_multi_export.of_export_multi(adw_destination) else messagebox("Alerte","Service non Disponible") end if event destructor // Service Mono_select if isvalid(inv_mono_select) then destroy inv_mono_select SetNull(inv_mono_select) end if // Service Multi_select if isvalid(inv_multi_select) then destroy inv_multi_select SetNull(inv_multi_select) end if // Service Mono_export if isvalid(inv_mono_export) then destroy inv_mono_export SetNull(inv_mono_export) end if // Service Multi_export if isvalid(inv_multi_export) then destroy inv_multi_export SetNull(inv_multi_export) end if event clicked if isvalid(this.inv_multi_select) then this.inv_multi_select.of_select_rows(row) end if event rowfocuschanging if isvalid(this.inv_mono_select) then this.inv_mono_select.of_select_row(currentrow,newrow) end if

Page 23: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 23

1.10.3 Le schéma de N_cst_dw_mono_select

N_cst_dw_mono_select Idw Of_select_row ( al_current_row , al_new_row )

1.10.4 Le script N_cst_dw_mono_select type variables uo_dw idw public subroutine of_select_row (long al_current_row, long al_new_row) idw.selectrow ( al_current_row, FALSE ) idw.selectrow ( al_new_row, TRUE )

Page 24: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 24

1.10.5 Le schéma de N_cst_dw_multi_select

N_cst_dw_multi_select Idw Of_select_rows ( al_current_row )

1.10.6 Le script N_cst_dw_multi_select type variables uo_dw idw public subroutine of_select_rows (long al_current_row);// Multi select if idw.IsSelected (al_current_row ) then idw.SelectRow(al_current_row,FALSE) else idw.SelectRow(al_current_row,TRUE) end if

1.10.7 Le schéma de N_cst_dw_mono_export

N_cst_dw_mono_export Idw Of_export_mono ( adw_destination )

1.10.8 Le script N_cst_dw_mono_export type variables uo_dw idw public subroutine of_export_mono (datawindow adw_destination) idw.rowsmove( idw.getselectedrow (0),idw.getselectedrow (0) , primary!, adw_destination, adw_destination.rowcount()+1, primary! )

Page 25: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 25

1.10.9 Le schéma de N_cst_dw_multi_export

N_cst_dw_multi_export Idw Of_export_multi ( adw_destination )

1.10.10 Le script N_cst_dw_multi_export type variables uo_dw idw public subroutine of_export_multi (datawindow adw_destination);// exportation des n lignes sélectionnées long ll_ctr, ll_count ll_count = idw.RowCount() for ll_ctr = ll_count to 1 step -1 if idw.IsSelected(ll_ctr) then idw.rowsmove ( ll_ctr , ll_ctr , primary!, adw_destination, adw_destination.rowcount()+1, primary! ) end if next

Page 26: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 26

1.10.11 L'interface

1.10.12 Les scripts Dw_1.Constructor() this.of_init(sqlca) this.of_Multi_Select(False) Cb_Activer_Export_Mono.Clicked() if this.text = "&Activer Export Mono" then this.text = "&Désactiver Export Mono" dw_clients_1.of_activer_export_mono() else this.text = "&Activer Export Mono" dw_clients_1.of_desactiver_export_mono() end if Cb_ Export_Mono.Clicked() dw_1.of_export_mono(dw_clients_3)

Page 27: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 27

1.11 LA CREATION DYNAMIQUE DE CONTROLES PowerBuilder permet de créer dynamiquement des contrôles (SingleLineEdit, StaticText,…) sur une fenêtre (comme l'on peut créer dynamiquement des pages d'onglet dans un onglet- cf le chapitre correspondant). Il faut pour cela passer par des UserObjects. La création dynamique à partir de classes non visuelles standards ne fonctionne pas. C'est la méthode OpenUserObject qui permet de créer dynamiquement un contrôle. Syntaxe :

windowname.OpenUserObject ( userobjectvar, userobjecttype {, x, y } )

où windowname : est le nom de la fenêtre parent userobjectvar : est une variable du type du userobject à créer userobjecttype : est une chaîne de caractère qui contient le nom de votre classe d'objet x et y : les positions x et y de votre contrôle dynamique. Dans l'exemple qui suit nous allons créer trois sle puis leur affecter des valeurs. Le UserObjet a été créé sans aucune propriété ni méthode spécifique.

Page 28: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 28

• Fenêtres d'exécution

A la création de la fenêtre

Après la création des sle

Après l'affectation des valeurs

Page 29: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 29

• Scripts

Du bouton Créer contrôles int li_ctr for li_ctr = 1 to 3 parent.OpenUserObject ( isle_perso[li_ctr], "uo_sle" ,100, 100 * li_ctr ) next

Du bouton Affecter Valeurs int li_ctr for li_ctr = 1 to upperbound(isle_perso) isle_perso[li_ctr].text = string(li_ctr) next

Page 30: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 30

1.12 ANNEXES

1.12.1 Service de classe : un exemple – une liste en mono ou multi sélection et transfert

1.12.1.1 Le schéma de la liste mono

Uo_list_multi_mono Inv_list_multi_mono Of_destroy() Of_init(as_type_selection)

1.12.1.2 Le script Uo_list_multi_mono type variables n_cst_list_multi_mono inv_list_multi_mono public subroutine of_init (string as_type_selection) inv_list_multi_mono = create n_cst_list_multi_mono inv_list_multi_mono.of_init(this) if as_type_selection = "Multi" then inv_list_multi_mono.of_multi() if as_type_selection = "Mono" then inv_list_multi_mono.of_mono() public subroutine of_destroy () if isvalid(inv_list_multi_mono) then destroy(inv_list_multi_mono) setNull(inv_list_multi_mono) end if

Page 31: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 31

1.12.1.3 Le schéma de la liste Multi-Mono

N_cst_list_multi_mono

Iuo_lmm Ib_select_mono Ias_items[] Of_init(auo_list) Of_mono() Of_multi() Of_recup() integer

1.12.1.4 Le script N_cst_list_multi_mono type variables uo_list_multi_mono iuo_lmm boolean ib_select_mono string ias_items[] public subroutine of_mono () ib_select_mono = true iuo_lmm.MultiSelect = false public subroutine of_multi () ib_select_mono = false iuo_lmm.MultiSelect = true public function integer of_recup () integer li , li_items li_items = 0 IF ib_select_mono THEN ias_items[1] = iuo_lmm.selecteditem ( ) return 1 ELSE for li = 1 to iuo_lmm.totalItems() if iuo_lmm.state(li) = 1 then li_items++ ias_items[li_items] = iuo_lmm.text(li) end if

Page 32: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 32

next return li_items END IF end function public subroutine of_init (any auo_list) iuo_lmm = auo_list end function

1.12.1.5 L'interface utilisatrice

1.12.1.6 Les scripts Cb_mono_clicked lb_multi_mono.uof_init ("Mono") Cb_multi_clicked lb_multi_mono.uof_init("Multi") Cb_transferer_clicked int li_retour,li_ctr lb_resultat.reset() if isvalid(lb_multi_mono.inv_list_multi_mono) then li_retour = lb_multi_mono.inv_list_multi_mono.of_recup() for li_ctr = 1 to li_retour lb_resultat.additem(lb_multi_mono.inv_list_multi_mono.ias_items[li_ctr]) next else messagebox("","Instance invalide") end if lb_multi_mono.uof_destroy()

Page 33: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 33

1.12.2 Service de classe : un autre exemple – une dw en mono ou multi sélection - un seul service de classe.

1.12.2.1 Les schémas

Uo_dw n_cst_dw_select N_cst_dw_select Inv_select Uo_dw idw Boolean Ib_mono Boolean Ib_multi Of_select(ab_select) Of_select_mono(ab_mon

o) Of_select_multi(ab_multi

) RowFocusChanging Destructor

1.12.2.2 Les scripts Uo_dw type variables n_cst_dw_select inv_select boolean ib_mono = false boolean ib_multi = false public subroutine of_select (boolean ab_select) inv_select = create n_cst_dw_select inv_select.idw = this event rowfocuschanging IF ib_mono THEN this.selectrow(currentrow,false) this.selectrow(newrow,true) END IF IF ib_multi THEN if isselected(newrow) then this.selectrow(newrow,false) else this.selectrow(newrow,true)

Page 34: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 34

end if END IF event destructor IF isvalid(inv_select) THEN destroy(inv_select) END IF N_cst_dw_Select type variables uo_dw idw public subroutine of_select_mono (boolean ab_mono) if ab_mono then idw.ib_mono = true else idw.ib_mono = false end if public subroutine of_select_multi (boolean ab_multi) if ab_multi then idw.ib_multi = true else idw.ib_multi = false end if

Page 35: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 35

1.12.2.3 L'interface utilisatrice

1.12.2.4 Les scripts cb_activer_select event clicked dw_clients.of_select(true) cb_desactiver_select event clicked dw_clients.of_select(false) cb_mono_on event clicked IF isvalid(dw_clients.inv_select) THEN dw_clients.inv_select.of_select_mono(true) cb_mono_off event clicked IF isvalid(dw_clients.inv_select) THEN dw_clients.inv_select.of_select_mono(false) cb_multi_on event clicked IF isvalid(dw_clients.inv_select) THEN dw_clients.inv_select.of_select_multi(true) cb_multi_off event clicked IF isvalid(dw_clients.inv_select)

Page 36: LA POO LA PROGRAMMATION ORIENTEE OBJETpascal.buguet.free.fr/pdfsEtZips/pwrs_10_poo.pdf · 2008-12-16 · CHAPITRE 1 LA POO – LA PROGRAMMATION ORIENTEE OBJET ... 1.12.1 Service de

PowerBuilber – La POO

© Pascal Buguet Imprimé le 19 août 2004 Page 36

THEN dw_clients.inv_select.of_select_multi(false) dw_clients event constructor SettransObject(sqlca)