Обработчики событий 2
Опять проблемы с созданием своих Event'ов (а точнее, с их последующей работой)...
Прикручиваю к FastScript компоненты Toolbar2000.
Есть там у такое событие у одного из компонентов:
Создаю описание события для FastScript:
Вот, добавление его в FastScript:
Вот фрагменты скрипта:
И нифига событие не работает...
А точнее, переменная NewText возвращает, например, вместо введенного "Проверка" - "роверка" (съедается первый символ), плюс ко всей строке в конец добавляются всякие системные нечитабельные символы...
Переменная Accept срабатывает когда ей указываешь (True/False), но в результате при True вижу обрезанный вначале текст и квадратики+систеиные слова в его конце, типа "...control_00FCBB04... TTBXEditItemView"...
Такое ощущение, что где-то идет сдвиг на байт вправо...
Может где-то в недрах не корректно идет преобразование из/в ShortString в/из AnsiString?
У кого-нибудь получалось имменно со String'овым параметром сделать обработчик??
Подскажите, что делать!?
Прикручиваю к FastScript компоненты Toolbar2000.
Есть там у такое событие у одного из компонентов:
TTBAcceptTextEvent = procedure(Sender: TObject; var NewText: String; var Accept: Boolean) of object;
Создаю описание события для FastScript:
TBXOnAcceptTextEvent = class(TfsCustomEvent)
public
procedure DoEvent(Sender: TObject; var NewText: String; var Accept: Boolean);
function GetMethod: Pointer; override;
end;
procedure TBXOnAcceptTextEvent.DoEvent(Sender: TObject; var NewText: String; var Accept: Boolean);
begin
CallHandler([Sender, NewText, Accept]);
NewText := String(Handler.Params[1].Value);
Accept := Handler.Params[2].Value;
end;
function TBXOnAcceptTextEvent.GetMethod: Pointer;
begin
Result := @TBXOnAcceptTextEvent.DoEvent;
end;
Вот, добавление его в FastScript:
With fsGlobalUnit do begin
...
AddClass(TTBCustomItem, 'TComponent');
With AddClass(TTBEditItem, 'TTBCustomItem') do begin
AddEvent('OnAcceptText', TBXOnAcceptTextEvent);
end;
...
end;
Вот фрагменты скрипта:
#language PascalScript
var
TBXEdit1: TTBXEditItem;
...
procedure TBXEdit1OnAcceptText(Sender: TObject; var NewText: String; var Accept: Boolean);
begin
If NewText = 'пример' then Accept := True
else Accept := False;
end;
...
begin
...
TBXEdit1 := TTBXEditItem.Create(Form);
TBXEdit1.OnAcceptText := @TBXEdit1OnAcceptText;
TBXToolbar2.Items.Add(TBXEdit1);
end;
И нифига событие не работает...
А точнее, переменная NewText возвращает, например, вместо введенного "Проверка" - "роверка" (съедается первый символ), плюс ко всей строке в конец добавляются всякие системные нечитабельные символы...
Переменная Accept срабатывает когда ей указываешь (True/False), но в результате при True вижу обрезанный вначале текст и квадратики+систеиные слова в его конце, типа "...control_00FCBB04... TTBXEditItemView"...
Такое ощущение, что где-то идет сдвиг на байт вправо...
Может где-то в недрах не корректно идет преобразование из/в ShortString в/из AnsiString?
У кого-нибудь получалось имменно со String'овым параметром сделать обработчик??
Подскажите, что делать!?
Комментарии
Разработчики посоветовали поправить в fs_itools.pas: