let del_zone (x : float) (y : float) : unit =
        let zone_length = ref 0. in
        let rec aux0 l res =
                match l with [] -> List.rev res
                        |(((click_x,click_y),zone)::ls) ->         
                                                if(click_y=y && click_x=x)
                                                then  (zone_length := ((max_l zone) -. (min_l zone)) ; aux0 ls res)
                                                else aux0 ls (((click_x,click_y),zone)::res);
        in infos_zones:=(aux0 (!infos_zones) []);

        
        let dist = !zone_length -. (min !zone_length (((float_of_int (number_of_common_line_between_all_zones x y)) -. 0.)  *. !yDelta)) in
        let rec aux l_infos_zones res =
                match l_infos_zones with [] -> List.rev res
                        |(((absX,ordY),points_list)::ls) ->
                                if(ordY <= y)
                                then aux ls (((absX,(ordY +. dist)),(List.map (fun p -> p +. dist) points_list))::res)
                                else aux ls (((absX,ordY),points_list)::res)
        in 
        
        let lock = ref true in
        List.iter
        (fun ((role_x,tag_pos),zone) ->
        if (role_x <> x && tag_pos=y && ((max_l zone) -. (min_l zone)) >= (!zone_length))
        then lock:=false)
        (!infos_zones);        
        if(!lock) then(
                        infos_zones:= aux (!infos_zones) []
        )