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

Reply via email to