Page 1 of 1
использованиe For
Posted: 18.03.2010 19:23
by MeLFiS
Code: Select all
rb= какоето айди рунбуки
rmax = 16
for r:= 1 to rmax do
begin
Recall(rb,r);
end;
Кусок скрипта для рекола по всем рунам в 1 рунбуке как изменить его чтобы он реколился по всем рунам в 3 рунбках ? ?
П.С перекинете плиз в подфорум Help ато промазал кропаль((
Posted: 19.03.2010 13:11
by WladL
rbArr: Array of Cardinal;//ID буков
rbArr := [$xxxxxx,$yyyyyy,$zzzzzz]
rmax = 16
for a:=0 to Integer(high(rbArr)) do
for r:= 1 to rmax do
Recall(rbArr[a],r);
Posted: 19.03.2010 14:27
by CFA
по моему в pascalscript не работает low/high применительно к массивам. я везде использовал getArrayLength(rbArr)-1
Posted: 19.03.2010 14:36
by Vizit0r
что-то там давно было с high применительно к массивам в паскальскрипте - или работало неправильно, или скрипт вылетал с ошибкой, не помню. помню только что проблема была в этом.
так что не стоит использовать

Posted: 19.03.2010 14:53
by MeLFiS
Что же тогда использывать место
Code: Select all
for a:=0 to Integer(high(rbArr)) do
???
Code: Select all
for a:=0 to getArrayLength(rbArr)-1 do
это ?
Posted: 19.03.2010 15:44
by Vizit0r
да
Posted: 19.03.2010 16:37
by WladL
Проблема была в том , что в текущей версии паскальскрипта функция high вовзращает значение не Integer(как-то не удосужился проверить что именно она вовзращает) и если использовать его влоб как
получим ошибку, а вот если сделать прямое приведение к типу Integer,
Code: Select all
for a:=0 to Integer(high(rbArr)) do
то все очень даже и работает.
ЗЫ. Повторюсь это ТОЛЬКО в текущей версии паскальскрипта.
например в релизе стелса 1.0 , все работало и без приведения типов.
Posted: 20.03.2010 10:42
by Vizit0r
Code: Select all
{$IFNDEF PS_NOINT64}
AddFunction('function Low: Int64;').Decl.AddParam.OrgName:='x';
AddFunction('function High: Int64;').Decl.AddParam.OrgName:='x';
{$ELSE}
AddFunction('function Low: Integer;').Decl.AddParam.OrgName:='x';
AddFunction('function High: Integer;').Decl.AddParam.OrgName:='x';
{$ENDIF}
{$IFNDEF FPC}
{$IFNDEF DELPHI4UP}
{$IFNDEF LINUX}
{$DEFINE PS_NOINT64}
{$ENDIF}
{$ENDIF}
{$ENDIF}
я устал закапываться в дебри этих дэфайнов

кому не лень - вперед в гугл.
из того, что я понял - надо при компиляции релизов правильно выполнять все условия, чтобы возвращало Integer, а не Int64. Хотя выполнить {$IFNDEF DELPHI4UP} сложно
А еще надежнее действительно жестко приводить через Integer(High(xxx))
P.S. В принципе паскальскрипт все увереннее внедряет новые форматы и стандарты, но так как мы вряд ли когда-то перейдем на Д2010 - то наверное можно принудительно задать Integer в этом и других таких местах