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 |
---|
bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 0:21 | |
| Merci pour ces quelques sub dont certaines vont m'être certainement très utiles! Ces derniers jours j'étais absent du forum... A+ | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 19 Jan 2013 - 13:44 | |
| Une petit début pour une sub objet - Code:
-
sub Objet(Type%,V%,H%,W%,T%,L%,P%) If Variable("NO%")=0:Dim NO% :NO%=0:Else:NO%=NO%+1:End_If Select Type% Case 1 ' Form If NO%>0 Then Form NO% Case 2 ' Alpha Alpha NO% Case 3 ' Edit Edit NO% Case 4 ' Combo Combo NO% case 5 ' List List NO% Case 6 ' Dlist Dlist NO% Case 7 ' Memo Memo NO% Case 8 ' Container Container NO% Case 9 ' Container option Container_Option NO% Case 10 ' Option Option NO% Case 11 ' Check Check NO% Case 12 ' Button Button NO% Case 13 ' Grid Grid NO% Case 14 ' Picture Picture NO% Case 15 ' Sound Sound NO% Case 16 ' Movie Movie NO% Case 17 ' Image Image NO% End_Select ' 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%=0 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 Type%=objet V%= Visible ou caché (1/0) Dimensions : H%=Height W%=Width Emplacement : T%=Top L%=Left Filiation : P%=Parent La valeur 0 est réservé pour "Sans Valeur", la valeur est donc celle par défaut de l'objet c'est un peu long à cause des commentaires et la liste des objets n'est pas complète. c'est une base de travail... Qu'en pensez vous ?
Dernière édition par ygeronimi le Sam 19 Jan 2013 - 23:54, édité 1 fois (Raison : correction) | |
| | | 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 - 16:43 | |
| Ygeronimi s’est remis au boulot ! Ce que tu as tenté est bien. Maintenant mes mais : LIGNE 2 , tu dois initialiser no% à 1 et non à 0 sinon ça ne marche pas. - Code:
-
If Variable("NO%")=0:Dim NO% :NO%=1:Else:NO%=NO%+1:End_If LIGNE 67 et 68 , change le signe = par une virgule - Code:
-
If T%>0 then Top NO%,T% If L%>0 then Left NO%,L% CONTINUE ! | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Quelques SUBs, en vrac Sam 19 Jan 2013 - 17:16 | |
| | |
| | | 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 - 20:25 | |
| La SUB Objet(….) crée par Ygeronimi me semble un peu difficile à utiliser. Je m’explique : Pour l’appeler on doit lui fournir (entre autres) un type. Or ce type est une valeur numérique définie ainsi : 1 pour une FORM 2 pour un ALPHA 3 pour un EDIT 4 pour un COMBO 5 pour une LIST etc.. Pratiquement est-ce qu’on peut retenir ces valeurs ? Moi non ! J’ai donc repris l’idée de Ygeronimi et j’ai modifié la procédure de telle sorte qu’on puisse l’appeler en lui transmettant comme type non pas une valeur numérique mais une chaîne de caractères explicite en appelant les objets par leur nom. Dans le code suivant, j’ai indiqué comment se fait l’appel. - Code:
-
label quit dim n_container%
' Exemple d'appel de SUB Creat_Objet(....)
Creat_Objet("container",1,400,400,10,50,0) n_container% = no% Creat_objet("alpha",1,100,100,100,100,n_container%) hint no%,"Je suis un ALPHA" : font_color no%,0,0,255 : caption no%,"UN ALPHA" Creat_Objet("MEMO",1,100,100,200, 100,n_container%) item_add no%,"Je suis un MEMO" Creat_Objet("LIST",1,150,160,10,200,n_container%) item_add no%,"Je suis une liste" : item_add no%,"" item_add no%,"1er élément de liste" : item_add no%,"2ème élément de liste" Creat_Objet("button",1,0,150,300,220,n_container%) caption no%,"Je suis bon à cliquer !" : on_click no%,quit
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 ' ******************************************************************************
C’est à vous de réagir si ça vous intéresse. | |
| | | 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) | |
| | | 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
| |
| |
| |