Zireael пишет:
Блок FindImage, если изменить #X_Kib и #Y_Kib на #X_Kib1 и #Y_Kib1, то вызов функции сгенерируется верно:
CODE:if (FindImage(#Image0[0][0], 1, #K_kib, #X_Kib1[0], #Y_kib1[0], 0)>0){}
но массивы будут объявлены без изменений:
CODE:int X_Kib[1000];
int Y_kib[1000];
Обновил архив.
Устранил баг, который не давал видеть имя глобальной переменной если оно начиналось с ~
В архиве есть блок ReadText
В нем есть поле
"Текст будет в"
и Edit с именем переменной.
Если пользователь меняет в этом поле имя, будет объявлена глобальная переменная с этим именем и эта копия блока будет работать с этой переменной.
В разных блоках ReadText можно таким образом переименовывать переменные и они будут автоматически объявляться.
Реализация:
Цитата:
[INTERFACE]
DIALOG, "Диалог", 469, 140;
STATIC, "База", 8, 8, 36, 20;
EDIT, 52, 8, 292, 20, string base;
BUTTON_FILE, "Выбрать файл", 356, 8, 100, 20, base;
CHECK, "Рус", 8, 36, 40, 20, int G1;
CHECK, "En", 52, 36, 36, 20, int G2;
CHECK, "Цифры", 92, 36, 56, 20, int G3;
CHECK, "Знаки", 152, 36, 52, 20, int G4;
STATIC, "Текст будет в", 8, 64, 76, 20;
EDIT, 92, 64, 112, 20, string T;
BUTTON_OK, "Принять", 248, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 356, 88, 100, 20;
[END]
[ASSOC_VAR]
base="C:\basetext.sib";
G1 = 1;
G2 = 0;
G3 = 0;
G4 = 0;
text = #~T~;
T = Text;
[END]
[GLOBAL_VAR]
string ~T~;
[END]
[FUNCTION_CALL]
(base, text, G1, G2, G3, G4)
[END]
Полный код ReadText
ReadText (Отобразить)CODE:[INTERFACE]
DIALOG, "Диалог", 469, 140;
STATIC, "База", 8, 8, 36, 20;
EDIT, 52, 8, 292, 20, string base;
BUTTON_FILE, "Выбрать файл", 356, 8, 100, 20, base;
CHECK, "Рус", 8, 36, 40, 20, int G1;
CHECK, "En", 52, 36, 36, 20, int G2;
CHECK, "Цифры", 92, 36, 56, 20, int G3;
CHECK, "Знаки", 152, 36, 52, 20, int G4;
STATIC, "Текст будет в", 8, 64, 76, 20;
EDIT, 92, 64, 112, 20, string T;
BUTTON_OK, "Принять", 248, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 356, 88, 100, 20;
[END]
[ASSOC_NUMBER]
base
[END]
[ASSOC_VAR]
base="C:\basetext.sib";
G1 = 1;
G2 = 0;
G3 = 0;
G4 = 0;
text = #~T~;
T = Text;
[END]
[GLOBAL_VAR]
string ~T~;
[END]
[GLOBAL_REPEAT_CODE]
loadsymbolbase (~base~);
[END]
[FUNCTION_BODY]
function (string base, string #text, int g1, int g2, int g3, int g4)
{
disablesymbolbase(ALL);
enablesymbolbase(base);
int G=0;
if (g1)G=G+RU;
if (g2)G=G+EN;
if (g3)G=G+NUM;
if (g4)G=G+MARK;
readtext (G, #text, 8, 1, -1, -1, -1, -1, -1, 0, -1, 73, 78, 77, 81, -1);
}
[END]
[FUNCTION_CALL]
(base, text, G1, G2, G3, G4)
[END]
(Добавление)
С указателями на переменные это тоже работает, но надо немного доработать, так как переменная объявляется с #.
Или оставить как есть..
Тогда пользователю не надо будет ставить # что бы указать что это указатель на переменную..
На примере FindImage так можно изменить переменную K_kib.
CODE:[ESCAPE_CHAR]
^
[END]
[INTERFACE]
DIALOG, "Поиск изображения", 499, 139;
BUTTON_OK, "Принять", 284, 88, 100, 20;
BUTTON_CANCEL, "Закрыть", 388, 88, 100, 20;
STATIC, "Путь к файлу", 8, 8, 100, 20;
EDIT, 116, 8, 276, 20, string Path;
BUTTON_FILE, "Путь к файлу", 396, 8, 92, 20, Path;
STATIC, "Сколько искать", 8, 32, 100, 20;
EDIT, 116, 32, 52, 20, int Kol;
COMBO, "Мышь клик" "Мышь нажать" "Мышь отпустить", 172, 32, 220, 80, int M;
STATIC, "Количество", 8, 56, 100, 20;
EDIT, 116, 56, 52, 20, int K;
STATIC, "X", 176, 56, 24, 20;
STATIC, "Y", 288, 56, 24, 20;
EDIT, 208, 56, 72, 20, int X;
EDIT, 320, 56, 72, 20, int Y;
[END]
[ASSOC_NUMBER]
Path
[END]
[ASSOC_VAR]
Path="C:\Image_0.bmp";
Kol = 1;
X = #X_Kib;
Y = #Y_kib;
tK = #~K~;
K = K_kib;
M = 0;
Image = #Image~*~;
[END]
[GLOBAL_VAR]
int ~K~, X_Kib[1000], Y_kib[1000];
int Image~*~[~GET(imagewidth(~Path~))~][~GET(imageheight(~Path~))~];
[END]
[GLOBAL_SINGLE_CODE]
#define WM_COMMAND 0x111
#include "C:\Program Files (x86)\Kibor\liba.txt" //Это для демонстрации (Будет ошибка, так как нет файла) ЗАКОММЕНТИРОВАТЬ в полученном коде
external(INT, "MessageBoxA", "MessageBoxA", "UseR32.dlL");
messagebox ("Будет использоваться FindImage");
beep (1000, 100);
[END]
[GLOBAL_REPEAT_CODE]
loadimage(#Image~*~[0][0], ~Path~);
[END]
[FUNCTION_BODY]
function (int #image, int kol, int #mK, int #mX, int #mY, int Mouse)
{
mK=findimage(kol, #image[0][0], -1, #mX[0], #mY[0], 0, 0, 1024, 768, -1);
if (mK<0)MessageBoxA(0, "Ошибка", "Окно", 0);
if (Mouse==0)mouse(LEFT, mX[0], mY[0]);
if (Mouse==1)mousedown(LEFT, mX[0], mY[0]);
if (Mouse==2)mouseup(LEFT, mX[0], mY[0]);
return mK;
}
[END]
[FUNCTION_CALL]
(Image[0][0], Kol, tK, X[0], Y[0], M)
[END]
[FUNCTION_LOGIC]
>0
[END]