Zireael |
Отправлено: 05 Января, 2018 - 16:46:26
|
Эксперт
Покинул форум
Сообщений всего: 4459
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Ваш код, который работает. Что не так? Ничего в нём не правил.
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 |
Отправлено: 05 Января, 2018 - 17:13:02
|
Эксперт
Покинул форум
Сообщений всего: 4459
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: ошибка такого плана: fread(STRINGS[11+]])
Без понятия что значит эта ошибка. В моём коде вообще нет fread.
Цитата: Сделайте его без функции
Функция никак не влияет на работу скрипта. Она принимает текст из text_edit0[0] и возвращает строку, которая будет отображена в статике.
Ищите ошибку в вашем коде. |
|
|
Zireael |
Отправлено: 06 Января, 2018 - 19:47:49
|
Эксперт
Покинул форум
Сообщений всего: 4459
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Можете убрать ее и подписать каждую строку для чего и что, что бы разобраться что к чему.
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);
} |
|
|
007wan |
Отправлено: 07 Января, 2018 - 12:48:35
|
Эксперт
Покинул форум
Сообщений всего: 1838
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Спасибо. Сейчас проверю
(Добавление)
Zireael , Не работает. Пишет, что идет повторение функции моей, но я смотрел там нет повторений, смотрел так же скобки, даже полностью весь скрипт: скобки совпадают с другими как в функции, так и вне.
(Добавление)
Я бы увидел бы скобку без цифры, а там всё идеально. Не знаю почему такая ошибка.
(Добавление)
А всё- теперь работает. Просто была ошибка: Повторение переменной функции Само_окно_j, т.е в этой функции уже есть объявление переменной j.Всё исправил, только строчек не хватает в большом статике, ну это не проблема. Сейчас исправлю)) Спасибки)
(Добавление)
Zireael , А еще у меня такая проблемка: вообщем по моей задумке текст внизу и старый вверху, а новее внизу, но если много вводить, то на последней строке не вместится, нужно сделать так, что бы еще было как минимум запасных все строчки, т.е я ввиду много текста и он не останется на последней строчке(часть не будет видно), а перейдет на вверх и поместит остатки чуть ниже. Вообщем возьмем тот же Вконтакте: там текст двигается так же как и у меня, но я хочу, что бы текст "не уходил" в право, а то его не видно, а просто тупо переходил на строчку ниже |
|
|
Zireael |
Отправлено: 08 Января, 2018 - 00:41:29
|
Эксперт
Покинул форум
Сообщений всего: 4459
Дата рег-ции: Нояб. 2017
Репутация: 585
|
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);
}
Если введённая строка превышает указанное количество символов, то часть текста переносится на следующую строку или несколько строк, весь текст смещается на нужное количество строк. Перенос осуществляется по словам, т. е. слово не обрежется по середине, а будет перенесено целиком. |
|
|
007wan |
Отправлено: 09 Января, 2018 - 08:18:41
|
Эксперт
Покинул форум
Сообщений всего: 1838
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Попробуй в своем коде ввести много цифр(для наглядного примера, а так можно любые символы). Если так сделать, то *часть* будет на последней строчке, а *другая* будет последней, но ее не видно будет, если заметить, то вот ЭТА ДРУГАЯ часть будет ниже, чем ЭТА ПЕРВАЯ ЧАСТЬ, т.е она в самом внизу и её не видно, но если ввести пробел или любоё символ(что бы пропустить строчку на +1), то ЭТА остаточная *другая* часть поднимется |
|
|
|