Как послать событие гаджету?
|
|
electrik | Дата: Пятница, 28.01.2022, 19:35 | Сообщение # 1 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| У пурика есть PostEvent, но в Window9 я подобного ненашёл. пробовал так:
Код PostMessage(hwnd, EventGadget, NULL, ID_MAIN_BUTTON_SELECT_FILE)
Не работает.
Скажу сразу, кнопка находится в контейнере.
|
|
| |
haav | Дата: Пятница, 28.01.2022, 20:34 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Не знаю , зачем тебе это нужно, но вот пример для windows и linux:
Код #Include "window9.bi" Dim Shared As HWND hw hw=OpenWindow("",10,10,500,500) ContainerGadget(4,100,0,300,300) ButtonGadget(1,10,10,100,30 , "1 button") ButtonGadget(2,10,40,100,30 , "2 button") Do Var ev=WaitEvent If ev=EventClose Then exit do elseif ev = eventgadget then if eventnumber = 1 then #ifdef __FB_WIN32__ sendmessage(hw , WM_COMMAND , makelparam(2,1) , cast( lparam , gadgetid(1) ) ) #else pGlobalTypeWindow9->DIMSTOREEVENT(pGlobalTypeWindow9->indexEvent).w = gadgetid(2) pGlobalTypeWindow9->DIMSTOREEVENT(pGlobalTypeWindow9->indexEvent).Eventnumber = 2 pGlobalTypeWindow9->DIMSTOREEVENT(pGlobalTypeWindow9->indexEvent).event_ = Eventgadget If pGlobalTypeWindow9->indexEvent < 1000 Then pGlobalTypeWindow9->indexEvent+=1 Endif Sendnullevent() #EndIf elseif eventnumber = 2 then messbox("" , "get custom message for button 2") EndIf EndIf Loop
Как видишь , для винды используется стандартный способ с отправкой сообщения в оконную процедуру главного окна. Нажатие кнопки интерпретируется из сообщения WM_COMMAND. Пояснять для Linux думаю не имеет смысла , но если очень интересно как это делается с этим или другими событиями , смотри файл callback.bas в исходниках linux библиотеки. Посылать eventgadget , eventmenu и пр. бесполезно , поскольку это внутренние определения библиотеки.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
electrik | Дата: Пятница, 28.01.2022, 21:41 | Сообщение # 3 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Огромное спасибо! В принципе, я бы мог сделать функцию и её вызывать дважды. Идея такова, в основном окне у меня есть кнопки, а также в меню есть дубликаты. Так вот когда юзер вызывает пункт меню, мне надо чтобы нажималась кнопка, под которой уже написано действие. Эту методику с посылом события я подсмотрел у кого-то давно. Можно было бы убрать дубликаты из меню, но это я делаю чисто так, чтобы меню не состояло из двух пунктов, настройки и выход. Кидать кнопку настройки в главное окно не хочу, чтобы случайно не лазили. Да и для общего развития не помешает. В чистом API я знаю как такое сделать, интересно было в Window9.
|
|
| |
zamabuvaraeu | Дата: Пятница, 28.01.2022, 22:20 | Сообщение # 4 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Налицо антипаттерн программирования «Магическая кнопка».
В обработчиках событий контролов (окна, меню, панель инструментов) не должно происходить обработки бизнес‐логики. Обработчики событий должны вызывать функции бизнес‐логики или специализированного класса.
|
|
| |
haav | Дата: Пятница, 28.01.2022, 22:21 | Сообщение # 5 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Че-то не понял. Почему просто не сделать так:
Код Do Var ev=WaitEvent If ev=EventClose Then exit do elseif ev = eventMenu then if eventnumber = idMenu1 then proc() EndIf elseif ev = eventgadget then if eventnumber = idButton1 then proc() EndIf EndIf Loop
Процедура "proc" будет вызываться и при нажатии кнопки и при нажатии меню.
Но если тебе нравится гонять события по кругу , то кто же тебе запретит?
Кстати , я забыл. Реализация устроена так , что перед тем как посылать сообщение на кнопку с помощью SendMessage , нужно установить фокус на то окно, которое указано в 4 параметре SendMessage.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Пятница, 28.01.2022, 22:28 | Сообщение # 6 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Даже для такой простой программы уровня восьмого класса третьей четверти «Вычисление корней квадратного уравнения» с тремя текстовыми полями для ввода и одной кнопкой «Вычислить», все вычисления и проверки на корректность ввода необходимо выносить в отдельные функции и классы. GitHub - zamabuvaraeu/QuadraticEquation: Решение квадратного уравнения
|
|
| |
electrik | Дата: Суббота, 29.01.2022, 00:03 | Сообщение # 7 |
Полковник
Группа: Друзья
Сообщений: 182
Статус: Offline
| Естественно события гонять никто не запретит. идея с функцией мне тоже больше нравиться, оно будет быстрее работать. я сделаю функцию, но повторюсь, было интересно как при использовании window9 посылать события кнопкам. К тому же возиться с фокусами я тоже не хочу, это усложнит код, ну его нафиг! А поповоду выноса рассчетов в отдельные функции, ну для удобочитабельности и безопасности - это правильно, а вот если ты пишешь серьёзный софт, ну скажем аналоговый синтез звука, я бы не стал каждое сложение заворачивать в функцию. Эти идеи ООП, завернуть каждый оператор, каждую переменную в отдельную проперти, круто, но ведь оно работает не быстрее, если мы будем рассуждать на тему экономии тактов процессора. Я всегда удивляюсь над тем, когда народ балуется со здвигами битов, чтобы быстрее работало, при этом юзают класс на классе, и классом погоняет. Я не против ООП, но его уж так раскрутили, как что-то божественное и правильное. Раньше писали на чистом C, и софт маленький был, и много умел. Бизнес зло, ибо из-за него придумывают всякие инструменты которые ускоряют разработку, но только уже всем пофиг на размер, на такты процессора и т.п. Так что гонять события не самое страшное, а вот байт код на байт коде который трижды друг другом погоняет - вот зло! Ну совсем охренели!, какой-то скайп, тащит за собой кусок хрома! DISCORD - тащит за собой кусок хрома, и это две программы которые у меня на компьютере занимают больше пол гигабайта! Да установленная Windows98 меньше весила! Я собрал мощный комп в 2016 году, проц CORE i7-6700, 4 ггц, память DDR4 16 гб, 2166 мгц( не очень быстрая), а теперь Microsoft мне говорит: а купи для Windows 11 новый комп! Да, они не препятствуют установке новой системы, но не гарантируют что она на моём железе будет нормально работать! Охренели, я чё, нефтяной магнат, чтобы каждые 5 лет компы менять! Вот вам и бизнес - зло! зло! зло!Добавлено (29.01.2022, 00:16) --------------------------------------------- Меня тут мужычёк обещал поучить кодить на каскадных таблицах, вот это круть! Дядька уже не молодой, имел старые машины, вот где действительно было искусство! Я представляю как оно работает, но ведь интересны его идеи. В компиляторах оператор switch ну и select case, как раз работают по таблицам переходов. Ну такое программирование не для бизнеса, е..ть его, тут творение, долгое. Бизнес не любит творцов, там должно уже вчера быть сделано. Бомбануло, бывает. Добавлено (29.01.2022, 00:24) --------------------------------------------- zamabuvaraeu - вы понимаете в математике? По хорошему надо для этого новую тему создать, но всё же спрошу. Приходилось ли когда-нибудь рассчитывать коэффициенты каскадных биквадратных фильтров? Там формулы не сложные, но всё что касается серьёзной математики, я дуб дубом, а функция такая нужна. Я конечно нашёл на Java скрипте, попробую переписать.
|
|
| |
haav | Дата: Суббота, 29.01.2022, 11:03 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 1366
Статус: Offline
| Серега , я согласен с тобой по поводу маниакальной идеи все и везде заворачивать в функции и там где надо и не надо использовать ООП , интерфейсы и пр. механизмы . Мне не раз приходилось выискивать сторонние решения для каких-то задач , и в большинстве случаев это были большие по объему кода решения. Когда начинаешь вникать в код и наконец добираешься до "иголки кощея" , на деле оказывается , что сам принцип (реализация алгоритма) умещается на одной или двух страницах редактора , а все остальное - "вода" для придания значимости. К сожалению (лично для меня), люди в большинстве своем любят наводить тень на плетень.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |
zamabuvaraeu | Дата: Понедельник, 31.01.2022, 18:45 | Сообщение # 9 |
Подполковник
Группа: Друзья
Сообщений: 149
Статус: Offline
| Математику понимаю немножно, коэффициенты каскадный биквадратных фильтров не рассчитывал.
|
|
| |
|