Страницы: 1 2 След.
RSS
API и KeyAscii
 
Кто-нибудь получал коды вводимых в ячейку символов (до нажатия Enter) используя API ???  
Если это возможно, то как ???
 
В интернете полно клавиатурных шпионов.
Я сам - дурнее всякого примера! ...
 
пытаюсь фильтр привязать к вводимому в ячейку значению.  
ввёл первый символ - нашлось 100 значений (по вхождению искомого значения), ввёл второй символ - нашлось 50 значений, ввёл третий символ - нашлось 20 значений и т.д.
 
Я делал такое без API - с помощью комбобокса, расположенного поверх ячейки.
 
1 и единственная - обойтись без Combo, Text и пр. Box'ов.  
Имеется БД. К наименованием полей которой по OnDoubleClick привязано выполнение действий. А при начале ввода в наименование поля начинал бы работать фильтр.
 
{quote}{login=The_Prist}{date=13.01.2011 11:03}{thema=}{post}Нереально. Я же написал - ввод в ячейку не отслеживается.{/post}{/quote}  
 
Приветствую The_Prist!  
 
К сожалению я не специалист по Windows API,  
но чисто теоретически должен быть возможен следующий вариант отслеживания ввода в ячейку:  
1) с помощью API получить объект "окно формул excel"  
2) для объекта "окно формул excel" с помощью API отслеживать изменения текста в этом окне.  
 
другой вопрос какие методы, свойства и события для "окна формул excel" будут нам доступны и какие из них окажутся полезными для отслеживания изменения текста в окне...
 
Аргументы:  
Родитель – Windows, интерпретирует код нажатой нами клавишу в символ. Следовательно код можно перехватить. Например:  
1. в разделе «Использование функций API» нашей настольной книги Power Programming with VBA (John Walkenbach) отслеживается нажатие Shift  
2. а здесь http://msoffice.nm.ru/faq/macros/winapi2.htm#faq358 определяем является ли буква прописной, строчной и вообще буквой  
3. в ComboBox или TextBox мы же его получаем через KeyPress!!!!
 
{quote}{login=k61}{date=13.01.2011 10:56}{thema=хотелки:}{post}Имеется БД. К наименованием полей которой по OnDoubleClick привязано выполнение действий. А при начале ввода в наименование поля начинал бы работать фильтр.{/post}{/quote}  
Вы хотите вводить условие фильтра в ячейку с наимерованием поля?!  
А по нажатию Enter что будет происходить? Если нормальный ввод нового значения в ячейку, то изменится наименование поля. Это уже, извините, не БД. А если наименование поля не изменится - где юзер будет видеть условие фильтра?  
 
ИМХО, лучше иметь над строкой с наименованиями полей - строку с условиями фильтра. И отсюда прямой путь к использованию расширенного фильтра.  
 
То, что Вы хотите, ИМХО невозможно потому, что при входе в режим редактирования в Excel прекращается всякая другая деятельность: не запускаются макросы по OnTime, не открываются книги и т.д.
 
Поглядите 2 примера из этой темы:  
http://www.programmersforum.ru/showpost.php?p=525483&postcount=10
 
{quote}{login=k61}{date=13.01.2011 10:56}{thema=хотелки:}{post}1 и единственная - обойтись без Combo, Text и пр. Box'ов.  
Имеется БД. {/post}{/quote}Откуда такая нелюбовь к контролам?  
Я еще понимаю условие "без макросов" (когда такое ставят).  
Помнится мы с Alex_ST нечто подобное в теме "Удобный автофильтр" (или как-то так) наваяли. Там контролы от ячеек неотличимы были.  
 
 
 
 
49149
Bite my shiny metal ass!      
 
ув. Казанскому:  
По нажатию Enter будут оставаться видимыми только отфильтрованные значения.  
При очистке критерия будет откат к наименованию поля и снятие фильтра.  
А почему тогда всякая деятельность не прекращается при редактировании ComboBox или TextBox? Они же произрастают внутри Excel'а.  
Всегда стремился не перегружать базы лишними строками, кнопками, окнами.  
ув.The_Prist'у:  
Выполнение процедуры обращения к функциям API можно и будет ограничено проверкой адреса редактируемой ячейки. Это не проблема.
 
Качественно. Спасибо. Но это с Combo(:  
Хотелось бы прыгнуть выше головы.  
Иначе неинтересно.
 
{quote}{login=k61}{date=13.01.2011 02:32}{thema=Продолжаю думать что это реально.}{post}Выполнение процедуры обращения к функциям API можно и будет ограничено проверкой адреса редактируемой ячейки. Это не проблема.{/post}{/quote}  
 
Не проблема? Неужели...  
Расскажите тогда, как вы собираетесь средствами WinAPI узнавать адрес ячейки, уж очень интересно послушать.  
(я, конечно, представляю, как можно ПОПРОБОВАТЬ это сделать, - но кода будет очень много)
 
А мне ОЧЕНЬ интересно хоть что-то увидеть, т.к. сам о этом ничего не знаю :)
<FONT COLOR="CadetBlue">
 
Да хорош вам ржать. Давайте по делу.
Я сам - дурнее всякого примера! ...
 
Я чет такое писал, но было это (как минимум) 10 лет назад. Порыться могу, но надо ли?
Я сам - дурнее всякого примера! ...
 
Держи(год посмотри). Оказывается, даже не я писал:-)
Я сам - дурнее всякого примера! ...
 
Дим, ты чего? Прочитай тему(название). И мой первый ответ.
Я сам - дурнее всякого примера! ...
 
На скорое прощание хочу сказать спасибо и следующее:  
1. Отслеживание нажатие клавиш в Windows происходит. Хотим мы этого или нет. Работу в Excel это никак не тормозит (практически). Поэтому разрешим WinAPI отдавать нам эти коды не зависимо от того какую ячейку редактируем. Но обработку возвращаемых WinAPI кодов ограничим проверкой адреса активной ячейки. Либо вообще будем вызывать НеизвеснуюФункциюWinAPI из процедуры Worksheet_SelectionChange после проверки адреса (If строка=1 Then).    
2. Никто из здесь присутствующих упорно не обращает внимание на возможность получения кодов в Combo и Text боксах и невозможность(?) этого во время редактирования ячейки. В случае, если это действительно так, то пожалуй этого-то и не хватает в Excel (другой раздел форума).  
3. Даже если задуманное не реализуется, у нас будет оправдание - «Я хотя бы  попытался» (Д.Николсон, х/ф «Пролетая над гнездом кукушки», после неудачной попытки выбить окно в психушке мраморной тумбой раковины).  
EducatedFool’у отдельное спасибо за ссылку на конкретные примеры.
 
А ведь сам Excel во время редактирования ячейки (в случае заполнения строк столбца содержащего данные) предлагает вариант набираемого значения! Может быть существует незадокументированное событие редактироавания ячейки?
 
{quote}{login=The_Prist}{date=14.01.2011 09:31}{thema=Re: Отбываю в командировку.}{post} ибо во время редактирования ячейки макросы "стопорятся"....{/post}{/quote}  
 
Да! Всё нужно додумывать до конца.  
 
Действительно, ну допустим сподобились перехватывать ввод в ячейку побуквенно, обрабатывать полученную информацию и получать данные...  
 
НО ВЕДЬ НУЖНО ПОКАЗАТЬ ЭТУ ИНФОРМАЦИЮ ГДЕ НИБУДЬ!  
 
В режиме ввода в ячейку использовать для этой цели эксель не получится,  
Нужна форма,  
от чего хотели уйти, к тому и пришли....:(
 
{quote}{login=The_Prist}{date=13.01.2011 08:38}{thema=Re: }{post}{quote}{login=KukLP}{date=13.01.2011 06:16}{thema=}{post}Дим, ты чего? Прочитай тему(название). И мой первый ответ.{/post}{/quote}Я ничего. Прочитай всю тему и поясни тогда - кто тут ржет? К чему эта фраза "Да хорош вам ржать. Давайте по делу." Автор темы хочет отследить набор текста непосредственно В ЯЧЕЙКЕ. Это и обсуждается.    
Неплохо бы помимо первого поста топикстартера читать и второй :-){/post}{/quote}  
Дим, ты мой первый ответ прочел? А файл дочитал?
Я сам - дурнее всякого примера! ...
 
Когда-то экспериментировал с этим. Нужно подключить в Экселе в Вашей книге класс с таймером, который раз в секунду будет опрашивать ввод с клавиатуры, запоминать данные и их обрабатывать.
 
Всё прочитал. Попробовал окунуться в тупиковые ветки развития. По соотношению цена-качество остановился на text.box'сe (userform'ы) который выскакивает (как чёрт из табакерки) по событию BeforeRightClick на наименованиях полей листа БД. А контекстное меню по событию BeforeRightClick как отключить из VBA?
 
{quote}{login=The_Prist}{date=17.01.2011 10:31}{thema=}{post}Там есть зарезервированная переменная - Cancel. В коде присваиваете ей значение True.{/post}{/quote}  
Поискал "там". У нас "там" её нет. А у Вас "там" это где?  
Умение подбирать рифмы - не приветствуется.
 
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)  
   ' где переменная Cancel ? не можете найти её??? Да вот же она ^^^^^^  
 
   Cancel = True    ' отменяем отображение контекстного меню  
 
   userform1.Show    ' запускаем свою форму  
End Sub
 
старый стал. очки на носу потерял.
 
от http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/WindowsAPI/API-DLL-1.mspx
 
{quote}{login=k61}{date=18.01.2011 07:37}{thema=плохая новость.}{post}от http://www.microsoft.com/Rus/Msdn/Activ/MSVB/Archive/WindowsAPI/API-DLL-1.mspx{/post}{/quote}Ничуть не плохая новость. Даже хорошая.  
Это значит, что еще не нашлось идиота, в т.ч. в Microsoft, который бы потратил время на подсчет всех функций.  
Пример. Я в свое время работал на фабрике, где было большое количество разнообразных насосов, задвижек и трубопроводов. Я знал про них почти все, другие (лучше меня) знали. Но если бы меня спросили "сколько насосов всего" или "сколько километров труб на фабрике", я бы ответил "около х тысяч". Да и никто не ответил бы точно, потому что это бесполезная информация.  
 
 
90666
Bite my shiny metal ass!      
 
Пример не удачный.  
Купили краску. Пошли красить трубу. Покрасили 100 метров. Краска закончилась. Пошли ещё купили краску. Покрасили ещё 300 км трубы. Опять закончилась краска, а трубопровод неокрашенный ещё уходит за горизонт…:  
While НеокрашеннаяТруба>0  
ИдёмЗаКраской  
Красим  
Wend  
Не лучше ли сразу определить какое количество краски нам потребуется?:  
КоличествоКраски=ДлинаТрубы*НормаРасходаКраски  
ИдёмЗаКраской 'один раз  
Красим  
КуримЗадумчивоГлядяНаБегающегоЗаКраскойРаботникаФабрики
Страницы: 1 2 След.
Читают тему
Наверх
Loading...