Вверх ↑
Этот топик читают: Гость
Ответов: 4396
Рейтинг: 475
#31: 2008-12-10 19:22:00 ЛС | профиль | цитата
в режиме UseName=True верхние точки с разными именами не работают

вот пример в котором достаточно любую точку из DataPoints переименовать например из dat1 в bat1 и в коде sys.bat и приплыли. Пример не работает

code_10923.txt
карма: 4

0
файлы: 1code_10923.txt [944B] [330]
Главный модератор
Ответов: 2696
Рейтинг: 354
#32: 2008-12-10 19:36:05 ЛС | профиль | цитата
Или ничего не понял, или всё работает
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 8338
Рейтинг: 775
#33: 2008-12-10 19:46:37 ЛС | профиль | цитата
Nic,
andrestudio писал(а):
переименовать например из dat1 в bat1

карма: 14

0
файлы: 1error..png [6.9KB] [283]
Ответов: 4396
Рейтинг: 475
#34: 2008-12-10 19:51:09 ЛС | профиль | цитата
Nic, Выше в посте проделываю и получаю
Oбъeкт нe пoддepживaeт этo cвoйcтвo или мeтoд: 'bat2'


сам код такой

code_10926.txt

у верхней точки тоже имя bat2. Может у меня только такой криминал.
карма: 4

0
файлы: 1code_10926.txt [254B] [329]
Главный модератор
Ответов: 2696
Рейтинг: 354
#35: 2008-12-10 20:16:53 ЛС | профиль | цитата
Да - это знакомый мне глюк. Лечится просто: заведи себе за правило называть точки или однотипно или с соблюдением латинского алфавита и их очередности
------------ Дoбавленo:

Уже давно, Dilma объяснял почему это так, помню что ничего не понял, но принял на веру, что так надо и больше вопросов не задавал.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 2125
Рейтинг: 159
#36: 2008-12-10 21:05:18 ЛС | профиль | цитата
Не знаю, чего он там объяснял, но после замены на вот это


#pas
function TMe.GetIDsOfNames(const IID: TGUID; Names: Pointer; NameCount,
LocaleID: Integer; DispIDs: Pointer): HResult;
type
TDispIDsArray = array[0..0] of TDISPID;
PDispIDsArray = ^TDispIDsArray;
TNamesArray = array[0..0] of PWideChar;
PNamesArray = ^TNamesArray;
var
IDs: PDispIDsArray absolute DispIDs;
NMs: PNamesArray absolute Names;
i,j: integer; Name: WideString;
begin
if NameCount < 1 then Result := E_INVALIDARG else Result := S_OK;
for i := 0 to NameCount - 1 do begin
IDs[i] := DISPID_UNKNOWN; Name := NMs[i];
if not FScript._prop_UseName then
if LowerCase(Name) = 'onevent' then IDs[i] := DISPID_EVENT
else if LowerCase(Name) = 'getdata' then IDs[i] := DISPID_GETDATA
else Result := DISP_E_UNKNOWNNAME
else begin
if (FScript.FECount <> nil) then begin
j := FScript.FECount.IndexOf(LowerCase(Name));
if j<0 then j := FScript.FECount.IndexOfName(LowerCase(Name));
if j>=0 then IDs[i] := 1000 + j;
end;
if (FScript.FDCount <> nil) then begin
j := FScript.FDCount.IndexOf(LowerCase(Name));
if j<0 then j := FScript.FDCount.IndexOfName(LowerCase(Name));
if j>=0 then IDs[i] := 2000 + j;
end;
end;
end;
end;
всё работает.
карма: 1

0
Главный модератор
Ответов: 2696
Рейтинг: 354
#37: 2008-12-10 21:32:59 ЛС | профиль | цитата
А на SVN выложить?
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 2125
Рейтинг: 159
#38: 2008-12-10 21:43:19 ЛС | профиль | цитата
Усё будет, не спеши.
карма: 1

1
Голосовали:andrestudio
Ответов: 4396
Рейтинг: 475
#39: 2008-12-11 16:21:10 ЛС | профиль | цитата
tsdima, Спасибо большое

Проверил, работает. Это большой плюс, пускай даже в своих кодах через некое время мы не увидим sys.dat1, sys.dat2 и т.д, всё же гораздо приятние видеть настоящие имена.
Вот если бы ещё можно было коментарии через "=" делать к точкам было бы вообще замечательно (мне кажется что так и задумывалось), пробовал как то в окне подсказки коментарий отображается правельно но точка после этого стаёт не рабочей .

Nic, не знаю как Вы а я начинаю прописывать точки по новым правилам

p.s как устал вставать на грабли (в своём возрасте) голова болит чес слово
карма: 4

0
Ответов: 2125
Рейтинг: 159
#40: 2008-12-11 18:52:43 ЛС | профиль | цитата
andrestudio писал(а):
Вот если бы ещё можно было коментарии через "="

А я-то блин думал, нафига используется Find, а не IndexOf Можно, конечно, поправить, но в случае Find список должен быть отсортирован, поэтому и не работало dat1 bat2.

------------ Дoбавленo:

andrestudio, исправь в коде IndexOf на IndexOfName.
------------ Дoбавленo:

Пардон, чего-то не работает, щас выясню.
------------ Дoбавленo:

А, ну да, там же знак = не всегда стоит
------------ Дoбавленo:

Я поправил код выше, теперь работает.
Только я не понял, как комментарии писать, чтобы они где-то высвечивались?
карма: 1

0
Ответов: 4396
Рейтинг: 475
#41: 2008-12-11 21:18:10 ЛС | профиль | цитата
tsdima, знак = работает как делмер между именем и коментарием (это я так думаю) и пробовал я это прописывать в именах к точкам.
доконца не просёк куда этот код подставить, но сейчас попробую.
карма: 4

0
Главный модератор
Ответов: 2696
Рейтинг: 354
#42: 2008-12-11 22:05:44 ЛС | профиль | цитата
tsdima писал(а):
чтобы они где-то высвечивались?


По крайней мере, при наведении мыши на точку, выдаются как коммент на баллоне.
карма: 8
Дорогу осилит идущий. HiAsm.NET is based on HiAsm 5
0
Ответов: 4396
Рейтинг: 475
#43: 2008-12-12 13:02:29 ЛС | профиль | цитата
Nic, помоги пожалуйста если можешь.

Вобщем не могу понять как в скрипт предать параметры для методов обьекта.
Постараюсь обьяснить как смогу (пример только вечером если что)
Где параметры имеют формат тип стринг то нет проблем, это у меня получается, а вот нужно передать имена переменных и некие константы допустим, сами переменные в скрипте уже обьявлены и имеют значение типа int (проверил мессагой)

сама строка (обьект.метод var1, var2,100 допустим так) если её подставить в скрипт, работает
так вот не получается эту строку через точку метода скрипта doCommand допустим передать, выскакивает ошибка о не соответствии типа данных, мануалы всякие читал и ни чего не мог найти (у них просто нет HiAsm ), в примерах тоже только с верхних точек, вобщем сами данные в формате стринг поступают через case selest куда нужно (мессагой ловлю) но тип данных как им сменить не пойму, нужно склонить обьект принять стринг за имена переменных, может какая то функция существует?
карма: 4

0
Ответов: 2125
Рейтинг: 159
#44: 2008-12-12 15:23:52 ЛС | профиль | цитата
andrestudio писал(а):
склонить обьект принять стринг за имена переменных

Для этого можно написать функцию в скрипте, которая содержит select case и по строковому имени выдаёт значение переменной.
Есть ещё одна фича, но скорее всего вряд-ли пригодится: если через нижнюю точку вернуть объект, то его свойства можно считывать (а также устанавливать) с помощью ArrayRW, задавая имя вместо индекса. Можно возвращать массив со всеми переменными и считывать их по индексу.
карма: 1

1
Голосовали:andrestudio
Ответов: 4396
Рейтинг: 475
#45: 2008-12-12 16:59:26 ЛС | профиль | цитата
tsdima, спасибо.

Кстати я так и сделал на сей момент. Но может оказаться что имён может быть много и case соответствено код смешной не покажется .
Я думал что можно допустим как то функцию VarType(varname) применить или обьект какой нибудь для этих целей.

пока писал мысля пришла попробовать связочку функций Replace(CStr) и VarType(varname)

tsdima, к сожелению так и не понял что в коде который Вы выложили куда его приткнуть, может можно его как то целиком получить если коменты к точкам работают
карма: 4

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)