Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Я понимаю, просто ответил, что плагин нужен был мне, потому, что не нашел решения с помощью обычных средств и других плагинов.
Нужно сделать так, чтобы при нажатии кнопки в поле менялось значение непрерывно. Т.е. есть поле в нем значение - цифра. Есть две кнопки, одна подразумевает увеличение значения, другая напротив уменьшение. Увеличение должно быть не прерывное, нажал на кнопку и оно начало меняться с установленного, отпустил кнопку, изменение прекратилось.
Добавлю, чтобы изменение было плавное, я пробовал таймер, были какие то скачки, пару сек плавно, потом смещение сразу на 2 значения, затем снова. Попробую поискать исходник, того, что делал, если не удалил конечно.
Сообщение отредактировано frolandr - Ср, 05 Июля 2023, 19:55
LeftClick не позволяет проверить отпущена ли кнопка после клика. Были бы эти события, не пришлось бы делать плагин для SpinEdit.
Так нужно было делать плагин не SpinEdit, а определение MouseDown и MouseUp.
Добавлено (05 Июля 2023, 20:00) ---------------------------------------------
Цитатаfrolandr ()
Попробую поискать исходник
Не надо. Я понял задачу. Вряд ли это получится. А чем не устраивает просто щелкать? Или если большой интервал - просто ввести нужное значение. Не хочешь читать хелп?
Не надо. Я понял задачу. Вряд ли это получится. А чем не устраивает просто щелкать?
Делал то, не для себя, я бы пощелкал
Нашел исходники, год назад дело было, мало что помню, там 3 или 4 исходника, разные решения. Есть и ехе файл, в нем более-менее приемлемое решение. Правда, когда кнопку отпускаю, еще раз значение изменяется. Будет время посмотри, ну или уже не нужно
Ок. только если интересно, если нет - брось. Вот еще что-вспомнил, при тестах такие проблемы были: если держим зажатой левую кнопку мыши на кнопке увеличения, но курсор уводим на кнопку уменьшение или просто в сторону, увеличение продолжалось. Если зажать левую кнопку на верхней кнопке, перевести курсор на нижнюю, отпустить кнопку и нажать уже на нижней кнопке, то она не срабатывала. Также и другие проблемы были. Одну поборю, другая вылезет и так по кругу.
Сообщение отредактировано frolandr - Ср, 05 Июля 2023, 21:16
Не нравилось, то одно, то другое. Пытался добиться более-менее идеального решения. В твоем примере попробуй, нажми на кнопку +, затем не отпуская кнопки мыши перетащи курсор на кнопку - , отпусти кнопку мыли и нажми. Не сработает кнопка -. Даже если отпустить кнопку и не двигая снова нажать, все равно кнопка не сработает.
Добавлено (05 Июля 2023, 21:34) ---------------------------------------------
Цитатаfrolandr ()
увеличение продолжалось.
Вообще то, по идее, пока кнпка нажата и не отпущена, увеличение должно продолжаться. Думаю все это можно решить и добиться идеального состояния. Было бы желание.
Конечно, можно было найти какие-то решения, делал программу для сиделок, девушки пенсионного возраста, они с компом на ты. Задание было сделать на 5 недель месяца (10 спинедитов), по два на каждую неделю. Один на начальный день их дежурства, второй на конечный день. т.е. типа такого: 1 - 5 8 - 13 15 - 19 22 - 27 29 - последний день месяца(28 если февраль) Первоначально все едиты дожны были начинаться с 1 Вот им трудно было просто вписывать, нужно было крутить с единицы
Андрей, у меня кроме: (clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple, clTeal, clGray, clSilver, clRed, clLime, clYellow, clBlue, clFuchsia, clAqua, clWhite, clMoneyGreen, clSkyBlue, clCream, clMedGray) не формируются другие именные(константные цвета). Смотрел и в Делфи вроде 20 всего, 16 основных и 4 дополнительные. Если не трудно скинь пару названий, попробую на своем бильдере.
Нажимаю на кнопку + , перетаскиваю на - , отпускаю кнопку и нажимаю, не чего не происходит, значение уменьшается только если кнопку отпустить. Т.е. после перетаскивания первый клик не срабатывает, значение меняется только при отпускании. При повторном клике уже все хорошо.
mishem, это все мои придирки, вернее когда отдал работу, мне об этом написали, я сделал чуть по другому, опять им не понравилось, сделал третий вариант их устроило и я успокоился. Позже через полгода вот плагин сделал.
Спасибо, первые четыре у меня включены, остальные системные цвета, не работают они у меня. Вот ссылка на VCL цвета, там именованные, системные и веб, у меня работают только первые 20 именованных, остальные нет.
Добавлено (05 Июля 2023, 21:52) ---------------------------------------------
Цитатаfrolandr ()
Да, я видел. Но хорош на сегодня.
Поупражнялся, теперь можно в люлю :), ну а вообще брось голову ломать. Более-менее приемлемый результат можно сделать, идеальный наверное не получится. Всем не угодить...
Сообщение отредактировано frolandr - Ср, 05 Июля 2023, 22:00
mishem, если есть желание продолжить, вот ссылка, там два плагина и файл проекта, ну пару иконок еще.
Сделал плагин для перехвата информации о состоянии кнопок мыши, однако не все так просто. Не соображу, как же все таки сделать аналог SpinEdit. Если будет время запусти проект, нажми кнопку "создать хук", и сразу же кнопку "создать" - она создаст SpinEdit, чтобы можно было сравнивать то, над чем мучаемся с работой оригинального Спина.
Сейчас добился того, что если 1 раз кликнуть на кнопку, то значение увеличится на 1, если несколько раз с небольшими перерывами, то также будет увеличение +1, если нажать и не отпусткать кнопку, то значение начнет увеличиваться. Если не отпуская кнопку мыши увести курсор с кнопки, то увеличение прекратиться, если снова не отпуская мышь навести курсор на кнопку, то увеличение продолжится. Прямо как в Спине.
Загвоздка в том, что если не отпуская левой кнопки мыши увести курсор с верхей кнопки на нижнюю и затем отпустить, то клики на нижней не срабатывают, пока не уведешь с нее курсор. Т.е. нужно как то запускать таймер над которым находится курсор. Пока не соображу как.
В проекте увидишь, что использую координаты курсора мыши, они помогают остановить таймер, если курсор ушел с кнопки. Вот как то нужно еще запускать таймер если была отжата кнопка, а затем снова нажата на одной из кнопок изменения значений(применяя еще и координаты).
Может получится у тебя ну или найдутся еще желающие поломать голову.
Есть ещё глобальная переменная [Self] (только для чтения). Может быть она поможет? Хранит имя объекта, с которым в настоящий момент идет работа по текущей команде в соответствии со стадией скрипта. Для скриптов, не привязанных к объектам (таких, как "page enter/exit"), переменная [Self] будет пустой. Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
А кто тебе сказал, что в Спине все правильно сделано? Так автор компонента "видел" правильность.
ЦитатаВадим ()
Сейчас добился того, что если 1 раз кликнуть на кнопку, то значение увеличится на 1, если несколько раз с небольшими перерывами, то также будет увеличение +1, если нажать и не отпусткать кнопку, то значение начнет увеличиваться.
У каждого человека свое ощущение клика и задержки. Для одного 150 млсек самое то, для другого 500 очень быстро.
Цитатаfrolandr ()
не отпуская кнопку мыши увести курсор с кнопки, то увеличение прекратиться, если снова не отпуская мышь навести курсор
А вот это, как выше уже писал, с моей точки зрения не правильно. При нажатой мыши увеличение должно продолжаться не зависимо от того, где находится мышь.
Например: Твои дамы сидять и о чем то между собой беседуют, соответственно глаза от экрана отводят. Рука дернулась и мышь ушла в сторону, а дама беседуя с другой надеется что процесс идет. Поворачивает голову, и оказывается что нужно еще 5 минут ждать. Нервоз, недовольство и т.д.
Что бы работало постоянно, нужно просто в маус ексит завершении монитора поставить условие, что отключать только при отпущенной мыше. А в маус клик добавить завершение монитора.
Цитатаfrolandr ()
Загвоздка в том, что если не отпуская левой кнопки мыши увести курсор с верхей кнопки на нижнюю и затем отпустить, то клики на нижней не срабатывают, пока не уведешь с нее курсор. Т.е. нужно как то запускать таймер над которым находится курсор. Пока не соображу как.
Думаю тоже ничего сложного.
Цитатаfrolandr ()
В проекте увидишь, что использую координаты курсора мыши, они помогают остановить таймер, если курсор ушел с кнопки.
Вот их нужно использовать для определения, где мышь отпущена. И если над кнопкой, то запускать таймер.
Нужно просто составить список задач и решать их по очереди.
ЦитатаВадим ()
Есть ещё глобальная переменная [Self]
Думаю она в данном случае не поможет, так как во время отпускания кнопки в ней будет именно тот объект, где кнопка была отпущена. По этому и не срабатывает маус ентер на другой кнопке.
Нужно переодически компилировать проект и проверять его работу в завершенном состоянии. Возможно в скомпилированном состоянии маус ентер будет успевать срабатывать.
Добавлено (06 Июля 2023, 11:39) --------------------------------------------- frolandr
Постояно всем пытаюсь донести одно и то же. Привыкайте, или учитесь делать настройки одной командой. Берите за эталон команду dbpSetGridProperties из плагина DBPro, ну или на крайний случай свое что то изобретайте.
Ведь для новеньких самая большая проблема - много строчек кода и поиск в этих строчках нужной команды. Не хочешь читать хелп?
У тебя задержка большая и скорость счетчика большая. Нельзя здесь использовать While. Да и вообще в таймере ипользовать While кошунство. Сам таймер по сути и есть While. Не хочешь читать хелп?
А кто тебе сказал, что в Спине все правильно сделано? Так автор компонента "видел" правильность.
Я тебе скажу, что пришлось не большой костыль писать, иначе при позиционировании к правому краю, текст уходил за кнопки изменения, а при изменении цвета, закрашивался то только едит, то вместе с кнопками. Думал у меня в плаге проблема. Сделал чистый проект на с++, там тоже самое. Костыль написал, стало лучше.
Другое дело, что большинство людей, юзая множество программ привыкло к поведению компонентов. Ведь большинство их во всех программах теже, редко пишут свои компоненты.
Цитатаmishem ()
У каждого человека свое ощущение клика и задержки. Для одного 150 млсек самое то, для другого 500 очень быстро.
Спора нет, но уже написал выше, что в программах в большинстве случаев однотипно все. Есть и такое, что в зависимости от времени удерживания клика мыши на кнопке скорость изменения значений увеличивается, наверное видел такое?
Цитатаfrolandr ()
Вот их нужно использовать для определения, где мышь отпущена. И если над кнопкой, то запускать таймер.
Вот это мне очень помогло. Я ведь несколько раз писал такое, только ступил в if через or писал, а нужно через and.
Цитатаfrolandr ()
Постояно всем пытаюсь донести одно и то же. Привыкайте, или учитесь делать настройки одной командой.
Можно и все настройки одной командой, дело вкуса.
Добавлено (06 Июля 2023, 14:04) ---------------------------------------------
Цитатаfrolandr ()
У тебя задержка большая и скорость счетчика большая. Нельзя здесь использовать While. Да и вообще в таймере ипользовать While кошунство. Сам таймер по сути и есть While.
По разному делал, это просто последнее решение, как видим существует несколько способов. Один бы не справился, спасибо за помощь!!!
На счет скорости, а мне так нравится мне кажется что у тебя слишком медленно. Если крутить с 0 до 100, минуту ждать придется. Другое дело, что этот параметр можно как увеличить, так и уменьшить. По вкусу так сказать сделать .
Добавлено (06 Июля 2023, 14:12) ---------------------------------------------
Цитатаfrolandr ()
По поводу faMouseHook. Обрати внмание, что нужно добавить. В плагине Петра не хватало еще определения дескриптора объекта.
Я пытался такое сделать, пока не получилось. Хотел получить handle кнопки, над которой было событие mousedown или mouseup, а затем можно было тянуть caption кнопки или другой параметр и в соответствии выполнять подпрограмму. Это WinApi, пока только учусь, на все время нужно...
что в зависимости от времени удерживания клика мыши на кнопке скорость изменения значений увеличивается, наверное видел такое?
Тоже не проблема. Установи время задержки таймера меньше например через 3-5 тиков.
Цитатаfrolandr ()
Можно и все настройки одной командой, дело вкуса.
Дело не вкуса, дело удобства. Для плагиностроителей легче и проще раскидать все на несколько команд. И как правило у начинающих, полезность плагина исчисляется кол-ом команд. А это в корне не верно. Получается команд много, а толку от плагина никакого. Для пользователей удобство заключается в минимум команд, максимум возможностей. NeoBook именно этим и привлекает людей. Простотой. Возьми веб версию. Команд много и даже я там теряюсь, так как понятия не имею что, где, когда использовать.
Цитатаfrolandr ()
Другое дело, что этот параметр можно как увеличить, так и уменьшить.
Добавлено (06 Июля 2023, 14:25) ---------------------------------------------
Цитатаfrolandr ()
Я пытался такое сделать, пока не получилось.
Так вот и трать время на поиск таких решений, а не на поиск кол-ва цветов и какие у тебя будут работать или нет. Цвета опыта не дадут. А поиск непреодолимых решений открывают новые познания. И не копипасть бездумно. Разбирайся с каждой строчкой кода.
Добавлено (06 Июля 2023, 14:28) --------------------------------------------- Кстати на Си+ в интернете куда больше граммотных готовых результатов чем на Делфи.
Добавлено (06 Июля 2023, 14:33) --------------------------------------------- Кстати, обрати внимание на недавно мной созданную тему. Открывает широкие возможности для NeoBook, WisualNeoWin.
Дело не вкуса, дело удобства. Для плагиностроителей легче и проще раскидать все на несколько команд. И как правило у начинающих, полезность плагина исчисляется кол-ом команд. А это в корне не верно. Получается команд много, а толку от плагина никакого.
Первоначально в СпинЕдит была всего одна команда, создание и несколько настроек, посчитал, что это каша, разбил на несколько команд. Несколько не легче и не проще. Иметь несколько функций в одном окне возможно даже проще и быстрее писать. Может быть разбиваем по тому, что лечше проверять и тестировать самим. В большом количестве команд нужно и большое кол. проверок, запутаться можно. А так написал одну команду - проверил, если все ок забыл о не. Однако для точной настроки лучше все разделять(ну это мое мнение) Я вот к примеру, считаю, что плагин должен быть одной направленности, т.е. не должо быть в плагинах команд работы с графикой, реестром, мышью и т.д. Для себя плагины вообще без помощников писал, в с++билдер добавление окна увеличивает размер плагина на 1-1.5 мб
Добавлено (06 Июля 2023, 14:41) ---------------------------------------------
Цитатаmishem ()
В моем случае - да, в твоем - нет.
Как нельзя? Вот:
Код
While "[faHook]" "=" "LEFT_DOWN" GetMousePos "[X]" "[Y]" IfEx "[X] < 83 or [X] > 103 or [Y] < 8 or [Y] > 24" TimerStop "Timer1" Else SetVar "[Counter]" "[Counter] + 1" Delay "100" EndIf EndWhile
Скорость стала как в у тебя, добавил только Delay "100"
Добавлено (06 Июля 2023, 14:47) ---------------------------------------------
Цитатаmishem ()
Так вот и трать время на поиск таких решений, а не на поиск кол-ва цветов и какие у тебя будут работать или нет. Цвета опыта не дадут.
Там просто Андрей написал, что у него плаг понимает больше именованных цветов. Немного заморочился, опыт и с цветами нужно набирать.
Цитатаmishem ()
Кстати на Си+ в интернете куда больше граммотных готовых результатов чем на Делфи.
Мне кажется наоборот, с++builder все последние сообщения 2011 годом заканчиваются, видимо со смертью Архангельского язык начал хереть. Большинство постов начала 2000 годов. Часто на простой вопрос ответ ищу по пол дня.
Добавлено (06 Июля 2023, 14:53) ---------------------------------------------
Цитатаmishem ()
Кстати, обрати внимание на недавно мной созданную тему. Открывает широкие возможности для NeoBook, WisualNeoWin.
Видел твои большие посты. Пока голова другим забита, в ней от языков каша. До недавнего времени js юзал, написал игруху Галактика, посчитал, что хватит, надоел js, вот к C++ и НеоБук вернулся. У нас наконец-то лето пришло на Среднюю Волгу. Весь май и июнь прохладно было, дожди... Нужно хоть позагорать немного :), будет время еще...
Это костыль. Зависает все приложение. В этот момент ты не можешь окно переместить, свернуть, значек мыши сменяется на часы или кружок и т.д. В данном случае не критично, но вообще нужно стараться никогда не использовать эту команду. Только в крайне необходимых случаях, но я таких пока не наблюдал.
Цитатаfrolandr ()
Может быть разбиваем по тому, что лечше проверять и тестировать самим.
Я об этом и говорю. Для плагиностроителей легче, удобнее....
Цитатаfrolandr ()
Я вот к примеру, считаю, что плагин должен быть одной направленности, т.е. не должо быть в плагинах команд работы с графикой, реестром, мышью и т.д.
Совершенно верно. Если только ты не делал его для своих нужд, а после выложил на всеобщее обозрение.
Добавлено (06 Июля 2023, 14:59) ---------------------------------------------
Цитатаfrolandr ()
Пока голова другим забита, в ней от языков каша.
От языков каши не может быть. Они однотипные. Владея одним языком в совершенстве - легко будешь читать все остальные. Главное будешь понимать, о чем там "идет речь". Не хочешь читать хелп?
В основном две ветви от СИ и Паскаля. На PHP и JS пиши почти не думая о типах, в С++ замучаешься преводить один тип к другому, на каждый тип свои функции. Первый язык, который я учил php(не считая Ассемблера для Спектрума и PC 286 это было вообще в древние временя 90 годов), хоть они с js и потомки от Си, но я долго не мог понять js, большая часть его на коллбэках, потом эти промисы. Обычный JS еще да, похож на другие, а вот его часть DOM сначала туго давалось. Кроме того последнее время он очень быстро обновляется. Похожесть тоже может запутывать, функции одного языка пытаешься сунуть в другой.
Добавлено (06 Июля 2023, 19:59) --------------------------------------------- mishem, добавил в faMouseHook получение handle ссылка [faHook] - инфа о кнопке [faHandle] - handle На стандартных компонентах срабатывает хорошо, а вот на добавленном спинедит ошибка вылетает, не пойму почему. При этом кнопки спинедит получает хэндл, а при клике на поле ошибка...
Только дескриптор нужно определять не при щелчке, а при наведении мыши.
Добавлено (06 Июля 2023, 21:09) --------------------------------------------- Вот это уже дельный плагин. Создавай отдельную тему.
Добавлено (06 Июля 2023, 21:23) ---------------------------------------------
Цитатаfrolandr ()
Только нужно как-то это все правильнее сделать.
Добавляй координаты мыши. Заголовок окна, текста объекта. Класс объекта. Короче все что сможешь вытянуть. Обязательно потом пригодится, а по работе не так много писать.
Окно настроек с выбором опций, что бы можно было выбирать нужные вещи, а не отображать все подряд. Если сможешь, привяжи выполнение подпрограмм(ы). Не хочешь читать хелп?
Петра не хватало еще определения дескриптора объекта.
Только сейчас заметил, что у Петра дескриптор объекта тоже определяется. Правда значения у вас разные.
Добавлено (06 Июля 2023, 21:34) ---------------------------------------------
Цитатаfrolandr ()
По сути это только зародыш
Главное не забрось. Я начинал делать монитор, но появились житейные проблемы и бросил. Клавиатурного шпона сделал, правда не помню, доделал или нет... Вадим знает точно. Не хочешь читать хелп?