Обработчики событий 2

отредактировано 06:26 Раздел: FastScript
Опять проблемы с созданием своих Event'ов (а точнее, с их последующей работой)... ;)

Прикручиваю к 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'овым параметром сделать обработчик??
Подскажите, что делать!? ;)

Комментарии

  • отредактировано 06:26
    <span style='color:red'>Нашлось решение! </span>
    Разработчики посоветовали поправить в fs_itools.pas:
    function VarRecToVariant(v: TVarRec): Variant;
    begin
      with v do
        case VType of
          vtInteger, vtObject:
            Result := VInteger;
          vtBoolean:
            Result := VBoolean;
          vtExtended, vtCurrency:
            Result := VExtended^;
          vtChar:
            Result := VChar;
          vtString:
            Result := VString^;
          vtAnsiString:
            Result := String(VAnsiString);
          vtVariant:
            Result := VVariant^;
          else
            Result := Null;
        end;
    end;
    

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

Многофункциональный текстовый редактор. Чтобы отредактировать стиль параграфа, нажмите TAB, чтобы перейти к меню абзаца. Там вы можете выбрать стиль. По умолчанию не выбран ни один стиль. Когда вы выберете текст, появится встроенное меню форматирования. Нажмите TAB, чтобы войти в него. Некоторые элементы, такие как многофункциональные вставки ссылок, картинок, индикаторов загрузки и сообщений об ошибок могут быть вставлены в редактор. Вы можете перемещаться по ним, используя стрелки внутри редактора и удалять с помощью клавиш delete или backspace.