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 |
|
|
| Timer qui ne veut pas faire son boulot | |
| | Auteur | Message |
---|
Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 11:49 | |
| Bonjour, HEELLLLLLPPPPPP !!!! Je rencontre un problème sur un petit programme de démo. Et je n'arrive pas à trouver de solutions.... Quelqu'un peut m'aider ? Les sources sont sur le site myDrive.ch - username:panoramic@nardo26 - password :panoramic123 Panoramic\couleur\demo_02.bas Panoramic\lib\system.bas Panoramic\lib\couleur.bas Le problème se situe dans mon programme demo_02.bas: j'ai un timer qui execute une procédure pSurvol. Cette procédure doit mettre à jour des objets Alpha avec les composantes RGB d'un PICTURE survolé par la souris. Résultat : le timer s'exécute bien (j'ai rajouté un compteur d'execution qui s'affiche dans le caption de mon formulaire) mais les champs Alpha ne sont pas mis à jour ! c'est comme si une partie du code n'était pas exécutée.... Ca doit être gros comme une maison, mais je ne trouve pas !!! | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 12:11 | |
| Je n'ai pas téléchargé ton projet, mais il y a un problème à la base: tu ne peux pas obtenir la couleur d'un pixel sous le curseur, en survolant un ALPHA ! Tu peux seulement obtenir la position. Mon petit code met cela en évidence: je prends la couleur de la form 0 et la position sur un alpha. Si, à la place de la position sur l'alpha, tu veux afficher la couleur, tu as un message d'erreur disant que cela ne s'applique pas à cet objet. D'illeurs, la doc dit bien que tu peux utiliser cela sur une FORM et un PICTURE, mais pas sur un ALPHA ! voici le code (sortir par Echap): - Code:
-
dim s1$, s2$, x0%, y0% alpha 10 : top 10,20 : left 10,20 font_name 10,"Arial" : font_size 10,36 font_bold 10 : font_color 10,255,0,0 caption 10,"test de survol"
while scancode<>27 x0% = mouse_x_position(0) y0% = mouse_y_position(0) s1$ = str$(color_pixel_red(0,x0%,y0%))+","+str$(color_pixel_green(0,x0%,y0%))+","+str$(color_pixel_blue(0,x0%,y0%)) x0% = mouse_x_position(10) y0% = mouse_y_position(10) ' s1$ = str$(color_pixel_red(10,x0%,y0%))+","+str$(color_pixel_green(10,x0%,y0%))+","+str$(color_pixel_blue(10,x0%,y0%)) s2$ = str$(x0%)+","+str$(y0%) caption 0,s1$+" "+s2$ display end_while end
| |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 12:49 | |
| Bonjour Nardo, J'ai juste rajouté une ligne: Picture 100:full_space 100 au début de ton programme. - Code:
-
DIM TITLE$:TITLE$="Test librairie couleur" DIM DEBUG:DEBUG=0 APPLICATION_TITLE TITLE$
CAPTION 0,TITLE$
IF (LABEL("SysInit")=0) #INCLUDE "c:\1d\system.bas" END_IF GOSUB SysInit
IF (LABEL("ColInit")=0) #INCLUDE "c:\1d\couleur.bas" END_IF
DIM R,G,B,H,S,V DIM a,rd DIM x,y DIM TxtRGB(3)
DIM PaletteSize:PaletteSize=100 WIDTH 0,PaletteSize*2:HEIGHT 0,PaletteSize*2 TOP 0,SCREEN_Y-HEIGHT(0)-SysCaptionHeight : LEFT 0,10 picture 100 :full_space 100 DIM Palette:GOSUB SysNewObject :Palette = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack PICTURE Palette:WIDTH Palette,PaletteSize:HEIGHT Palette,PaletteSize:TOP Palette,10
' Couleur identique à la couleur de fond du formulaire COLOR Palette,COLOR_PIXEL_RED(0,110,0),COLOR_PIXEL_GREEN(0,110,0),COLOR_PIXEL_BLUE(0,110,0)
' Définition des alpha RGB FOR a=0 TO 2 GOSUB SysNewObject TxtRGB(a) = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack ALPHA TxtRGB(a): LEFT TxtRGB(a),WIDTH(Palette)+5 TOP TxtRGB(a),(a*20)+TOP(Palette) CAPTION TxtRGB(a),MID$("RGB",a+1,1)+":" NEXT a ' On dessine le cercle chromatique : ' pour cela on va jouer sur la teinte 2D_TARGET_IS Palette :2D_PEN_WIDTH 2 H=1:S=1:V=1 FOR a=0 TO 360 rd = (a*ATN(1))/45 : ' conversion degres->radians x=(PaletteSize/2)+(cos(rd)*((PaletteSize/2)-2)) : y=(PaletteSize/2)+(sin(rd)*((PaletteSize/2)-2)) H=H-(1/360) : ' on fait varier la teinte (0 à 360°) Teinte=Hue en anglais ' conversion HSV -> RGB ITEM_ADD SysStack,STR$(H):ITEM_ADD SysStack,STR$(S):ITEM_ADD SysStack,STR$(V):GOSUB HSV_2_RGB R=VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack G=VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack B=VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack 2D_PEN_COLOR R,G,B:2D_LINE (PaletteSize/2),(PaletteSize/2),x,y:DISPLAY NEXT a
' on défini un timer pour la détermination de la couleur lors du survol de la palette LABEL pSurvol DIM t$ DIM tPalette:GOSUB SysNewObject :tPalette = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack TIMER tPalette:TIMER_OFF tPalette: TIMER_INTERVAL tPalette,100:ON_TIMER tPalette,pSurvol
TIMER_ON tPalette END
pSurvol: TIMER_OFF tPalette t$=STR$(COLOR_PIXEL_RED(Palette,MOUSE_X_POSITION(Palette),MOUSE_Y_POSITION(Palette))) IF LEN(t$)<3 THEN t$=STRING$(3-LEN(t$),"0")+t$ CAPTION TxtRGB(0),"R:"+t$ t$=STR$(COLOR_PIXEL_GREEN(Palette,MOUSE_X_POSITION(Palette),MOUSE_Y_POSITION(Palette))) IF LEN(t$)<3 THEN t$=STRING$(3-LEN(t$),"0")+t$ CAPTION TxtRGB(1),"G:"+t$ t$=STR$(COLOR_PIXEL_BLUE(Palette,MOUSE_X_POSITION(Palette),MOUSE_Y_POSITION(Palette))) IF LEN(t$)<3 THEN t$=STRING$(3-LEN(t$),"0")+t$ CAPTION TxtRGB(2),"B:"+t$ a=a+1 : CAPTION 0,STR$(a):' debug TIMER_ON tPalette RETURN
Ta palette chromatique est vachement bien faite! Par contre, quand on la redimensionne, j'ai essayé avec la valeur 200 ==> PaletteSize=200, on voit quand même quelques petits points blancs (couleur de fond du picture) en bas coté gauche. Merci, Bonne journée à toi! Edit: Je viens de voir juste le post précédent de Klaus. Evidemment, il a raison, puisque j'ai rajouté le picture! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 13:09 | |
| - Nardo26 a écrit:
- ...Cette procédure doit mettre à jour des objets Alpha avec les composantes RGB d'un PICTURE survolé par la souris.
C'est bien pour le survol d'un objet PICTURE que cela ne marche pas.... Et je vois pas pourquoi cela coince... @bignono: il faut que tu modifie la valeur du 2D_PEN_WIDTH... Est-ce que chez toi, tu vois les valeurs RGB changer lors du survol du picture ? Tu n'as pas besoin de déclarer un picture puisque celle-ci l'est déja 2 lignes en dessous de ta declaration... - Citation :
- DIM Palette:GOSUB SysNewObject :Palette = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack
PICTURE Palette:WIDTH Palette,PaletteSize:HEIGHT Palette,PaletteSize:TOP Palette,10 En fait ta modif n'est pas prise en compte car le 2D_TARGET_IS déclare Palette comme étant la cible du 2D_LINE... | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 13:37 | |
| Aussi bizarre que cela puisse paraître, en déclarant le picture 100, les valeurs RGB changent lorsque je survole la palette. Le picture palette ne doit pas être actif dans ton programme demo_02.bas. Tu fais appel aux routines dans l'include je crois. Au retour, j'ai pas regardé en détail tes includes, est-ce que les données sont bonnes pour "WIDTH Palette,PaletteSize:HEIGHT Palette,PaletteSize:TOP Palette,10"? Pour 2_pen_width ça marche! j'avais pas vu! [img] [/img] Sur l'image j'ai R:255, G:080 et B:000 | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 14:17 | |
| Si ça peut t'aider, j'ai enlevé la ligne picture 100:... et j'ai juste mis après la ligne picture palette: ...etc... print palette et là au survol de la souris, les valeurs R G B changent! Et même encore plus bizarre! - Code:
-
DIM PaletteSize:PaletteSize=200 WIDTH 0,PaletteSize*2:HEIGHT 0,PaletteSize*2 TOP 0,SCREEN_Y-HEIGHT(0)-SysCaptionHeight : LEFT 0,10 ' picture 2 :full_space 2 DIM Palette:GOSUB SysNewObject :Palette = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack PICTURE Palette:WIDTH Palette,PaletteSize:HEIGHT Palette,PaletteSize:TOP Palette,10 ' print_target_is palette print palette
si j'enlève la ligne de rem print_target_is palette, ça ne marche plus! J'y comprend rien! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 14:19 | |
| Oui les données sont correctes. Aussi bizarre que cela puisse paraitre, je viens de déclarer la picture Palette APRES les alphas et cela fonctionne.... Pourquoi ?.... voir commentaire en ligne 26... - Code:
-
DIM TITLE$:TITLE$="Test librairie couleur" DIM DEBUG:DEBUG=0 APPLICATION_TITLE TITLE$
CAPTION 0,TITLE$
IF (LABEL("SysInit")=0) #INCLUDE "..\lib\system.bas" END_IF GOSUB SysInit
IF (LABEL("ColInit")=0) #INCLUDE "..\lib\couleur.bas" END_IF
DIM R,G,B,H,S,V DIM a,rd DIM x,y DIM TxtRGB(3)
DIM PaletteSize:PaletteSize=200 WIDTH 0,PaletteSize*2:HEIGHT 0,PaletteSize*2 TOP 0,SCREEN_Y-HEIGHT(0)-SysCaptionHeight : LEFT 0,10
' Définition des alpha RGB ' Note : si je déplace la boucle en dessous de la ligne 37, cela ne marche pas ! FOR a=0 TO 2 GOSUB SysNewObject TxtRGB(a) = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack ALPHA TxtRGB(a): LEFT TxtRGB(a),PaletteSize+5 TOP TxtRGB(a),(a*20)+5 CAPTION TxtRGB(a),MID$("RGB",a+1,1)+":" NEXT a
DIM Palette:GOSUB SysNewObject :Palette = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack PICTURE Palette:WIDTH Palette,PaletteSize:HEIGHT Palette,PaletteSize:TOP Palette,10
' Couleur identique à la couleur de fond du formulaire a=PaletteSize+TOP(Palette)+1 COLOR Palette,COLOR_PIXEL_RED(0,0,a),COLOR_PIXEL_GREEN(0,0,a),COLOR_PIXEL_BLUE(0,0,a) 2D_TARGET_IS Palette :2D_PEN_WIDTH 3
' On dessine le cercle chromatique : pour cela on va jouer sur la teinte H=1:S=1:V=1 FOR a=0 TO 360 rd = (a*ATN(1))/45 : ' conversion degres->radians x=(PaletteSize/2)+(cos(rd)*((PaletteSize/2)-2)) : y=(PaletteSize/2)+(sin(rd)*((PaletteSize/2)-2)) H=H-(1/360) : ' on fait varier la teinte (0 à 360°) Teinte=Hue en anglais ' conversion HSV -> RGB ITEM_ADD SysStack,STR$(H):ITEM_ADD SysStack,STR$(S):ITEM_ADD SysStack,STR$(V):GOSUB HSV_2_RGB R=VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack G=VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack B=VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack 2D_PEN_COLOR R,G,B:2D_LINE (PaletteSize/2),(PaletteSize/2),x,y:DISPLAY NEXT a ' on défini un timer pour la détermination de la couleur lors du survol de la palette LABEL pSurvol DIM tPalette:GOSUB SysNewObject :tPalette = VAL(ITEM_READ$(SysStack,COUNT(SysStack))):GOSUB SysClrStack TIMER tPalette:TIMER_OFF tPalette: TIMER_INTERVAL tPalette,100:ON_TIMER tPalette,pSurvol
TIMER_ON tPalette END
pSurvol: TIMER_OFF tPalette DIM t$ t$=STR$(COLOR_PIXEL_RED(Palette,MOUSE_X_POSITION(Palette),MOUSE_Y_POSITION(Palette))) IF LEN(t$)<3 THEN t$=STRING$(3-LEN(t$),"0")+t$ CAPTION TxtRGB(0),"R:"+t$ t$=STR$(COLOR_PIXEL_GREEN(Palette,MOUSE_X_POSITION(Palette),MOUSE_Y_POSITION(Palette))) IF LEN(t$)<3 THEN t$=STRING$(3-LEN(t$),"0")+t$ CAPTION TxtRGB(1),"G:"+t$ t$=STR$(COLOR_PIXEL_BLUE(Palette,MOUSE_X_POSITION(Palette),MOUSE_Y_POSITION(Palette))) IF LEN(t$)<3 THEN t$=STRING$(3-LEN(t$),"0")+t$ CAPTION TxtRGB(2),"B:"+t$ FREE t$ TIMER_ON tPalette RETURN | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 14:21 | |
| Pourquoi PRINT_TARGET ? -> j'utilise 2D_TARGET... pour definir où mes 2D_LINE doivent être faites.... EDIT: J'avais pas vu ton print... j'ai l'impression que si on declare des objets après une PICTURE, les COLOR_PIXEL_####(N,X,Y) ne fonctionne pas : est-ce que le paramètre N est vraiment pris en compte ? on dirais que COLOR_PIXEL_#### se base sur le dernier objet déclaré et là, cela expliquerai que cela ne marche pas... | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 14:28 | |
| Alors là, définir les alpha avant le picture! | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Timer qui ne veut pas faire son boulot Ven 17 Fév 2012 - 14:54 | |
| Je viens de faire un autre test: - Code:
-
DIM i PICTURE 1:HEIGHT 1,128: 2D_TARGET_IS 1 COLOR 1,128,128,128 FOR i=0 to 127 2D_PEN_COLOR 128+i,128+i,128+i:2D_LINE 0,i,105,i NEXT i ALPHA 2:TOP 2,130 :CAPTION 2,"Appuyez sur une touche pour quitter" WHILE INKEY$="" CAPTION 0,STR$(COLOR_PIXEL_RED(1,MOUSE_X_POSITION(1),MOUSE_Y_POSITION(1))) END_WHILE TERMINATE ...et ça marche ! J'y comprend plus rien !! | |
| | | Jack Admin
Nombre de messages : 2395 Date d'inscription : 28/05/2007
| Sujet: Re: Timer qui ne veut pas faire son boulot Dim 19 Fév 2012 - 12:32 | |
| - Citation :
- les COLOR_PIXEL_####(N,X,Y) ne fonctionne pas : est-ce que le paramètre N est vraiment pris en compte ?
on dirais que COLOR_PIXEL_#### se base sur le dernier objet déclaré et là, cela expliquerai que cela ne marche pas... @Nardo26 Je n'ai pas encore regardé ton source mais je peux t'assurer que les fonctions COLOR_PIXEL_xxx fonctionnent correctement et utilisent correctement le numéro d'objet. | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Timer qui ne veut pas faire son boulot Lun 20 Fév 2012 - 8:34 | |
| Merci Jack de ta réponse, J'en suis arrivé à la même conclusion... Je ne vois toujours pas où se trouve mon erreur... Est-ce les librairies qui perturbent le bon fonctionnement du programme de démo ? La manière dont je fais mes includes ? J'ai bien une solution provisoire en changeant l'ordre de déclaration de mes objets, mais cela ne me satisfait pas car cela signifie que je ne peux pas faire confiance en mes librairies... et tant que je n'aurais pas résolut ce problème, je ne continuerai pas le developpement de celles-ci (et employer cette méthode d'écriture... ) | |
| | | Contenu sponsorisé
| Sujet: Re: Timer qui ne veut pas faire son boulot | |
| |
| | | | Timer qui ne veut pas faire son boulot | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |