Предыдущая серия была тут - http://18delphi.blogspot.ru/2013/11/gui_4.html
Там я рассматривал возможность ввода строки в текущий контрол, а также посылку текущему контролу управляющих клавиш.
Рассмотрим ещё одно слово.
Для ввода "алфавитно-цифровых" символов.
Со стороны Delphi это выглядит так:
И пример использования:
И "вспомогательное" слово:
И тогда пример переписывается так:
Или с учётом ремарки (http://18delphi.blogspot.ru/2013/11/gui_1949.html) вот так:
Есть одна тонкость. Этот код работает с русскими буквами правильно, если клавиатура переключена на русскую локаль. Как это сделать из кода - я напишу чуть позднее.
А пока - закончим.
Там я рассматривал возможность ввода строки в текущий контрол, а также посылку текущему контролу управляющих клавиш.
Рассмотрим ещё одно слово.
Для ввода "алфавитно-цифровых" символов.
Со стороны Delphi это выглядит так:
interface
TkwEmitString = class(TscriptKeyWord)
{* Позволяет ввести строку.
Пример:
[code]
PROCEDURE "Ввести строку" STRING IN aString
aString EmitString
END //"Ввести строку"
[code] }
protected
// realized methods
procedure DoIt(aContext: TscriptContext); override;
end;//TkwEmitString
implementation
procedure TkwEmitString.DoIt(aContext: TscriptContext);
var
l_Index : Integer;
l_C : Integer;
l_H : THandle;
l_S : String;
begin
l_S := aContext.PopString;
l_H := Windows.GetFocus;
Assert(l_H <> 0);
for l_Index := 1 to Length(l_S) do
begin
l_C := ORD(l_S[l_Index]);
if (Windows.GetFocus <> l_H) then
Windows.SetFocus(l_H);
// - иногда (например под отладчиком) фокус "убегает" из контрола - поэтому тут вставлена эта "заплатка"
SendMessage(l_H, WM_CHAR, l_C, 0);
end;//for l_Index
end;//TkwEmitString.DoIt
initialization
ScriptEngine.RegisterKeyWord(TkwEmitString, 'EmitString');
И пример использования:
'Привет мир!' EmitString
И "вспомогательное" слово:
PROCEDURE "Ввести строку" STRING IN aString aString EmitString END //"Ввести строку"
И тогда пример переписывается так:
"Ввести строку {('Привет мир!')}"
Или с учётом ремарки (http://18delphi.blogspot.ru/2013/11/gui_1949.html) вот так:
'Привет мир!' "Ввести строку"
Есть одна тонкость. Этот код работает с русскими буквами правильно, если клавиатура переключена на русскую локаль. Как это сделать из кода - я напишу чуть позднее.
А пока - закончим.
Комментариев нет:
Отправить комментарий