Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - ksapp

Страницы: [1]
1
Понятно. Спасибо за разъяснения.

2
Цитировать
В паскале, как и в делфи нельзя передавать свойства объекта в функции Inc, Dec. У нас в компиляторе то же самое, ведь наш компилятор по сути является компилятором Паскаль, с незначительными отличиями.
Ну вот зацепили вы меня прям этим вопросом. Специально проверил:
Код: (delphi)
type MyObj = object
  Svoistvo : integer;
end;

var MyVar : MyObj;

begin
  MyVar.Svoistvo := 0;
  Inc(MyVar.Svoistvo);
end.

В Делфи всё прекрасно компилируется и работает. Кстати, в вашей системе вот такая конструкция:
Код: (delphi)
type MyObj = object
  Svoistvo : integer;
end;

вообще не компилируется - выдаётся ошибка. В то время как вот это:
Код: (delphi)
type MyRec = record
  Svoistvo : integer;
end;
компилируется нормально.

3
Понял. Спасибо.

И всё-таки хотелось бы иметь возможность объявлять глобальные переменные и константы именно как обычные переменные/константы, а не как объекты. Потому что использование объектов в некоторых случаях (таких, например, как описанный ранее) вызывает неудобство, и периодически наступаешь на одни и те же грабли, забывая, что глобальная переменная на самом деле является объектом. Наверно, со временем привыкну, но всё же...

P.S. А вообще в Паскале в функцию можно передавать в том числе и свойство объекта. Поэтому и не могу никак привыкнуть ))))

4
Цитировать
Она есть и работает без ошибок, а если компилятор сообщает об ошибке, значит не просто так. Приведите пример кода, который у Вас не получается скомпилировать.
Я как раз и говорил, что ошибок компилятор не выдаёт, а функция не работает. Вот код
Код: (delphi)
CurrCmdTime.Value := CurrCmdTime.Value + 1;
который работает. А вот так:
Код: (delphi)
Inc(CurrCmdTime.Value);
не работает. При этом никаких ошибок не выдаётся. Просто значение переменной не увеличивается.
CurrCmdTime.Value - это глобальная переменная. Возможно, с локальными переменными функция работает - не проверял.

5
Здравствуйте. Вы всё делаете правильно. Событие двойного клика перекрывается обработкой ввода. Исправим в будущих обновлениях.

Спасибо. Будем ждать ))) Кстати, остальные события для TM_Field проверил - тоже не обрабатываются.

И ещё нашёл небольшую неприятность )))

В документации ничего не сказано про функцию Inc. То есть её как бы нет.
Но если эту функцию использовать в скрипте, то при компиляции не выдаётся никаких ошибок. То есть она как бы есть, хотя и не работает.
Желательно тоже либо реализовать её, либо сделать так, чтобы компилятор сообщал об ошибке.

6
Здравствуйте.
Поле ввода (TM_Field) не обрабатывает события мыши (двойной щелчок - остальные пока не проверял).
Пытаюсь вызвать скрипт по этому событию - ничего не происходит. Сам скрипт рабочий. Например, при двойному щелчку по TM_Text этот же скрипт работает.
Это баг или всё-таки я что-то делаю не так?

7
Здравствуйте.
У меня вопрос: можно ли как-то сделать так, чтобы графический элемент (например, кнопка) был виден на всех страницах?

8
Ребята, всем, конечно, спасибо. Но суть в том, что мне надо работать именно с глобальными переменными, потому что в процедуре должна изменяться глобальная переменная, переданная по ссылке. Переменную целиком тоже пробовал передавать, тоже не компилируется. Так что ваши советы не помогли. Я, конечно, нашёл решение - использовал функцию, которая возвращает значение. Но, теперь вместо одной процедуры мне приходится использовать две функции, т.к. моя подпрограмма должна изменять значения двух глобальных переменных, переданных по ссылке. А это значит, что в конструкции case мне придётся использовать begin...end, то есть

Код
case x of
1: begin
    y := func1;
    z := func2;
    end;
end;

вместо

Код
case x of
1: proc(y, z);
end;

Согласитесь, что это увеличивает размер кода и время на его написание.

Так что просьба к разработчикам решить эту проблему в будущих версиях.

P.S. Вариант из сообщения 271 попробовал, но что-то тоже не получилось. Поковыряю ещё попозже, может разберусь.
P.P.S. Вариант из сообщения 271 работает. Спасибо за подсказку.

9
Пробовал с AsInt и с OriginalAsInt. Тоже не компилируется. Причём с объектами, связанными с графикой (например, с TM_Image вместо Byte) подобная процедура работает нормально. А вот с глобальными переменными не получается. Может это связано с ограничениями бесплатной версии? Хотя вроде как ограничения касаются только баз данных и файлов.

10
Здравствуйте снова.
Видимо, какое-то время ещё буду надоедать вам, пока не освоюсь  :)
Вопрос такой: есть процедура (см. код), которая должна возвращать значение в глобальную переменную. Но этот код выдаёт ошибку. Хотя при использовании локальной переменной всё компилируется нормально. Как решить эту проблему?

Код
var z : byte;

procedure Test(var x : byte);
begin
  x := 1;
end;

//------------------------------------------------------------------------------------------------------
// ОСНОВНОЙ СЦЕНАРИЙ
//------------------------------------------------------------------------------------------------------
begin
 
  Test(z);  //Компилируется
  Test(BIT_0.Value );  //Не компилируется (BIT_0 - глобальная переменная типа byte)
  //Сообщение об ошибке: [uGlobal] Types of actual and formal var parameters must be identical

end.     

11
Ещё вопрос. Правда не по скриптам.
Не могу ввести в поле (вручную) значение больше 100. В свойствах поля стоит параметр "Максимум" 100. В документации сказано, что этот параметр изменяется в редакторе переменных. Но там я такого параметра не нашёл. Там есть границы, но это, как я понимаю, не "Максимум". В чём может быть причина?

12
Понял. Спасибо. Можно, конечно, без этого обойтись. Но новых версий будем ждать ))) И про редактор не забудьте. Всё-таки не очень удобно случайно удалив кусок кода не иметь возможности отменить это действие.

13
Здравствуйте.
Недавно начал изучать Simple-SCADA. Система интересная. Видимо, остановлюсь на ней (раньше не использовал SCADA, пробовал многие, но по разным причинам отказывался и продолжал создавать своё ПО для АСУ на Делфи). Появилось несколько вопросов по скриптам:

1) Можно ли как-то вызвать скрипт из другого скрипта
2) Можно ли как-то объявить глобальную процедуру/функцию
3) Можно ли выполнять скрипты, которые находятся во внешних файлах
4) Можно ли объявить глобальный класс/объект и связать с ним глобальную переменную, или, например, глобальный массив
5) Можно ли использовать API-Windows и DLL
6) Можно ли выводить в поля значения в двоичном или шестнадцатеричном виде
7) Немного напрягает отсутствие отмены изменений в редакторе скриптов (хотя кого я обманываю - сильно напрягает)))

Всем заранее спасибо.

Страницы: [1]