Ламерский вопрос

отредактировано 19:24 Раздел: FastScript
Привет, Народ!
Сори за тупой вопрос, но...
Хотелось бы использовать FastScript. Но как передать значения переменных и выдернуть получившийся результат - не понял. В описании примеры с автономными скриптами, а других не нашел.
Заранее все огромный сенькс. ;)

Комментарии

  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 19:24
    Miktor написал:
    Привет, Народ!
    Сори за тупой вопрос, но...
    Хотелось бы использовать FastScript. Но как передать значения переменных и выдернуть получившийся результат - не понял. В описании примеры с автономными скриптами, а других не нашел.
    Заранее все огромный сенькс. ;)
    Качаете документацию
    FastScript - Руководство разработчика, открываете и ищете раздел Доступ к переменным из программы. Там черным по белому НА РУССКОМ ЯЗЫКЕ написано что и как.
    И в следующий раз прежде чем задать ламерский вопрос смотрите в документацию. Она для того и существует.
  • отредактировано 19:24
    Уважаемый Andrew_Sh. Конечно же я почитал документацию. И что касается доступа к переменным, там сказано буквально 2 строчки:
    val := fsScript1.Variables['i'];
    fsScript1.Variables['i'] := 10;
    
    тоже самое было понятно из справки. Однако каким образом объявлять переменную (непосредственно в теле скрипта или методом AddVariable) не сказано. Простейший пример:
    Script.AddVariable('Precenz1', 'Extended', 2.834);
    Script.AddVariable('Precenz2', 'Extended', 0.84);
    Script.AddVariable('SigmaR', 'Extended', 0);
    Script.AddVariable('C', 'Extended', 0);
    Script.AddVariable('Result', 'Extended', 0);
    Script.Lines.Add('begin                                              ');
    Script.Lines.Add('  Result:=Precenz1*Precenz2*SigmaR*C/100;'          );
    Script.Lines.Add('end.                                               ');
    Script.Parent := fsGlobalUnit;
    Script.Variables['Precenz1'] := dmMain.ReadDouble('Koef', 'Precenz1', 2.834);
    Script.Variables['Precenz2'] := dmMain.ReadDouble('Koef', 'Precenz2', 0.84);
    Script.Variables['SigmaR'] := dmMain.GetSigmaR(dmMain.adsPrimPrecIDRec.AsInteger, (ceU1.Value + ceU2.Value) / 2);
    Script.Variables['C'] := ceResult.Value;
    if Script.Compile then
      Script.Execute
    else
    begin
      ShowMessage(Script.ErrorMsg + ' at ' + Script.ErrorPos);
      Exit;
    end;
    ceNorm.Value := Script.Variables['Result'];
    
    не компилируется и выдает ошибку "Incompatible type at 2:20". Попытка объявить переменные внутри скрипта вызывает ошибку "Variable Precenz1 redeclered". Проверка получения значения переменной (ShowMessage(Script.Evaluate('Precenz1')); выполняется нормально. Вот поэтому и попросил простой пример обращения к переменным скрипта. Кроме того в заголовке сообщения определенно указано что вопрос от новичка (в использовании FastScript) и Ваша реакция, на мой взгляд, не совсем правомерна.
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 19:24
    Miktor написал:
    Простейший пример:
    Script.AddVariable('Precenz1', 'Extended', 2.834);
    Script.AddVariable('Precenz2', 'Extended', 0.84);
    Script.AddVariable('SigmaR', 'Extended', 0);
    Script.AddVariable('C', 'Extended', 0);
    Script.AddVariable('Result', 'Extended', 0);
    Script.Lines.Add('begin                                              ');
    Script.Lines.Add('  Result:=Precenz1*Precenz2*SigmaR*C/100;'          );
    Script.Lines.Add('end.                                               ');
    Script.Parent := fsGlobalUnit;
    Script.Variables['Precenz1'] := dmMain.ReadDouble('Koef', 'Precenz1', 2.834);
    Script.Variables['Precenz2'] := dmMain.ReadDouble('Koef', 'Precenz2', 0.84);
    Script.Variables['SigmaR'] := dmMain.GetSigmaR(dmMain.adsPrimPrecIDRec.AsInteger, (ceU1.Value + ceU2.Value) / 2);
    Script.Variables['C'] := ceResult.Value;
    if Script.Compile then
      Script.Execute
    else
    begin
      ShowMessage(Script.ErrorMsg + ' at ' + Script.ErrorPos);
      Exit;
    end;
    ceNorm.Value := Script.Variables['Result'];
    
    не компилируется и выдает ошибку "Incompatible type at 2:20". Попытка объявить переменные внутри скрипта вызывает ошибку "Variable Precenz1 redeclered". Проверка получения значения переменной (ShowMessage(Script.Evaluate('Precenz1')); выполняется нормально. Вот поэтому и попросил простой пример обращения к переменным скрипта. Кроме того в заголовке сообщения определенно указано что вопрос от новичка (в использовании FastScript) и Ваша реакция, на мой взгляд, не совсем правомерна.
    Если бы Вы СРАЗУ описали в чем проблема и при каких условиях она возникает, то и получили бы точный ответ.

    <span style='color:red'> Переместите строку
    Script.Parent := fsGlobalUnit;
    ДО ВЫЗОВА Script.AddVariable и все заработает.</span>
    // !!! ЭТА СТРОКА ДОЛЖНА БЫТЬ ДО ВЫЗОВА AddVariable
    Script.Parent := fsGlobalUnit; 
    
    Script.AddVariable('Precenz1', 'Extended', 2.834);
    Script.AddVariable('Precenz2', 'Extended', 0.84);
    Script.AddVariable('SigmaR', 'Extended', 0);
    .......
    

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

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