Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Quelques SUBs, en vrac | |
|
+5Klaus Yannick Jicehel papydall JL35 9 participants | |
Auteur | Message |
---|
JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 20:41 | |
| Je m'étais fais la même réflexion, pas pratique de manipuler les types numériques d'objets. Ta solution est mieux, mais encore un peu... lourde, à mon avis, avec la série de IF upper$(...
Encore une fois, je regrette le bon vieux basic avec le Select Case qui fonctionnait aussi bien avec des variables alphanumériques que des variables numériques, du genre SELECT UPPER$(Type$) CASE "FORM": ... CASE "ALPHA" c'est (c'était) quand même plus simple à lire (et à coder). | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 20:52 | |
| Alors, moi aussi, j'ai envie de contribuer aux procédures réutilisables. Donc, extraits de KGF_SUB.bas, 3 procédures qui sont utilisables SANS KGF.dll: 1. Alignement d'un texte dans un objet (edit, memo, ...). Il faut donner le numéro de l'objet: - Code:
-
' === alignement d'un texte Sub Align(No%,T$,Alignement$,WC%) Dim_Local sp%,x%,t% : ' Définition des variables locales If Variable("Align$")=0 then Dim Align$ : ' On doit définir une variable globale pour retourner la chaine calculée sp% = text_width(" ",No%) : ' La variable sp% correspond à la taille d'un espace t% = text_width(T$,No%) : ' La variable t% correspond à la taille du texte ' Teste si l'on a demandé un affichage centré If Alignement$="C" ' *** bug dans Panoramic *** x% = int((w%-sp%-t%)/sp%/2) x% = int((WC%-sp%-t%)/sp%*2) : ' Calcul du nombre d'espaces à ajouter devant la chaine Else ' Teste si l'on a demandé un affichage à droite If Alignement$="D" Then x% = int((WC%-sp%-t%)/sp%) - 1 : ' Calcul du nombre d'espaces à ajouter devant la chaine End_If if x% > 0 then T$ = string$(x%," ")+T$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche) Align$ = T$ : ' On place la chaine modifiée dans la chaine de retour End_Sub
2. Alignement d'un texte avec plus d'options, et il n'y a plus besoin de numéro d'objet: - Code:
-
' === alignement d'un texte avec police, taille, gras Sub AlignEX(T$,Alignement$,WC%,police$,taille%,gras%) Dim_Local sp%,x%,x1%,t%,i%, TT$ : ' Définition des variables locales If Variable("AlignEX$")=0 then Dim AlignEX$ : ' On doit définir une variable globale pour retourner la chaine calculée ' chercher le premier numéro d'objet libre i% = 1 while object_exists(i%)=1 i% = i% + 1 end_while ' créer un ALPHA avec les bons attributs alpha i% : font_name i%,police$ : font_size i%,taille% if gras%=1 then font_bold i% sp% = text_width(" ",i%) : ' La variable sp% correspond à la taille d'un espace t% = text_width(T$,i%) : ' La variable t% correspond à la taille du texte ' Teste si l'on a demandé un affichage centré If Alignement$="C" ' *** bug dans Panoramic *** x% = int((w%-sp%-t%)/sp%/2) x% = int((WC%-sp%-t%)/sp%*2) : ' Calcul du nombre d'espaces à ajouter devant la chaine x1% = x% Else ' Teste si l'on a demandé un affichage à droite If Alignement$="D" x% = int((WC%-sp%-t%)/sp%) - 1 : ' Calcul du nombre d'espaces à ajouter devant la chaine x1% = 0 else x1% = int((WC%-sp%-t%)/sp%) - 1 : ' Calcul du nombre d'espaces à ajouter devant la chaine x% = 0 end_if End_If TT$ = T$ if x% > 0 then TT$ = string$(x%," ")+TT$ : ' On ajoute les espaces devant la chaine (0 si alignement à gauche) if x1% > 0 then TT$ = TT$+string$(x1%," ") : ' On ajoute les espaces derrière la chaine (0 si alignement à gauche) AlignEX$ = TT$ : ' On place la chaine modifiée dans la chaine de retour delete i% : ' supprimer le ALPHA interne End_Sub
3. remplacement de toutes tes occurrences d'un caractère par un autre dans une chaîne: - Code:
-
' === remplacer toutes les occurrences d'un caractère par un autre sub RemplacerCaracteres(t$,c1$,c2$) if variable("RemplacerCaracteres$")=0 then dim RemplacerCaracteres$ dim_local p%,s$ s$ = t$ p% = instr(s$,c1$) while p%>0 if p%=1 s$ = c2$+mid$(s$,p%+1,len(s$)) else s$ = left$(s$,p%-1)+c2$+mid$(s$,p%+1,len(s$)) end_if p% = instr(s$,c1$) end_while RemplacerCaracteres$ = s$ end_sub
EDIT l'utilisation de ces procédures est montrée dans demo_KGF_SUB.bas.
Dernière édition par Klaus le Sam 19 Jan 2013 - 21:09, édité 1 fois | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 20:58 | |
| @L35: Tu crées une chaine du type "alpha......edit......memo.....list.... " etc. L'important, c'est de donner un nombre de caractères identiques à chaque mot-cle, en complétant par n'importe quoi (ici, des points). Puis tu fais - Code:
-
type% = (instr(chaine_type$,type$)+n%-1)/n% select i% case 1: ' alpha case 2: ' edit case 3: ' memo case 4: ' list ... end_select chaine_type$ est cette chaîne de référence, type$ est un mot_clé recherché, et n% est la longueur retenue pour tous les mots-clé. Note: j'ai mis les mots-clé dans n'importe quel ordre, sans lien avec le type d'objet. Techniquement, ce n'est pas nécessaire pour piloter le SELECT. Ce serait juste pour l'élégance... | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 21:25 | |
| Intéressant (j'étais en train de chercher une solution ...), je note. et tes Subs, intéressantes aussi. Suite à la tienne qui remplace un caractère par un autre, j'en ai une qui remplace toutes les occurences d'un mot par un autre dans une chaîne: - Code:
-
SUB Replace(a$,b$,c$) ' Remplace dans a$ les occurences de b$ par c$ (tailles différentes éventuelles) ' chaîne résultante dans rs_ch$ DIM_LOCAL rm_k%, rm_u%, ff_a$ IF VARIABLE("rs_ch$") = 0 THEN DIM rs_ch$ rs_ch$ = a$: rm_k% = INSTR(rs_ch$, b$) WHILE rm_k% > 0 rs_ch$ = LEFT$(rs_ch$, rm_k%-1) + c$ + MID$(rs_ch$, rm_k%+LEN(b$), 500): ' nouvelle chaîne rm_u% = rm_k%+LEN(c$): ff_a$ = MID$(rs_ch$, rm_u%, 500) rm_k% = INSTR(ff_a$, b$) IF rm_k% = 0 THEN EXIT_WHILE rm_k% = rm_k%+rm_u%-1 END_WHILE END_SUB on pourrait aussi prévoir d'autres paramètres des objets, comme le Caption, la couleur, mais tout ça entraîne bien loin. Pour la définition des objets, la création d'une chaîne contenant tous les noms d'objets avec la même longueur oblige à s'aligner sur le nom d'objet le plus long, et on ne sait pas s'il n'y en aura pas un plus long plus tard... On pourrait faire comme ceci (ça ressemble à la solution papydall, mais j'ai mis le numéro d'objet à attribuer dans les paramètres d'appel, perso je préfère): - Code:
-
Objets("Button",7,1,50,20,200,150,0): CAPTION 7,"Bouton": ' <- exemple d'appel de la Sub END
SUB Objets(obj$,No%,V%,T%,L%,W%,H%,P%) DIM_LOCAL indx% IF VARIABLE("T_obj$") = 0 DIM T_obj$ T_obj$="01SCENE3D;02BUTTON;03EDIT;04MEMO;05COMBO;06ALPHA;07FORM;08LIST;09PICTURE;" T_obj$=T_obj$+"10CHECK;11OPTION;12MAIN_MENU;13SUB_MENU;14SOUND;15MOVIE;16TRACK_BAR;" T_obj$=T_obj$+"17OPEN_DIALOG;18SAVE_DIALOG;19SCROLL_BAR;20PROGRESS_BAR;21SPIN;" T_obj$=T_obj$+"22GRID;23CONTAINER;24;25;26DLIST;27SCENE2D;28TIMER;29;30;31;" T_obj$=T_obj$+"32CONTAINER_OPTION;33;34;35;36;37;38;39;40;41IMAGE;" END_IF indx% = INSTR(T_obj$,UPPER$(obj$)+";"): indx% = VAL(MID$(T_obj$,indx%-2,2)) SELECT indx% CASE 1: SCENE3D No% CASE 2: BUTTON No% CASE 3: EDIT No% ' .... ' .... END_SELECT TOP No%,T%: LEFT No%,L% IF W% > 0 THEN WIDTH No%,W% IF H% > 0 THEN HEIGHT No%,H% IF P% > 0 THEN PARENT No%,P% IF V% = 0 THEN HIDE No% END_SUB | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 23:32 | |
| Hello World ! Merci Klaus et JL35 pour vos réactions. Je vais voir vos codes. Les belles idées sortent de plusieurs têtes qui réfléchissent ensemble sur un point commun. JL35, je trouve que ta méthode est bonne.
A l’instar de KGF.dll de Klaus, on peut réaliser ensemble (chacun apportera sa contribution) PANO_SUB qui comportera différentes procédures. Et au lieu de réinventer la roue à chaque fois, il suffira pour un programmeur d’intégrer dans son programme PANO_SUB par #INCLUDE PANO_SUB ou de copier/coller la ou les SUBs qui l’intéressent.
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 19 Jan 2013 - 23:52 | |
| @ JL35, Je me suis posé la question sur select et les alphanumerique et j'en suis au même regrets... @ tous, Je ne suis pas sur qu'une seule Sub pour tout les objets soit très opportune... Si on veut une Sub pour tous on est obligé de retreindre les paramètres à leur paramètres communs Numéro, visibilité , top,left,height, width,parent @ papydall, parent 0 est correct puisque 0 renvoi sur le form 0 Edittout comme l'initialisation à 0 des objets puisque si je n' appelle pas la sub pour le form 0 il est créé par defaut et à ce moment les attributs s'applique sur le form 0 ce sont les autres objets qui ne sont pas développés... Re Editdans mon idéal, l'appelle à la sub serait : Objet ( "objet", Visibilité%,Dim.H%,Dim.L%,Top%,Left%,Parent%) j'ai essayé de passé la font en paramètre mais j'ai eu droit à une "erreur exception" au premier appel peut être un minibug de l'éditeur... RE Re Edit@ JL35, Je viens de regarder ton code pour les objets, l'idée me plait même si perso je me garderai la possibilité de centrer les form avec les paramètre T% et L% à 0 " J'aime bien quand les form sont centrés sur l'écran..."
Dernière édition par ygeronimi le Dim 20 Jan 2013 - 0:15, édité 4 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 0:14 | |
| Ygeronimi, bien sûr parent 0 renvoie sur FORM 0 mais si tu appelles ta SUB comme ceci , pour créer un ALPHA par exemple (avec no% initialisée à 0): - Code:
-
objet(2,1,100,100,10,10,0) tu obtiens le message d’erreur OBJECT number out of range puisque tu tentes de créer ALPHA 0. C’est pourquoi je dis que no% doit être initialisée à 1. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 0:18 | |
| @ papydall,
si tu initialise NO% à 1 ta sub ne marche pas pour ton form 0
c'est pour cela que je l'initialise à 0 et qu'il faut dans les autres "case" spécifier la condition
if NO%=0 then NO%=NO%+1
Edit :
Ce n'était qu'une ébauche.... ...et donc pas complète
Edit
on peut, pour éviter les répétitions, mettre
if Type%>1 and NO%=0 then NO%=NO%+1 avant le "select"
RE Edit
@ JL35,
Par simplicité, il est important à mes yeux que "form" soit en première ou en dernière position de la chaîne...
Dernière édition par ygeronimi le Dim 20 Jan 2013 - 0:28, édité 2 fois | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 0:27 | |
| Dans ce cas ça sera beaucoup de lignes de test - Code:
-
if NO%=0 then NO%=NO%+1 Si on initialise no% à 1 et on traite FORM 0 en dehors de la SUB, ne serait-il pas mieux ? EDIT : J'ai posté avant de voir ton EDIT !
Dernière édition par papydall le Dim 20 Jan 2013 - 0:31, édité 1 fois | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 0:30 | |
| j'ai fait un edit, on s'est croisé on peut écrire if Type%>1 and NO%=0 then NO%=NO%+1 avant le select Edit : là où tout se complique c'est quand on veut créer plusieurs objets identiques avec une boucle et des parmètres différents.... | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| | | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 0:42 | |
| J'ai chopé un rhume d'enfer et je carbure à l'actifed et au Doliprane Je ne sens plus mes neuronnes... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 0:46 | |
| J' en reviens à la déclaration de plusieurs objets identiques par un boucle on va devoir créer les objets retrouver le numéro de l'objet de départ refaire une boucle avec une indentation des attributs ( cas de plusieurs edit l'un sous l'autre où à côté de l'autre par exemple ) Pour les captions, il va falloir faire une boucle qui passe en revue tout les objets et applique le caption à l'objet d'après une lecture de data.... (cas de plusieurs alpha par exemple ) Edit : je ne suis pas sûr mais je pense que cela devrait ressembler à çà : - Code:
-
for x%=0 to Number_objects if object_type(x%)=6 y%=y%+1 restore for z%=1 to (Nombre de data) read a$ if right$(a$,len(a$)-1)="Alpha" then exit_for next z% for w%=1 to y% read a$ next w% caption x%,a$ end_if next x% | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 1:38 | |
| Regarde ceci: - Code:
-
label quit dim n_container% ,i%, j%
' Exemple d'appel de SUB Creat_Objet(....) Creat_Objet("container",1,400,500,10,50,0) n_container% = no% ' Appel de SUB Creat_Objet dans 2 boucles imbriquées avec paramètres calculés for i% = 1 to 5 for j% = 1 to 5 creat_objet("alpha",1,100,100,10+i%*50,10+(j%-1)*100,n_container%) caption no%,"ALPHA " + str$((i%-1)*5+j%) next j% next i% Creat_Objet("button",1,0,100,300,180,n_container%) caption no%,"QUIT" : on_click no%,quit inactive no% : message "CONTINUER" : active no% for i% = 1 to 25 font_bold i% : font_color i%,rnd(255),rnd(255),rnd(255) next i% end ' ****************************************************************************** quit: terminate return : ' cette commande n'est pas nécessaire, mais elle est là pour les règles de l'art !
' ***************************************************************************** ' Type$ indique le type de l'objet : FORM, ALPHA, EDIT etc... ' V% = 0 ---> l'objet sera invisible (HIDE); V% = 1 ---> l'objet sera visible (SHOW) ' H% ---> HEIGHT ; W% ---> WIDTH; T% ---> TOP; L% ---> LEFT ' P% ---> PARENT <--- La valeur 0 pour indiquer que l'objet n'a pas de parent (orphelin !!!) SUB Creat_Objet(Type$,V%,H%,W%,T%,L%,P%) If Variable("NO%") = 0 : Dim NO% : NO% = 1 : Else : NO% = NO% + 1 : End_If
if upper$(Type$) = "FORM" then Form NO% if upper$(type$) = "ALPHA" then Alpha NO% IF UPPER$(Type$) = "EDIT" then Edit NO% IF UPPER$(Type$) = "COMBO" then Combo NO% IF UPPER$(Type$) = "LIST" then List NO% IF UPPER$(Type$) = "DLIST" then Dlist NO% IF UPPER$(Type$) = "MEMO" then Memo NO% IF UPPER$(Type$) = "CONTAINER" then Container NO% IF UPPER$(Type$) = "CONTAINER_OPTION" then Container_Option NO% IF UPPER$(Type$) = "OPTION" then Option NO% IF UPPER$(Type$) = "CHECK" then Check NO% IF UPPER$(Type$) = "BUTTON" then Button NO% IF UPPER$(Type$) = "GRID" then Grid NO% IF UPPER$(Type$) = "PICTURE" then Picture NO% IF UPPER$(Type$) = "SOUND" then Sound NO% IF UPPER$(Type$) = "MOVIE" then Movie NO% IF UPPER$(Type$) = "IMAGE" then Image NO%
' Visibilité If V% < 1 Then hide NO% ' Dimensions If H% > 0 Then Height NO%,H% If W% > 0 Then Width NO%,W% ' Placement If NO% = 1 If T% > 0 : Top NO%,T% : Else : Top NO%,(Screen_y-H%)/2 : End_If If L% > 0 : Left NO%,L%: Else : Left NO%,(Screen_x-W%)/2: End_If Else If T% > 0 then Top NO%,T% If L% > 0 then Left NO%,L% End_If ' filiation If P% > 0 then Parent NO%,P% END_SUB ' ******************************************************************************
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 2:08 | |
| Effectivement on peut faire de cette façon, c'est trop compliqué... Je vais essayé de rajouter mon bout de code au tien... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 2:42 | |
| j'ai ajouté çà : - Code:
-
Sub Nom_alpha() dim_local x%,z%,a$ ' placement du point de lecture des datas à 0 restore ' recherche du début de la liste des captions pour les alphas for z%=1 to 26 read a$ if right$(a$,len(a$)-1)="Alpha" then exit_for next z% ' attribution des captions pour les alphas for x%=0 to Number_objects if object_type(x%)=6 read a$ caption x%,a$ end_if next x% end_sub
data "#Alpha" :data "georges" data "pierre" :data "stephane" data "paul" :data "cosmos" data "jacques":data "jl35" data "léon" :data "maelilou" data "nestor" :data "jjn4" data "jean" :data "jc" data "isidore":data "nardo" data "luc" :data "flower" data "papydall":data "claude" data "klaus" :data "marie" data "nicolas" :data "jpcr" data "robert" :data "jdebord" avec le simple appel : Nom_alpha() après la création | |
| | | papydall
Nombre de messages : 7017 Age : 74 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 13:15 | |
| Pourquoi pas puisque ça marche ! | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 14:58 | |
| le plus triste de cette sub , c'est que je ne me souviens pas de 25 panoramiciens régulier sur le forum | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 15:05 | |
| J'efface, j'avais pas vu la liste... mais c'est un peu nébuleux (pour moi), c'est vrai qu'avec la neige qui tombe sans arrêt... papydall, ça va ? fait pas trop froid en Tunisie ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 16:34 | |
| Avec les idées des uns et des autres additionnées aux miennes, j'en suis arrivé à ce résultat : - Code:
-
Objets("Button",1,50,20,200,150,0,"button") Objets("Alpha",1,10,10,0,0,0,"alpha") END
SUB Objets(obj$,V%,T%,L%,W%,H%,P%,C$) DIM_LOCAL indx% ' Numérotation If VARIABLE("No%")=0:Dim No% :No%=0:Else:No%=No%+1:End_If ' Création de l'objet IF VARIABLE("T_obj$") = 0 DIM T_obj$ T_obj$="01SCENE3D;02BUTTON;03EDIT;04MEMO;05COMBO;06ALPHA;07FORM;08LIST;09PICTURE;" T_obj$=T_obj$+"10CHECK;11OPTION;12MAIN_MENU;13SUB_MENU;14SOUND;15MOVIE;16TRACK_BAR;" T_obj$=T_obj$+"17OPEN_DIALOG;18SAVE_DIALOG;19SCROLL_BAR;20PROGRESS_BAR;21SPIN;" T_obj$=T_obj$+"22GRID;23CONTAINER;24;25;26DLIST;27SCENE2D;28TIMER;29;30;31;" T_obj$=T_obj$+"32CONTAINER_OPTION;33;34;35;36;37;38;39;40;41IMAGE;" END_IF indx% = INSTR(T_obj$,UPPER$(obj$)+";"): indx% = VAL(MID$(T_obj$,indx%-2,2)) if indx%<>7 and NO%=0 then NO%=NO%+1 SELECT indx% CASE 1: SCENE3D No% CASE 2: BUTTON No% :Caption No%,C$ CASE 3: EDIT No% CASE 4: MEMO No% CASE 5: COMBO No% CASE 6: ALPHA No% :Caption No%,C$ CASE 7: IF No%>0 THEN FORM No% :Caption No%,C$ CASE 8: LIST No% CASE 9: PICTURE No% CASE 10: CHECK No% :Caption No%,C$ CASE 11: OPTION No% :Caption No%,C$ CASE 12: MAIN_MENU No% CASE 13: SUB_MENU No% :Caption No%,C$ CASE 14: SOUND No% CASE 15: MOVIE No% CASE 16: TRACK_BAR No% CASE 17: OPEN_DIALOG No% CASE 18: SAVE_DIALOG No% CASE 19: SCROLL_BAR No% CASE 20: PROGRESS_BAR No% CASE 21: SPIN No% CASE 22: GRID No% CASE 23: CONTAINER No% :Caption No%,C$ CASE 26: DLIST No% CASE 27: SCENE2D No% CASE 28: TIMER No% CASE 32: CONTAINER_OPTION No% :Caption No%,C$ CASE 41: IMAGE No% END_SELECT ' Visibilité If V% = 0 Then hide NO% ' Dimensions If H% > 0 Then Height NO%,H% If W% > 0 Then Width NO%,W% ' Placement If indx% = 7 If T% > 0 : Top NO%,T% : Else : Top NO%,(Screen_y-H%)/2 : End_If If L% > 0 : Left NO%,L%: Else : Left NO%,(Screen_x-W%)/2: End_If Else If T% > 0 then Top NO%,T% If L% > 0 then Left NO%,L% End_If ' filiation If P% > 0 then Parent NO%,P% END_SUB J'ai ajouté la possibilité d'un caption défini dès l'appel mais que l'on peut laisser "vide" par "" J'ai dans l'idée qu'il serait bien que chaque objet puisse afficher son numéro par défaut dès son affichage. L'affichage pouvant être initialisé par la suite, cela faciliterai le job pour retrouver le numéro de chacun des objets par prévisualisation de l'interface. Qu'en pensez vous ?
Dernière édition par ygeronimi le Dim 20 Jan 2013 - 16:54, édité 1 fois (Raison : correction) | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 17:01 | |
| Salut Ygeronimi, - Citation :
- J'ai dans l'idée qu'il serait bien que chaque objet puisse afficher son numéro par défaut dès son affichage.
L'affichage pouvant être initialisé par la suite, cela faciliterai le job pour retrouver le numéro de chacun des objets par prévisualisation de l'interface. Oui, ou alors tu transformes le N° dobjet en une variable% explicite comme ci-dessous - Code:
-
Dim No%:no%=10 dim Grid_machin%:Cre_Objets("grid",1,50,20,400,150,0,"CONTAINER_OPTION"):Grid_machin%=no%
caption 0,Grid_machin% END
SUB Cre_Objets(obj$,V%,T%,L%,W%,H%,P%,C$) DIM_LOCAL indx% ' Numérotation No%=No%+1 ' Création de l'objet IF VARIABLE("T_obj$") = 0 DIM T_obj$ T_obj$="01SCENE3D;02BUTTON;03EDIT;04MEMO;05COMBO;06ALPHA;07FORM;08LIST;09PICTURE;" T_obj$=T_obj$+"10CHECK;11OPTION;12MAIN_MENU;13SUB_MENU;14SOUND;15MOVIE;16TRACK_BAR;" T_obj$=T_obj$+"17OPEN_DIALOG;18SAVE_DIALOG;19SCROLL_BAR;20PROGRESS_BAR;21SPIN;" T_obj$=T_obj$+"22GRID;23CONTAINER;24;25;26DLIST;27SCENE2D;28TIMER;29;30;31;" T_obj$=T_obj$+"32CONTAINER_OPTION;33;34;35;36;37;38;39;40;41IMAGE;" END_IF indx% = INSTR(T_obj$,UPPER$(obj$)+";"): indx% = VAL(MID$(T_obj$,indx%-2,2)) if indx%<>7 and NO%=0 then NO%=NO%+1 SELECT indx% CASE 1: SCENE3D No% CASE 2: BUTTON No% :Caption No%,C$ CASE 3: EDIT No% CASE 4: MEMO No% CASE 5: COMBO No% CASE 6: ALPHA No% :Caption No%,C$ CASE 7: IF No%>0 THEN FORM No% :Caption No%,C$ CASE 8: LIST No% CASE 9: PICTURE No% CASE 10: CHECK No% CASE 11: OPTION No% :Caption No%,C$ CASE 12: MAIN_MENU No% CASE 13: SUB_MENU No% :Caption No%,C$ CASE 14: SOUND No% CASE 15: MOVIE No% CASE 16: TRACK_BAR No% CASE 17: OPEN_DIALOG No% CASE 18: SAVE_DIALOG No% CASE 19: SCROLL_BAR No% CASE 20: PROGRESS_BAR No% CASE 21: SPIN No% CASE 22: GRID No% CASE 23: CONTAINER No% :Caption No%,C$ CASE 26: DLIST No% CASE 27: SCENE2D No% CASE 28: TIMER No% CASE 32: CONTAINER_OPTION No% :Caption No%,C$ CASE 41: IMAGE No% END_SELECT ' Visibilité If V% = 0 Then hide NO% ' Dimensions If H% > 0 Then Height NO%,H% If W% > 0 Then Width NO%,W% ' Placement If NO% = 1 If T% > 0 : Top NO%,T% : Else : Top NO%,(Screen_y-H%)/2 : End_If If L% > 0 : Left NO%,L%: Else : Left NO%,(Screen_x-W%)/2: End_If Else If T% > 0 then Top NO%,T% If L% > 0 then Left NO%,L% End_If ' filiation If P% > 0 then Parent NO%,P% END_SUB En tout cas je prends car çà simplifie la création d'objet. A+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Dim 20 Jan 2013 - 17:37 | |
| @ Jean Claude, Cela va bien si tu définis les attributs au fur et à mesure que tu crées les objets mais une fois qu'ils le sont tous et que tu veux changer un attribut ou te servir d' un objet pour récupérer ou afficher une valeur.... "heu...c'est quoi le numéro de celui là déjà....450 ou 700 " Edit : j'ai fait une correction, tu as pris le code d' avant celle ci | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 18:25 | |
| Pas mal la dernière mouture ygeronimi. Mais comme je disais, il me semble que pour moi je sortirais de la sub la définition du numéro de l'objet. Comme tu disais, si on veut intervenir après coup dans le code, ou bien utiliser les objets en cours de codage, il faut bien connaître le numéro des objets concernés: IF CHECKED(n1), TEXT$(n2) ... Il faut récupérer No% en sortie de sub, ce qui revient au même. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 20:46 | |
| Je ne vois pas le problème avec les N° d'objet sous forme Variable%
Moi, je ne code que comme cela. Supposons que nous ayons besoin d'un EDIT pour saisir un nom dans un carnet d'adresse. Je "l'appelle" (en réalité je le numérote) sous la forme Edit_Nom%, ainsi je mémorise l'objet et sa fonction sans avoir besoin de connaitre son véritable numéro. Dans le cas ou cet EDIT doit être utilisé plusieurs fois je le "nomme" Edit_01%.
La solution de JL35 de sortir le numéro (NO%) oui, mais çà change pas le problème il faut mémoriser que tel numéro correspond à l'edit situé en haut à gauche..... A+
| |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Quelques SUBs, en vrac Dim 20 Jan 2013 - 21:05 | |
| Tu as raison Jean Claude, c'est bien plus parlant avec un nom de variable, mais ça risque d'en faire beaucoup. C'est vrai qu'on n'est pas obligé de leur donner un nom à tous, seulement les plus utilisés. | |
| | | Contenu sponsorisé
| Sujet: Re: Quelques SUBs, en vrac | |
| |
| | | | Quelques SUBs, en vrac | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |