понедельник, 4 ноября 2013 г.

GUI-тестирование "по-русски". Ввод "алфавитно-цифровых" символов в текущий контрол

Предыдущая серия была тут - http://18delphi.blogspot.ru/2013/11/gui_4.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) вот так:

 'Привет мир!' "Ввести строку"

Есть одна тонкость. Этот код работает с русскими буквами правильно, если клавиатура переключена на русскую локаль. Как это сделать из кода - я напишу чуть позднее.

А пока - закончим.

Комментариев нет:

Отправить комментарий