• Как написать формулу поиска для текста в ячейке с учетом регистра?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Если религия позволяет использовать скрипты, то вот такое будет работать:
    /**
     * Возвращает true, если value содержится в inData как ключ с разделителем delimiter
     *
     * @param {A:A} inData Исходный массив или одиночная строка
     * @param {"key"} value Значение, которое ищется среди слов
     * @param {1} delimiter Разделитель слов. По умолчанию - ","
     * @return Возвращает true, если inData - одиночное значение или аналогичный массив, если inData - диапазон
     * @customfunction
     */
    function isContainText(inData,value,delimiter) {
      var delimiter = delimiter || ",";
      if (inData.map){
        return inData.map(function(el){return isContainText(el,value,delimiter)});
      }else{
        var data = inData.split(delimiter);
        if (!data) return false;
        return data.indexOf(value)!=-1;
      };
    }

    Использование:
    =isContainText(A:A;"Ключ";",")
    Ответ написан
    Комментировать
  • Как заставить работать скрипт в google forms по отправке формы?

    ProgrammerForever
    @ProgrammerForever Куратор тега Google Apps Script
    Учитель, автоэлектрик, программист, музыкант
    Если код ранее не запускался вручную, то надо запустить и разрешить гуглу работать с этим скриптом. С пользовательскими функциями в таблицах та же беда - пока не запустишь в рукопашку из редактора кода - не работают в таблице.
    Ответ написан
    Комментировать
  • На базе каких светодиодов лучше делать программируемую светодиодную ленту?

    @n12eq3
    купить отдельно WS2812. развести и заказать простые платы с нужным количеством и шагом. заговнокодить по вкусу и возможностям.
    Ответ написан
    2 комментария
  • Как открыть файл при перетаскивание в окно?

    @Sumor
    Простой способ: Для формы разрешите AllowDrop и ловите событие DragDrop. В её параметрах будет описание того, что на вас кидают.

    Сложный способ: для затравки прочитайте вот это https://habrahabr.ru/post/179131/.
    Там описана реализация на Delphi, но последовательность действий такая же.
    Нужно описать все функции, которые используются через DllImport. Вызвать DragAcceptFiles.
    Переопределить Wndproc для формы protected override void WndProc(ref Message m), и там обрабатывать событие WM_DROPFILES и через DragQueryFile получить переданный список.
    Ответ написан
    Комментировать
  • Как правильно обработать текст в C#?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Regex regex = new Regex(@"X(-?\d+)\.(\d+)Y(-?\d+)\.(\d+).*?G00Z(-?\d+)\.(\d+).*?G00X(-?\d+)\.(\d+)Y(-?\d+)\.(\d+).*?G01Z(-?\d+)\.(\d+).*?G02X(-?\d+)\.(\d+)Y(-?\d+)\.(\d+)I(-?\d+)\.(\d+)J(-?\d+)\.(\d+)", RegexOptions.Singleline);
    textBox1.Text = regex.Replace(textBox1.Text, "G5 X$1,$2 Y$3,$4\nG0 Z$5,$6\nG0 X$7,$8 Y$9,$10\nG1 Z$11,$12\nG2 X$13,$14 Y$15,$16 I$17,$18 J$19,$20");
    Ответ написан
    5 комментариев
  • Как изменить стиль select option?

    Palych_tw
    @Palych_tw
    Типа веб-разработчик
    тег <option> кастомизировать нельзя. Есть JS библиотеки, типа такой selectric.js.org
    Она вместо выбранного select создает свою разметку, которую можно кастомизировать.
    Ответ написан
    Комментировать
  • Как реализовать глобальный KeyPress в C#?

    @dark_Kelvin
    Если нужны горячие клавиши, то используйте RegisterHotKey / UnregisterHotKey
    Если надо отлавливать события KeyDown KeyPress KeyUp, то используйте SetWindowsHookEx с параметром WH_KEYBOARD_LL / UnhookWindowsHookEx
    private bool hooked = false;
    		private IntPtr hHook;
    		private HookProc managedDelegate = InternalCallback;
    		
    		public event KeyEventHandler KeyDown;
            public event KeyEventHandler KeyUp;
    		public event KeyPressEventHandler KeyPress;
    
    		public void StartHook()
            {
                IntPtr delegt = Marshal.GetFunctionPointerForDelegate(managedDelegate);
    			hHook = SetWindowsHookEx(HookType.WH_KEYBOARD_LL, delegt, getMainModuleHandle(), 0);
    			if (hHook == IntPtr.Zero) throw new Win32Exception(Marshal.GetLastWin32Error());
    		}
    		
    		public virtual void Unhook()
            {
    			if (!UnhookWindowsHookEx(hHook)) throw new Win32Exception(Marshal.GetLastWin32Error());
    		}
    		
    		protected int InternalCallback(int code, IntPtr wParam, IntPtr lParam)
            {
                if (code >= 0)
                {
                    bool handled = false;
                    KeyboardHookStruct keyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct));
    				
    				if (KeyDown != null && ((int)wParam == WM_KEYDOWN || (int)wParam == WM_SYSKEYDOWN))
    				{
    					Keys keyData = (Keys)keyboardHookStruct.VirtualKeyCode;
    					KeyEventArgs e = new KeyEventArgs(keyData);
    					KeyDown.Invoke(null, e);
    					handled = e.Handled;
    				}
    				
    				if (KeyPress != null && (int)wParam == WM_KEYDOWN)
    				{
    					//Перекодирование сканкодов в Ascii
    				}
    				
    				if (KeyUp != null && ((int)wParam == WM_KEYUP || (int)wParam == WM_SYSKEYUP))
    				{
    					Keys keyData = (Keys)keyboardHookStruct.VirtualKeyCode;
    					KeyEventArgs e = new KeyEventArgs(keyData);
    					KeyUp.Invoke(null, e);
    					handled = handled || e.Handled;
    				}
    				
                    if (handled) return 1;
                }
                return CallNextHookEx(hHook, code, wParam, lParam);
            }
    		
    		
    		
    		private IntPtr getMainModuleHandle()
            {
                IntPtr hMod;
                using (Process process = Process.GetCurrentProcess())
                using (ProcessModule module = process.MainModule)
                {
                    hMod = GetModuleHandle(module.ModuleName);
                }
                return hMod;
            }
    
            [DllImport("user32.dll", SetLastError = true)]
            private static extern IntPtr SetWindowsHookEx(HookType hook, IntPtr callback,
                IntPtr hMod, uint dwThreadId);
    
            [DllImport("user32.dll", SetLastError = true)]
            internal static extern bool UnhookWindowsHookEx(IntPtr hhk);
    
            [DllImport("user32.dll")]
            internal static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam,
                IntPtr lParam);
    
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
            private static extern IntPtr GetModuleHandle(string lpModuleName);
    
            private delegate int HookProc(int code, IntPtr wParam, IntPtr lParam);
    		
    		 private const int
             WM_KEYDOWN = 0x100,
             WM_KEYUP = 0x101,
             WM_SYSKEYDOWN = 0x104,
             WM_SYSKEYUP = 0x105;
    		
            [StructLayout(LayoutKind.Sequential)]
            private struct KeyboardHookStruct
            {
                /// <summary>
                /// Specifies a virtual-key code. The code must be a value in the range 1 to 254. 
                /// </summary>
                public int VirtualKeyCode;
                /// <summary>
                /// Specifies a hardware scan code for the key. 
                /// </summary>
                public int ScanCode;
                /// <summary>
                /// Specifies the extended-key flag, event-injected flag, context code, and transition-state flag.
                /// </summary>
                public int Flags;
                /// <summary>
                /// Specifies the Time stamp for this message.
                /// </summary>
                public int Time;
                /// <summary>
                /// Specifies extra information associated with the message. 
                /// </summary>
                public int ExtraInfo;
            }
    
    		
    		
    	internal enum HookType : int
        {
            ///
            WH_JOURNALRECORD = 0,
            ///
            WH_JOURNALPLAYBACK = 1,
            ///
            WH_KEYBOARD = 2,
            ///
            WH_GETMESSAGE = 3,
            ///
            WH_CALLWNDPROC = 4,
            ///
            WH_CBT = 5,
            ///
            WH_SYSMSGFILTER = 6,
            ///
            WH_MOUSE = 7,
            ///
            WH_HARDWARE = 8,
            ///
            WH_DEBUG = 9,
            ///
            WH_SHELL = 10,
            ///
            WH_FOREGROUNDIDLE = 11,
            ///
            WH_CALLWNDPROCRET = 12,
            ///
            WH_KEYBOARD_LL = 13,
            ///
            WH_MOUSE_LL = 14
        }
    Ответ написан
    3 комментария
  • Как расположить блоки с разной высотою как в рекламных газетах?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    В этом вам поможет известный плагин: masonry.desandro.com
    Ответ написан
    Комментировать
  • Как привязать VKapi к расширению Chrome?

    EagleMoor
    @EagleMoor
    PHP Yii2 RESTful API Developer
    Chrome — js. Для vk есть vk.com/dev/Javascript_SDK. Юзайте ее и будет вам счастье.
    Ответ написан
    Комментировать
  • Как создать свой элемент в visual stidio?

    @Sumor
    Для этого вы можете создать UserControl или CustomControl.
    В первом случае вы создаёте UserControl (пользовательский элемент управления) добавляя его к проекту как окно приложения. Настраиваете по сути как часть окна приложения добавляя нужные контролы на него и описывая логику в коде. После компиляции проекта контрол автоматически попадает на панель инструментов.
    Например:
    <UserControl x:Class="WpfApplication3.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" 
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <TextBox />
            <ListBox Grid.Row="1" />
        </Grid>
    </UserControl>


    Во втором случае вы как бы наследуетесь от базового контрола и добавляете к тему оформление и немного логики. В меню добавления элементов этот тип называется CustomControl или настраиваемый элемент управления.
    Либо через C#:
    public MyTextBox : TextBox
    {
    
    }


    Либо через Xaml:
    <TextBox x:Class="WpfApplication1.MyTextBox"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" >
       
    </TextBox>
    Ответ написан
    Комментировать
  • Как сделать css-анимацию по скрытию элемента?

    @BelkinVadim
    Frontend разработчик
    Вы хотите сделать плавное появление и скрытие? Если да, то зачем keyframes? Можно же для элемента сделать доп.класс который отвечает за его скрытие или показ. И удалять его или добавлять.
    jsfiddle.net/YxsTV
    Ответ написан
    3 комментария