Ваш код, который работает. Что не так? Ничего в нём не правил.
code (Отобразить)CODE:int pos_size_button0[1][4];
string text_button0[1];
int flag_button0[1];
pos_size_button0[0][0]=136; pos_size_button0[0][1]=225; pos_size_button0[0][2]=100; pos_size_button0[0][3]=20;
text_button0[0]="Кнопка 0";
//////////
int pos_size_edit0[1][4];
string text_edit0[1];
pos_size_edit0[0][0]=27; pos_size_edit0[0][1]=224; pos_size_edit0[0][2]=100; pos_size_edit0[0][3]=20;
text_edit0[0]="";
//////////
int pos_size_static0[1][4];
string text_static0[1];
pos_size_static0[0][0]=10; pos_size_static0[0][1]=10; pos_size_static0[0][2]=100; pos_size_static0[0][3]=100;
text_static0[0]="";
createdialog(0, BUTTON, #pos_size_button0[0][0], #text_button0[0], #flag_button0[0] |
EDIT, #pos_size_edit0[0][0], #text_edit0[0] |
STATIC, #pos_size_static0[0][0], #text_static0[0]);
showdialog(0, "Диалог", 595, 300, 250, 300, 1, 1);
string str;
string arr[4]; // массив для строк
int i=4; // количество строк в статике
string rn=formatic(13)+formatic(10);
for(int k=0; k<i; k++)arr[k]="";
loop()
{
if (flag_button0[0]==1)
{
flag_button0[0]=0;
str=text_edit0[0];
text_static0[0]=text(str);
}
sleep(500);
}
function text(string t)
{
string s="";
for(int j=0; j<i-1; j++)
{
arr[j]=arr[j+1];
s=s+arr[j]+rn;
}
arr[i-1]=t;
return s+arr[i-1];
}
Zireael , Тут всё в порядке, но я как бы сравниваю свой код с этим... . Тут просто я наглядно показал куда я вставил часть вашего кода из полного. Я тоже самое провернул со своим кодом и у меня не работает ошибку я написал чуть выше. Может вы упростите. Сделайте его без функции или еще как-нибудь, что бы у меня точно заработало в моем коде. Лучше сделайте принцип работы вашего кода такой же, но формулировку кода чуть измените? Переменные поменяйте. Пожалуйста. Я бы сам, но я уже менял и путался в них.
Цитата:
ошибка такого плана: fread(STRINGS[11+]])
Без понятия что значит эта ошибка. В моём коде вообще нет fread.
Цитата:
Сделайте его без функции
Функция никак не влияет на работу скрипта. Она принимает текст из text_edit0[0] и возвращает строку, которая будет отображена в статике.
Ищите ошибку в вашем коде.
Zireael , А можно мой или ваш код разбить на составляющие? Вот я хочу убрать функция text, но не пойму для чего она и где вызывается, может без функции? Можете убрать ее и подписать каждую строку для чего и что, что бы разобраться что к чему.
Цитата:
Можете убрать ее и подписать каждую строку для чего и что, что бы разобраться что к чему.
code (Отобразить)CODE:int pos_size_static0[1][4];
string text_static0[1];
pos_size_static0[0][0]=18; pos_size_static0[0][1]=13; pos_size_static0[0][2]=100; pos_size_static0[0][3]=100;
text_static0[0]="";
createdialog(0, STATIC, #pos_size_static0[0][0], #text_static0[0]);
showdialog(0, "Диалог", 835, 300, 250, 113, 1, 1);
string str;
string arr[4]; // массив, в который записываются введённые строки (последние 4 строки в данном случае)
int i=4; // количество строк в статике
string rn=formatic(13)+formatic(10); // перенос строки
for(int k=0; k<i; k++)arr[k]=""; // заполняем массив
string s; // строка, которая будет использована в text_static
loop()
{
str=input(); // получаем введённую строку
s="";
for(int j=0; j<i-1; j++) // цикл, в котором последние введённые строки будут собраны в 1 строку + переносы строк
{
arr[j]=arr[j+1]; // присваиваем 0 элементу массива значение 1 элемента, 1 элементу значение 2-го и т. д.,
// т. е. сдвигаем все элементы, первый станет нулевым, второй станет первым т.д.
s=s+arr[j]+rn; // собираем весь массив в 1 строку + перенос строки
// по сути s=arr[0]+rn+arr[1]+rn+arr[2]+rn и т.д.
}
arr[i-1]=str; // присваиваем последнему элементу массива введённую строку (из input в данном случае)
text_static0[0]=s+str; // присваиваем статику значение s + последнюю введённую строку
sleep(500);
}
Zireael , Спасибо. Сейчас проверю
(Добавление)
Zireael , Не работает. Пишет, что идет повторение функции моей, но я смотрел там нет повторений, смотрел так же скобки, даже полностью весь скрипт: скобки совпадают с другими как в функции, так и вне.
(Добавление)
Я бы увидел бы скобку без цифры, а там всё идеально. Не знаю почему такая ошибка.
(Добавление)
А всё- теперь работает. Просто была ошибка: Повторение переменной функции Само_окно_j, т.е в этой функции уже есть объявление переменной j.Всё исправил, только строчек не хватает в большом статике, ну это не проблема. Сейчас исправлю)) Спасибки)
(Добавление)
Zireael , А еще у меня такая проблемка: вообщем по моей задумке текст внизу и старый вверху, а новее внизу, но если много вводить, то на последней строке не вместится, нужно сделать так, что бы еще было как минимум запасных все строчки, т.е я ввиду много текста и он не останется на последней строчке(часть не будет видно), а перейдет на вверх и поместит остатки чуть ниже. Вообщем возьмем тот же Вконтакте: там текст двигается так же как и у меня, но я хочу, что бы текст "не уходил" в право, а то его не видно, а просто тупо переходил на строчку ниже
code (Отобразить)CODE:int pos_size_static0[1][4];
string text_static0[1];
pos_size_static0[0][0]=18; pos_size_static0[0][1]=13; pos_size_static0[0][2]=200; pos_size_static0[0][3]=100;
text_static0[0]="";
createdialog(0, STATIC, #pos_size_static0[0][0], #text_static0[0]);
showdialog(0, "Диалог", 835, 300, 250, 113, 1, 1);
string str; // строка для input
int i=4; // количество строк в статике
int count_symbol=20; // максимальное количество символов в строке статика
string tmp, tmp2;
char temp[1000], temp2[1000];
string rn=formatic(13)+formatic(10);
string s="";
for(int k=0; k<i-1; k++)s=s+rn;
int j, pos_space;
loop()
{
str=input();
if(size(str)>count_symbol)
{
while(size(str)>count_symbol)
{
strcpy(#temp2[0], str); tmp=format(#temp2[0], count_symbol); pos_space=size(tmp);
while(pos_space>0 && temp2[pos_space] != formatic(32))pos_space--;
if(pos_space>0){tmp2=format(#temp2[0], pos_space); str=format(#temp2[pos_space+1]);}
else
{
if(size(str)>count_symbol)
{tmp2=tmp; str=format(#temp2[count_symbol]);}
else
{tmp2=tmp; str="";}
}
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j])+rn+tmp2;
}
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j])+rn+str;
}
else
{
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j])+rn+str;
}
text_static0[0]=s;
sleep(500);
}
Если введённая строка превышает указанное количество символов, то часть текста переносится на следующую строку или несколько строк, весь текст смещается на нужное количество строк. Перенос осуществляется по словам, т. е. слово не обрежется по середине, а будет перенесено целиком.
Zireael , Спасибо вам)
(Добавление)
Почему ты такой умный?
Zireael , Попробуй в своем коде ввести много цифр(для наглядного примера, а так можно любые символы). Если так сделать, то *часть* будет на последней строчке, а *другая* будет последней, но ее не видно будет, если заметить, то вот ЭТА ДРУГАЯ часть будет ниже, чем ЭТА ПЕРВАЯ ЧАСТЬ, т.е она в самом внизу и её не видно, но если ввести пробел или любоё символ(что бы пропустить строчку на +1), то ЭТА остаточная *другая* часть поднимется
Zireael , кажется я понял вообще нужно .что бы он еще сам определял сколько текста и сколько строк занято и в зависимости от этого он помещал текст в столько строк сколько нужно, а именно: например, я написал много текста он поместился на последней строчке, т.к его не так уж и много, но если я громадный текст напишу, то он сам определит и поместит его на n строчек выше, но последняя строчка которая заняла текст будет в самом внизу.