Mai 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 | 31 | | | Calendrier |
|
| | Comment récupérer le N° de l'objet sous la souris ? [Résolu] | |
| | Auteur | Message |
---|
papydall
Nombre de messages : 7004 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Comment récupérer le N° de l'objet sous la souris ? [Résolu] Sam 23 Mai 2020 - 5:06 | |
| Comment récupérer le N° de l'objet sous la souris ? - Code:
-
dim i label move for i = 10 to 30 step 10 button i : top i,50 : left i,10*i : caption i,str$(i) : on_mouse_move i,move next i end rem ============================================================================ Move: ' Dans l'hypothèse où j'ai déplacé la souris sur le bouton 20, existe-il ' un moyen simple pour récupérer le N° du bouton sous la souris qui est 20 ? return rem ============================================================================
Je peux déterminer les coordonnées de la souris par x = mouse_x_position(0) y = mouse_y_position(0)puis comparer x et y avec les différentes plages des coordonnes des différents boutons, mais pour un nombre de boutons supérieur à 2 ou 3 (voir plus), la tâche devient décourageante. REM : ce n’est pas obligatoire que l’objet soin un button. Tout autre objet peut faire l’affaire à condition qu’il accepte les commandes ON_MOUSE_MOVE et ON_CLICK
Dernière édition par papydall le Dim 24 Mai 2020 - 22:58, édité 2 fois | |
| | | Pedro
Nombre de messages : 1555 Date d'inscription : 19/01/2014
| Sujet: Récupération de l'objet sous la souris. Sam 23 Mai 2020 - 8:04 | |
| Bonjour. Il semble que la commande number_mouse_move soit inactive, bien qu'elle soit prévue dans la version V 0.9.29i7 du 15/03/2019 !! - Code:
-
dim x%
button 1 button 2:left 2,300 while 0=0 caption 0,str$(number_mouse_move) end_while | |
| | | silverman
Nombre de messages : 968 Age : 51 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Comment récupérer le N° de l'objet sous la souris ? [Résolu] Sam 23 Mai 2020 - 10:28 | |
| Pedro a raison, Jack a codé des commandes pour les derniers events. Il s'agit de NUMBER_MOUSE_MOVE, NUMBER_MOUSE_DOWN, NUMBER_MOUSE_UP. Mais il a tellement trifouillé la version 0929i9 qui affolait les antivirus que ces fonctions(et peut être d'autres aussi) ne marchent plus C'est pour cette raison que je suis repassé à la version 0929i8. EDIT : Pour mémoire, voici une liste des commandes/fonctions. Elle contient celles que l'on a un peu perdu de vue en route mais aussi des non documentées(avis aux testeurs et aux curieux ): - Code:
-
2D_ARC 2D_CIRCLE 2D_CLEAR 2D_ELLIPSE 2D_FILL_COLOR 2D_FILL_CROSS 2D_FILL_DIAGONAL_CROSS 2D_FILL_DIAGONAL_DOWN 2D_FILL_DIAGONAL_UP 2D_FILL_HORIZONTAL 2D_FILL_OFF 2D_FILL_ON 2D_FILL_SOLID 2D_FILL_VERTICAL 2D_FLOOD 2D_IMAGE_COPY 2D_IMAGE_PASTE 2D_LINE 2D_PEN_COLOR 2D_PEN_DASH 2D_PEN_DASH_DOT 2D_PEN_DASH_DOT_DOT 2D_PEN_DOT 2D_PEN_SOLID 2D_PEN_WIDTH 2D_POINT 2D_POLY_FROM 2D_POLY_TO 2D_RECTANGLE 2D_TARGET_IS 3D_ACTOR 3D_ANIMATION_LOOP :' NON TESTÉ 3D_ANIMATION_PLAY :' NON TESTÉ 3D_ANIMATION_STOP :' NON TESTÉ 3D_BOX 3D_CHAIN 3D_CHAIN_BREAK 3D_COLLISION_AS_CUBE 3D_COLLISION_AS_ELLIPSOID 3D_COLLISION_AS_FACES 3D_COLLISION_AS_POINT 3D_COLLISION_AS_SPHERE 3D_COLOR 3D_CONE 3D_CUBE 3D_CYLINDER 3D_DELETE 3D_DELETE_ALL 3D_DODECAHEDRON 3D_HIDE 3D_IMAGE_TEXTURE 3D_LINE 3D_LINE_WIDTH 3D_LOAD_OBJECT 3D_LOAD_TEXTURE 3D_LOAD_TEXTURE_BACK 3D_LOAD_TEXTURE_BOTTOM 3D_LOAD_TEXTURE_FRONT 3D_LOAD_TEXTURE_LEFT 3D_LOAD_TEXTURE_RIGHT 3D_LOAD_TEXTURE_TOP 3D_MESH 3D_MOVE 3D_PLANE 3D_POINT_OBJECT 3D_POSITION 3D_ROTATE 3D_SCALE 3D_SHOW 3D_SKYBOX 3D_SPHERE 3D_TARGET_IS 3D_TEAPOT 3D_TEXT 3D_TEXT_CHANGE 3D_TORUS 3D_TRANSPARENT 3D_U_TILE 3D_V_TILE 3D_X_POSITION 3D_X_ROTATE 3D_X_SCALE 3D_Y_POSITION 3D_Y_ROTATE 3D_Y_SCALE 3D_Z_POSITION 3D_Z_ROTATE 3D_Z_SCALE ABS ACOS ACTIVE ADR ADR_VARTAB :' POUR TABLEAU ALPHA AND APPLICATION_TITLE ARCHIVER_ADD ARCHIVER_EXTRACT ARCHIVER_OFF ARCHIVER_ON ASC ASIN ATN AXES_HIDE AXES_SHOW BAR_BOTH BAR_HORIZONTAL BAR_NONE BAR_VERTICAL BEEP BEEP_ERROR BEEP_EXCLAMATION BEEP_INFORMATION BEEP_QUESTION BIN_AND BIN_OR BIN_XOR BORDER_COLOR :' SHAPE BORDER_HIDE BORDER_NORMAL BORDER_SMALL BORDER_WIDTH :' SHAPE BRIGHTNESS BUTTON BUTTON_PICTURE BUTTON_PICTURE_TARGET_IS_OBJECT BUTTON_PICTURE_TARGET_IS_PICTURE CAM_MOVE CAM_PITCH CAM_POSITION CAM_ROLL CAM_TURN CAM_X_POSITION CAM_Y_POSITION CAM_Z_POSITION CAPTION CAPTION$ CARET_POSITION CARET_X_POSITION :' POUR MEMO,MEMO_RICH,SYNEDIT CARET_Y_POSITION :' POUR MEMO,MEMO_RICH,SYNEDIT CASE CHAIN CHART CHART_BAR CHART_LINE CHART_POINT CHECK CHECKED CHECKED_MENU CHECKED_OPTION CHR$ CLEAR CLICKED CLIPBOARD_COPY CLIPBOARD_CUT CLIPBOARD_PASTE CLIPBOARD_STRING_COPY CLIPBOARD_STRING_PASTE$ CLOSE_ACTIVE :' POUR CROIX DE FERMETURE DU FORM 0 CLOSE_INACTIVE :' POUR CROIX DE FERMETURE DU FORM 0 CLS COLOR COLOR_PIXEL_BLUE COLOR_PIXEL_GREEN COLOR_PIXEL_RED COMBO COMMAND :' POUR LIBRARY COMMAND_TARGET_IS CONTAINER CONTAINER_OPTION CONTAINER_TAB CONTENT_COPY CONTRAST COS COUNT CREATE_HIDE CREATE_SHOW CURSOR_ARROW CURSOR_BEAM CURSOR_CROSS CURSOR_DEFAULT CURSOR_HELP CURSOR_HIDE CURSOR_HOURGLASS CURSOR_NOPARKING CURSOR_POINT CURVE_ANGLE :' angle_courant=CURVE_ANGLE(angle_cible,angle_courant,vitesse) CURVE_VALUE :' v_courante=CURVE_VALUE(v_cible,v_courante,vitesse) DATA DATE$ DATE_DAY DATE_MONTH DATE_YEAR DEGREE_TO_RADIAN DEGREES DELETE DELETE_ALL DIGIT1 DIM DIM_LOCAL DIR_CHANGE DIR_CURRENT$ DIR_DIALOG DIR_EXISTS DIR_MAKE DIR_REMOVE DISK_EXISTS DISK_KILO_FREE DISK_KILO_SIZE DISPLAY DLIST DLL_CALL0 DLL_CALL1 DLL_CALL2 DLL_CALL3 DLL_CALL4 DLL_CALL5 DLL_CALL6 DLL_OFF DLL_ON DLL_PROCEDURE :' DLL_PROCEDURE N,N,... ? DO DOUBLE_CLICKED DROP_DOWN :' COMBO, MAIN_MENU_POP EDIT ELSE END END_FNC END_IF END_SELECT END_SUB END_WHILE ENVIRONMENT$ ERROR_ENGLISH ERROR_FRENCH ERROR_LINE ERROR_NUMBER ERROR_TYPE$ EVEN EXCEL_FILE_CLOSE EXCEL_FILE_NEW EXCEL_FILE_OPEN EXCEL_FILE_SAVE :' NON TESTÉ EXCEL_FILE_TARGET_IS :' NON TESTÉ EXCEL_READ$ EXCEL_READ_FORMULA$ :' NON TESTÉ EXCEL_READ_MATRIX$ :' NON TESTÉ EXCEL_READ_MATRIX_FORMULA$ :' NON TESTÉ EXCEL_SHEET_TARGET_IS :' NON TESTÉ EXCEL_START EXCEL_STOP EXCEL_WRITE EXCEL_WRITE_FORMULA :' NON TESTÉ EXCEL_WRITE_MATRIX :' NON TESTÉ EXCEL_WRITE_MATRIX_FORMULA :' NON TESTÉ EXECUTE EXECUTE_WAIT EXIT_FNC EXIT_FOR EXIT_REPEAT EXIT_SUB EXIT_WHILE EXP FILE_ADD FILE_ARCHIVE FILE_ARCHIVE_OFF FILE_CLOSE FILE_COPY FILE_DELETE FILE_DIALOG FILE_EOF FILE_EXISTS FILE_EXTRACT_DISK$ FILE_EXTRACT_EXTENSION$ FILE_EXTRACT_NAME$ FILE_EXTRACT_PATH$ FILE_FIND_CLOSE FILE_FIND_FIRST$ FILE_FIND_NEXT$ FILE_HIDE FILE_HIDE_OFF FILE_LOAD FILE_MOVE FILE_NAME$ FILE_OPEN_APPEND FILE_OPEN_READ FILE_OPEN_WRITE FILE_READ FILE_READ$ :' NON TESTÉ FILE_READ_ONLY FILE_READ_ONLY_OFF FILE_READBUF FILE_READLN FILE_READLN$ FILE_RENAME FILE_SAVE FILE_SYSTEM FILE_SYSTEM_OFF FILE_VARIABLES :' NON TESTÉ FILE_WRITE FILE_WRITEBUF FILE_WRITELN FILEBIN_BLOCK_READ FILEBIN_BLOCK_WRITE FILEBIN_CLOSE FILEBIN_HEXA_READ FILEBIN_HEXA_READ$ FILEBIN_HEXA_WRITE FILEBIN_OPEN_READ FILEBIN_OPEN_WRITE FILEBIN_POS FILEBIN_POSITION FILEBIN_READ FILEBIN_SIZE FILEBIN_WRITE FILTER FIND FNC FOG_COLOR FOG_DISTANCE_MAX FOG_DISTANCE_MIN FOG_OFF FOG_ON FONT_BOLD FONT_BOLD_OFF FONT_COLOR FONT_ITALIC FONT_ITALIC_OFF FONT_NAME FONT_NAMES_ADD FONT_NAMES_LOAD FONT_SIZE FONT_STRIKE FONT_STRIKE_OFF FONT_UNDERLINE FONT_UNDERLINE_OFF FOR FORM FRAC FREE FULL_SPACE FUNCTION :' POUR LIBRARY GAMMA GOSUB GOTO GRID GRID_CLEAR GRID_COLUMN GRID_COLUMN_DELETE GRID_COLUMN_FIXED GRID_COLUMN_INSERT GRID_COLUMN_SIZING_OFF GRID_COLUMN_SIZING_ON GRID_COLUMN_WIDTH GRID_FIXED_COLOR GRID_LOAD GRID_ONE_COLUMN_WIDTH GRID_ONE_ROW_HEIGHT GRID_READ$ GRID_ROW GRID_ROW_DELETE GRID_ROW_FIXED GRID_ROW_HEIGHT GRID_ROW_INSERT GRID_ROW_SIZING_OFF GRID_ROW_SIZING_ON GRID_SAVE GRID_WRITE GRID_X_TO_COLUMN GRID_Y_TO_ROW HANDLE HANDLE_APPLICATION HANDLE_CANVAS HANDLE_FORM HCOS HEIGHT HEIGHT_CLIENT HEX HEX$ HIDE HIDE_ALL HINT HINT_HIDE HORIZONTAL HSIN HTAN HVIEWER IF IMAGE INACTIVE INCLUDE INKEY$ INPUT INPUT_MARK_OFF INPUT_MARK_ON INPUT_REDO_OFF INPUT_REDO_ON INPUT_SOURCE_IS INPUT_VISIBLE_OFF INPUT_VISIBLE_ON INSERT$ INSTR INSTR_LAST INSTR_POS INSTR_RIGHT INT ITEM_ADD ITEM_DELETE ITEM_INDEX ITEM_INDEX$ ITEM_INSERT ITEM_READ$ ITEM_SELECT KEY_DOWN_CODE KEY_DOWN_SPECIAL KEY_UP_CODE KEY_UP_SPECIAL LABEL LED1 LEFT LEFT$ LEN LIBRARY LIBRARY$ LIGHT_POSITION LIGHT_X_POSITION LIGHT_Y_POSITION LIGHT_Z_POSITION LIST LOG LOG10 LOG2 LOWER$ LTRIM$ MAIL_SEND MAIN_MENU MAIN_MENU_POP MARK_OFF MARK_ON MAX MAXIMIZE MEMO MEMO_RICH MESSAGE MESSAGE_CONFIRMATION_OK MESSAGE_CONFIRMATION_YES_NO MESSAGE_ERROR_OK MESSAGE_ERROR_YES_NO MESSAGE_INFORMATION_OK MESSAGE_INFORMATION_YES_NO MESSAGE_INPUT MESSAGE_INPUT$ MESSAGE_SEND :' MESSAGE_SEND 0,1,2,3,4 NON TESTÉ MESSAGE_TEXT$ MESSAGE_WARNING_OK MESSAGE_WARNING_YES_NO MID$ MIDI_INSTRUMENT MIDI_OFF MIDI_ON MIDI_PLAY MIDI_VOLUME MIN MINIMIZE MOD MOUSE_LEFT_DOWN MOUSE_LEFT_UP MOUSE_RIGHT_DOWN MOUSE_RIGHT_UP MOUSE_X_LEFT_DOWN MOUSE_X_LEFT_UP MOUSE_X_POSITION MOUSE_X_RIGHT_DOWN MOUSE_X_RIGHT_UP MOUSE_Y_LEFT_DOWN MOUSE_Y_LEFT_UP MOUSE_Y_POSITION MOUSE_Y_RIGHT_DOWN MOUSE_Y_RIGHT_UP MOVIE NEXT NORMAL NOT NUMBER_2D_TARGET NUMBER_3D_OBJECTS NUMBER_3D_TARGET NUMBER_ACTIVATE NUMBER_CHANGE NUMBER_CLICK NUMBER_COMMAND_TARGET NUMBER_CURRENT_LINE NUMBER_DOUBLE_CLICK NUMBER_EVENTS NUMBER_INPUT_SOURCE NUMBER_KEY_DOWN NUMBER_KEY_UP NUMBER_MOUSE_DOWN NUMBER_MOUSE_MOVE NUMBER_MOUSE_UP NUMBER_OBJECTS NUMBER_PRINT_TARGET NUMBER_SHOW NUMBER_SPRITE_TARGET NUMBER_SPRITES NUMBER_TICKS NUMBER_VARIABLES NUMERIC O3D_ANIMATION_COUNT :' NON TESTÉ O3D_ANIMATION_FRAME_COUNT :' NON TESTÉ O3D_ANIMATION_FRAME_END :' NON TESTÉ O3D_ANIMATION_FRAME_START :' NON TESTÉ O3D_COLLISION O3D_FRAME_COUNT :' NON TESTÉ O3D_OBJECT_EXISTS O3D_OBJECT_TYPE O3D_X_POSITION O3D_X_ROTATE O3D_X_SCALE O3D_Y_POSITION O3D_Y_ROTATE O3D_Y_SCALE O3D_Z_POSITION O3D_Z_ROTATE O3D_Z_SCALE OBJECT_EXISTS OBJECT_INTERNAL OBJECT_PARENT OBJECT_TYPE OFF_ACTIVATE OFF_CHANGE OFF_CLICK OFF_CLOSE OFF_DOUBLE_CLICK OFF_ERROR_GOTO OFF_KEY_DOWN OFF_KEY_UP OFF_MOUSE_DOWN OFF_MOUSE_MOVE OFF_MOUSE_UP OFF_MOVE OFF_RESIZE OFF_SHOW OFF_USER_EVENT ON_ACTIVATE ON_CHANGE ON_CLICK ON_CLOSE ON_DOUBLE_CLICK ON_ERROR_GOTO ON_KEY_DOWN ON_KEY_UP ON_MOUSE_DOWN ON_MOUSE_MOVE ON_MOUSE_UP ON_MOVE ON_RECEIVE ON_RESIZE ON_SHOW ON_TIMER ON_USER_EVENT OPEN_DIALOG OPEN_DIALOG_PIC OPTION OR PANEL PARALLEL_INP PARALLEL_OFF PARALLEL_ON PARALLEL_OUT PARAM_NUMBER PARAM_VALUE$ PARENT PAUSE PEEK PEEK_NORMAL PEEK_REVERSE PEEK16 PEEK32 PI PICTURE PICTURE_BOTTOM PICTURE_LEFT PICTURE_RIGHT PICTURE_TOP PLAY PLAY_WAIT POINT_OBJECT POINT_POSITION POINT_X_POSITION POINT_Y_POSITION POINT_Z_POSITION POKE POKE_NORMAL POKE_REVERSE POKE16 POKE32 POWER PRINT PRINT_CLEAR PRINT_LOCATE PRINT_TARGET_IS PRINT_X_LOCATE PRINT_Y_LOCATE PROGRESS_BAR RADIAN_TO_DEGREE RADIANS READ REM REPEAT REPLACE RESTORE RESTORE_LABEL RESULT RETURN REVERSE$ RIGHT$ RIGHT_POS$ RMDIR RND RTRIM$ SAVE_DIALOG SAVE_DIALOG_PIC SCANCODE SCENE2D SCENE3D SCREEN_X SCREEN_Y SCROLL_BAR SECRET_OFF SECRET_ON SELECT SELECT_DELETE SELECT_READ$ SELECT_TEXT SEPARATOR_IS_COMMA SEPARATOR_IS_POINT SERIAL SERIAL_BAUDRATE SERIAL_CLOSE SERIAL_DATABITS SERIAL_OPEN SERIAL_PARITY SERIAL_PORT SERIAL_PORT_EXISTS SERIAL_READ$ SERIAL_STOPBITS SERIAL_WRITE SET_FOCUS SGN SHAPE SHAPE_CIRCLE SHAPE_ELLIPSE SHAPE_RECTANGLE SHAPE_RECTANGLE_ROUNDED SHAPE_SQUARE SHAPE_SQUARE_ROUNDED SHOW SHOW_ALL SHOW_MODAL SIN SNAPSHOT SORT SORT_OFF SORT_ON SOUND SPIN SPRITE SPRITE_BRIGHTNESS SPRITE_CONTRAST SPRITE_CREATE_HIDE SPRITE_CREATE_SHOW SPRITE_DELETE SPRITE_DELETE_ALL SPRITE_EXISTS SPRITE_FILE_LOAD SPRITE_GAMMA SPRITE_HEIGHT :' NON TESTÉ SPRITE_HIDE SPRITE_HIDE_ALL SPRITE_IMAGE_LOAD SPRITE_POSITION SPRITE_SCALE SPRITE_SHOW SPRITE_SHOW_ALL SPRITE_TARGET_IS SPRITE_TEXT SPRITE_WIDTH :' NON TESTÉ SPRITE_X_POSITION SPRITE_X_SCALE SPRITE_Y_POSITION SPRITE_Y_SCALE SQR STEP STOP STR$ STRETCH_OFF STRETCH_ON STRING$ SUB SUB_MENU SWITCH1 SYNEDIT SYNEDIT_TARGET_IS_COMMENT SYNEDIT_TARGET_IS_GUTTER SYNEDIT_TARGET_IS_KEYWORD SYNEDIT_TARGET_IS_OBJECT SYNEDIT_TARGET_IS_STRING SYSTEM$ TAB TAN TERMINATE TEXT TEXT$ TEXT_DELETE TEXT_HEIGHT TEXT_INSERT TEXT_WIDTH THEN TIME$ TIME_HOUR TIME_MINUTE TIME_SECOND TIMER TIMER_INTERVAL TIMER_OFF TIMER_OFF_ALL TIMER_ON TO TO_BACKGROUND TO_FOREGROUND TRACE_OFF TRACE_ON TRACK_BAR UNTIL UPPER$ USER_EVENT_LPARAM USER_EVENT_WPARAM VAL VARIABLE VERSION$ VERTICAL WAIT WHILE WIDTH WIDTH_CLIENT WRAP_VALUE à copier dans l'éditeur pour plus de clarté
Dernière édition par silverman le Sam 23 Mai 2020 - 12:06, édité 1 fois | |
| | | Marc
Nombre de messages : 2389 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Comment récupérer le N° de l'objet sous la souris ? [Résolu] Sam 23 Mai 2020 - 11:27 | |
| Bonjour à tous ! Ce code pourra peut-être faire l'affaire ? ... - Code:
-
label id0, id1, id2, id3, id4, id5, id6
button 1 : caption 1,"one" : on_mouse_move 1,id1 button 2 : left 2,120 : caption 2,"two" : on_mouse_move 2,id2 button 3 : left 3,240 : caption 3,"three" : on_mouse_move 3,id3 button 4 : top 4,50 : caption 4,"four" : on_mouse_move 4,id4 button 5 : left 5,120 : top 5,50 : caption 5,"five" : on_mouse_move 5,id5 button 6 : left 6,240 : top 6,50 : caption 6,"six" : on_mouse_move 6,id6
on_mouse_move 0,id0 end
id0: caption 0,"pas de bouton" return
id1: caption 0,"bouton 1" return id2: caption 0,"bouton 2" return id3: caption 0,"bouton 3" return id4: caption 0,"bouton 4" return id5: caption 0,"bouton 5" return id6: caption 0,"bouton 6" return
| |
| | | papydall
Nombre de messages : 7004 Age : 73 Localisation : Moknine (Tunisie) Entre la chaise et le clavier Date d'inscription : 03/03/2012
| Sujet: Re: Comment récupérer le N° de l'objet sous la souris ? [Résolu] Dim 24 Mai 2020 - 22:56 | |
| Merci Pedro, silverman et Marc pour vos retours. En attendant la réintégration de la commande NUMBER_MOUSE_MOVE et consœurs, j’adopte l’idée donnée par Marc.
REM : je mets Résolu | |
| | | Marc
Nombre de messages : 2389 Age : 63 Localisation : TOURS (37) Date d'inscription : 17/03/2014
| Sujet: Re: Comment récupérer le N° de l'objet sous la souris ? [Résolu] Lun 25 Mai 2020 - 17:01 | |
| Erratum & mea culpaLe modèle de source que j’ai proposé ci-dessus n’est pas suffisamment fiable : le moindre déplacement de la souris dans un même objet produit un nouvel appel au sous-programme déclenché par ON_MOUSE_MOVE. Démonstration par l’affichage de la variable NUMBER_TICKS dans le CAPTION 0 : - Code:
-
label test button 1 : top 1,50 : left 1,50 : width 1,200 : height 1,200 on_mouse_move 1,test end
test: caption 0,number_ticks return
On voit dans le CAPTION 0 que la valeur est rafraichie dès le moindre déplacement de la souris sur le BUTTON 1. Ainsi, à l’intérieur d’un même objet survolé par la souris, le sous-programme peut être exécuté plusieurs dizaines de fois inutilement mais surtout avec la forte probabilité de finir par un plantage du programme : Si le sous-programme ne s’est pas achevé avant le prochain appel du ON_MOUSE_MOVE, il y a plantage. Une solution intermédiaire consisterait d’utiliser une variable qui mémorise le dernier objet survolé et refuse la réexécution du sous-programme par un RETURN en cas de nouvel appel de celui-ci. Démonstration : - Code:
-
label test,zoneMorte dim a
button 1 : top 1,50 : left 1,50 : width 1,200 : height 1,200 on_mouse_move 1,test on_mouse_move 0,zoneMorte
end
test: if a = 1 then return a = 1 caption 0,number_ticks return
zoneMorte: if a = 0 then return a = 0 caption 0,"" return
Le sous-programme appelé n’est exécuté qu’une seule fois, le CAPTION 0 affichant le NUMBER_TICKS n'est pas rafraichi quand on bouge sur le bouton 1. Mais ce n’est pas encore la panacée ! Certes, il n’y a plus la répétition du même sous-programme en cas de déplacement à l’intérieur d’un même objet, mais il subsiste le risque de crash du programme si l’exécution du sous-programme n’est pas arrivé à sa fin avant son prochain appel. Par exemple lorsque que la souris quitte le bouton puis revient rapidement dessus : le nouveau déclanchement du sous-programme conduit au plantage si sa dernière tâche n’est pas finie. Il faut donc neutraliser l’événement ON_MOUSE_MOVE puis le réactiver lorsque le sous-programme s’est achevé et lorsque la souris est sortie de l’objet survolé. Démonstration : - Code:
-
label bouton1,bouton2,zoneMorte dim boutonSurvol%
button 1 : top 1,50 : left 1,50 : width 1,100 : height 1,100 button 2 : top 2,50 : left 2,200 : width 2,100 : height 2,100
on_mouse_move 1,bouton1 on_mouse_move 2,bouton2 on_mouse_move 0,zoneMorte
end
bouton1: if boutonSurvol% = 1 then return boutonSurvol% = 1 actionBouton1() return
bouton2: if boutonSurvol% = 2 then return boutonSurvol% = 2 actionBouton2() return
zoneMorte: if boutonSurvol% = 0 then return boutonSurvol% = 0 actionZoneMorte() return
sub actionBouton1() off_mouse_move 1 caption 0,"Bouton 1 survolé. NUMBER_TICKS : " + str$(number_ticks) on_mouse_move 1,bouton1 end_sub
sub actionBouton2() off_mouse_move 2 caption 0,"Bouton 2 survolé. NUMBER_TICKS : " + str$(number_ticks) on_mouse_move 2,bouton2 end_sub
sub actionZoneMorte() off_mouse_move 0 caption 0,"Pas de bouton survolé. NUMBER_TICKS : " + str$(number_ticks) on_mouse_move 0,zoneMorte end_sub
Variante : - Code:
-
label bouton1,bouton2,zoneMorte dim boutonSurvol%
button 1 : top 1,50 : left 1,50 : width 1,100 : height 1,100 button 2 : top 2,50 : left 2,200 : width 2,100 : height 2,100
on_mouse_move 1,bouton1 on_mouse_move 2,bouton2 on_mouse_move 0,zoneMorte
end
bouton1: if boutonSurvol% = 1 then return boutonSurvol% = 1 actionBouton(1) return
bouton2: if boutonSurvol% = 2 then return boutonSurvol% = 2 actionBouton(2) return
zoneMorte: if boutonSurvol% = 0 then return boutonSurvol% = 0 actionbouton(3) return
sub actionBouton() off_mouse_move 1 off_mouse_move 2 off_mouse_move 0
select boutonSurvol% case 0 caption 0,"Pas de bouton survolé. NUMBER_TICKS : " + str$(number_ticks) case 1 caption 0,"Bouton 1 survolé. NUMBER_TICKS : " + str$(number_ticks) case 2 caption 0,"Bouton 2 survolé. NUMBER_TICKS : " + str$(number_ticks) end_select
on_mouse_move 1,bouton1 on_mouse_move 2,bouton2 on_mouse_move 0,zoneMorte end_sub
==> Cette démonstration découle d’une solution logicielle développée par notre ami Klaus.Bonne programmation à tous ! | |
| | | Contenu sponsorisé
| Sujet: Re: Comment récupérer le N° de l'objet sous la souris ? [Résolu] | |
| |
| | | | Comment récupérer le N° de l'objet sous la souris ? [Résolu] | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |