Addclass. Ошибка"unknown Type: 'myclass'"

отредактировано August 2007 Раздел: FastScript
**********Delphi
TtmpClass = class(TPersistent) //Создание класса
published
procedure MyShowMsg (a: String);
function GetSomeString: String;
end;

procedure TtmpClass.MyShowMsg(a: String);
begin
ShowMessage(a);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
with fsGlobalUnit.AddClass(TtmpClass, 'TPersistent') do //Добавление класса в скрипт
begin
AddMethod('procedure MyShowDlg(a: String)', CallMethod);
AddMethod('function GetSomeString: String', CallMethod);
end;
Tree.UpdateItems; // Класс появляется в дереве
end;

**********FastScript
procedure Page1OnBeforePrint(Sender: TfrxComponent);
var
s: TtmpClass;
begin
s.MyShowMsg('ffff');
end;

begin

end.

*******************

При выполении скрипта вылезает ошибка "Unknown Type: 'MyClass' "
Что-то не так?*

Комментарии

  • отредактировано 19:14
    ОПЕЧАТКИ В ПОСТЕ!!!!!!!!!!!!!!!!!!!!!

    procedure TForm1.Button3Click(Sender: TObject);
    begin
    with fsGlobalUnit.AddClass(TtmpClass, 'TPersistent') do //Добавление класса в скрипт
    begin
    AddMethod('procedure MyShowMsg(a: String)', CallMethod);
    AddMethod('function GetSomeString: String', CallMethod);
    end;
    Tree.UpdateItems; // Класс появляется в дереве
    end;


    При выполении скрипта вылезает ошибка "Unknown Type: 'TtmpClass' "
    Что-то не так?*
    [/quote]
  • отредактировано 19:14
    fsGlobalUnit уже давно не используется , вызывайте метод AddClass у TFsScript .
  • Stalker4Stalker4 123
    отредактировано 19:14
    _andrews_ написал: »
    При выполении скрипта вылезает ошибка "Unknown Type: 'TtmpClass' "
    Что-то не так?*

    А ты в Delphi-коде перед вызовом своего скрипта не забыл сделать
    fsScript.Parent := fsGlobalUnit ?
  • отредактировано 19:14
    Stalker4 написал: »
    А ты в Delphi-коде перед вызовом своего скрипта не забыл сделать
    fsScript.Parent := fsGlobalUnit ?

    Нет.
    Не забыл

    Script.SyntaxType := 'PascalScript';
    Script.Parent := fsGlobalUnit;
    with Script.AddClass(TtmpClass, 'TPersistent') do
    ..................

    + изменил fsGlobalUnit.AddClass() на Script.AddClass()
    все то же((
  • отредактировано August 2007
    uses fs_iclassesrtti;

    Script.SyntaxType := 'PascalScript';
    Script.AddRTTI;
    with Script.AddClass(TtmpClass, 'TPersistent') do
  • отредактировано 19:14
    написал: »
    uses fs_iclassesrtti;

    Script.SyntaxType := 'PascalScript';
    Script.AddRTTI;
    with Script.AddClass(TtmpClass, 'TPersistent') do
    Ничего не пойму!
    Ошибка та же

    *******
    Еще раз

    Delphi
    procedure TForm1.Button3Click(Sender: TObject);
    begin
    Script.SyntaxType := 'PascalScript';
    Script.AddRTTI;
    with Script.AddClass(TtmpClass, 'TPersistent') do
    begin
    AddMethod('procedure MyShowMsg(a: String)', CallMethod);
    AddMethod('function GetSomeString: String', CallMethod);
    end;
    Tree.UpdateItems;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    with Report do
    begin
    Script.Clear;
    ShowReport;
    end;
    end;

    FSScript
    var
    s: TtmpClass;
    begin

    s := TtmpClass.Create;
    s.MyShowMsg('ff');

    end.
  • отредактировано 19:14
    В Button3Click Script это TfrxReport.Script или TfsScript который создается в приложении ?
  • отредактировано 19:14
    написал: »
    В Button3Click Script это TfrxReport.Script или TfsScript который создается в приложении ?

    Мда....
    Действительно))
    На форму положил TfsScript и работал с ним(((
    А обращался к Report.Script
    Спасибо за наводящий вопрос!!

    ошибку исправил

    Появилась новая проблема

    Script

    var
    s: TtmpClass;
    begin
    s := TtmpClass.Create;
    s.MyShowMsg('ff');
    end;

    Если пишу его в дизайнере - вызывается то, что написано в CallMethod (вроде бы правильно)

    Если пишу так:

    Delphi

    Script.Lines.Text := SyntaxMemo.Lines.Text;
    ShowReport;


    Появляется ошибка

    Script Error at 2:1: 'BEGIN' expected
  • отредактировано 19:14
    Попробуйте так :

    Report.ScriptText.Assign(SyntaxMemo.Lines);
    Report.ShowReport;
  • отредактировано 19:14
    написал: »
    Попробуйте так :

    Report.ScriptText.Assign(SyntaxMemo.Lines);
    Report.ShowReport;

    Спасибо!
    Работает так!!
  • отредактировано 19:14
    У меня такая ошибка :
    The following error(s) have occured:
    Script error at 11:1: 'BEGIN' expected
    
    Полный вид того, что на закладке Code шаблона отчета:
    var   m26t : Double;  
    procedure Memo26OnBeforePrint(Sender: TfrxComponent);
    begin
       m26t := 5;
    //   m26 := <SUM(<ADOTable1.""Оборот ДЗ"">, MasterData1)>;         
      if (<SUM(<ADOTable1.""Сумма оплаты"">, MasterData1)> = NULL) then  
        m26t := 10                
      else
        m26t := 7              
      end;  
    end;
    
    begin
    
    end.
    
    Что делать ?

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

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