On 28.01.2012 18:38, Mark Morgan Lloyd wrote:
Ludo Brands wrote:
I'll start digging in and see where I get to, but any suggestions-
particularly relating to Linux- will be welcome.
Under X11 you can modify your keyboard to your likings. 4 levels per
key are
standard using Shift and 3 lvl key (Altgr on most non-Eglish kbd but
configurable to any key). Keys can be defined with their unicode code
(Uxxxx
format).
A nice howto here:
http://people.uleth.ca/~daniel.odonnell/Blog/custom-keyboard-in-linuxx11
.
As usual, locations of the kbd files differ from distribution to
distribution and even between versions.
Thanks Ludo. I'm already doing a bit of custom stuff to get A+ running
(arguably the largest free APL that still uses the original characters).
But the question remains: once inside a Lazarus app, can I hook keycodes
using a custom procedure, translate them to Unicode, and inject them
into the currently-focussed edit-capable control?
Take a look at the OnKeyDown and OnKeyUp events. Their "Key" argument is
a "var" one. You can "cancel" the default routine of the control the
handler is assigned to by setting the "Key" to "0" after you processed it.
E.g.
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word; Shift:
TShiftState
);
begin
Key := 0;
Edit1.SelText := #$e2#$9b#$a4;
end;
This will insert a "pentagramm" at the current cursor position of
"Edit1" (you'll only see it if you have a font that contains that
character).
You will then need to implement things like "key is hold down thus
insert character until released" yourself using a timer and OnKeyUp.
Also you can assign one event handler to multiple TEdits (or other
controls that support OnKeyDown/-Up) so you have only one routine which
uses the "Sender" parameter to differentiate the action to do.
PS: Maybe this is not the best solution (I never needed to do something
like this), but it should work.
Regards,
Sven
--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus