[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Allow missing components (or detect them in project)


On Wed, 21 Jan 2026 at 11:15, Bruce Steers <bsteers4@xxxxxxxxx> wrote:

> Omg omg omg , Fantastic 😁
>
> I'll start testing it as soon as I finish work 😎
>
> Thank you so very much Benoit.
>
> A superb addition to the gui suite 😎
>
> Much respect
> BruceS
>
> On Wed, 21 Jan 2026, 08:20 Benoît Minisini, <
> benoit.minisini@xxxxxxxxxxxxxxxx> wrote:
>
>> Le 17/01/2026 à 17:48, Benoît Minisini a écrit :
>> > Le 17/01/2026 à 16:59, Bruce Steers a écrit :
>> >>
>> >>     Why don't you just use an event observer to catch the keyboard
>> >>     events on
>> >>     the editor?
>> >>
>> >>     And in that cas which private variable would you need?
>> >>
>> >>     --     Benoît Minisini.
>> >>
>> >>
>> >> It's not the getting of the event it's the giving.
>> >>
>> >
>> > Ah, now I remember, we already talk about that. If I remember
>> correctly,
>> > I said that I should add a way inside the GUI component to inject a
>> fake
>> > keyboard event, so that you don't have to do any trick to make macros.
>> >
>> > Is there an issue tracker for that request? I don't think it's very
>> > difficult to implement that. But of course the fake key event may be
>> > available only locally, and for controls written in Gambas. I will
>> see...
>> >
>> > Regards,
>> >
>>
>> Hi,
>>
>> I have added 'Key.Send()' in the last commits, that send a fake keyboard
>> event to the current active control (two actually, one 'KeyPress', and
>> one 'KeyRelease').
>>
>> It takes a string shortcut as argument, something like that:
>>
>> Key.Send("A")
>> Key.Send("é")
>> Key.Send("CTRL+C")
>> Key.Send("CTRL+ALT+DEL")
>>
>> You should pass it directly what you get from 'Key.Shortcut'.
>>
>> Normally, you should be able to get rid of a lot of hacks with that!
>>
>> Regards,
>>
>> --
>> Benoît Minisini.
>
>

My initial findings....

IT'S AWESOME :)))  thank you soooo much :) 🙏🙏

I just made a working keystroke recorder / playback for text editor in
about 10 minutes :)
Then spent a little of time adding some tweaks :)

I have to handle menu shortcuts that we might want to use in the recorder
but are part of the program not the editor itself as these keystrokes are
hidden from the editor.  Observers are attached to the menus to register
the shortcut when pressed and when played back the menu item is just
clicked.

No need for the MacroKey class or anything now i can just send a shortcut
string via Key.class, lovely :)

Attached is the simple test KeyRecorder enabled TextEditor i just made.
(using only inheritance :)
You can see here it works great:
https://gambasgb.uk/Clips/simplescreenrecorder-keyrecorder.mkv

I'll run it through some tests :)

Amazing :)  you are a star :)
Much respect
BruceS
<salt FCKGM-0001-DB79-296B-6FE8>
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
EAgEAoFAIBAIBAKBMAD+AoJa6BEAeAAA
</salt>

Follow-Ups:
Re: Allow missing components (or detect them in project)Bruce Steers <bsteers4@xxxxxxxxx>
References:
Allow missing components (or detect them in project)Bruce Steers <bsteers4@xxxxxxxxx>
Re: Allow missing components (or detect them in project)Benoît Minisini <benoit.minisini@xxxxxxxxxxxxxxxx>
Re: Allow missing components (or detect them in project)Bruce Steers <bsteers4@xxxxxxxxx>
Re: Allow missing components (or detect them in project)Benoît Minisini <benoit.minisini@xxxxxxxxxxxxxxxx>
Re: Allow missing components (or detect them in project)Bruce Steers <bsteers4@xxxxxxxxx>
Re: Allow missing components (or detect them in project)Benoît Minisini <benoit.minisini@xxxxxxxxxxxxxxxx>
Re: Allow missing components (or detect them in project)Bruce Steers <bsteers4@xxxxxxxxx>
Re: Allow missing components (or detect them in project)Benoît Minisini <benoit.minisini@xxxxxxxxxxxxxxxx>
Re: Allow missing components (or detect them in project)Benoît Minisini <benoit.minisini@xxxxxxxxxxxxxxxx>
Re: Allow missing components (or detect them in project)Bruce Steers <bsteers4@xxxxxxxxx>