Zireael |
Отправлено: 09 Января, 2018 - 12:30:57
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: но если я громадный текст напишу, то он сам определит и поместит его на n строчек выше, но последняя строчка которая заняла текст будет в самом внизу.
Вообще-то оно так и сделано. Весь текст смещается на нужное количество строк.
Немного исправил, текст выводился на 1 строчку ниже.
code (Отобразить)CODE: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]=200; pos_size_static0[0][3]=130;
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+1])+rn+tmp2;
}
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j+1])+rn+str;
}
else
{
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j+1])+rn+str;
}
text_static0[0]=s;
sleep(500);
} |
|
|
007wan |
Отправлено: 09 Января, 2018 - 12:52:18
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Не работает. Попробуйте в большом статике сделать у себя, я говорю в маленьком ничего не добьешься. Я опять написал много предложений итд. и у меня только часть поместилась на 2 строчки остальное все внизу, у меня нету цикла, только при нажатии кнопки все выполняется(может дело в этом)
(Добавление)
Вот ваш код правленый мною(свои вставил некоторые части, в данном случаи только input заменил эдитом и сделал код шире и понятнымCODE:str=text_edit20[0];
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+1])+rn+tmp2;
}
strcpy(#temp[0], s);
j=0;
while(temp[j] != formatic(13))j++; j++;
s=format(#temp[j+1])+rn+str;
}
else
{
strcpy(#temp[0], s);
j=0;
while(temp[j] != formatic(13))j++;
j++;
s=format(#temp[j+1])+rn+str;
}
(Добавление)
Просто тупо создайте большой диалог с кнопкой, статиком и эдитом и сами убедитесь.
(Добавление)
в максимум эти предложения по длине в 2 строчки, если маленькие в одну, я уже пробовал, а надо что бы он вмещал текст не большеCODE:int i=38; // количество строк в статике
Тоесть если большой текст будет очень, то вместит его на 1 строчке(38 строчка это низ, а 1- это вверх), но он должен сам расчитывать сколько символов и сколько потребуется строчек для вставки всех символов. Например, если большой текст, то вместит его, к примеру, на строчке 35(расчитала программа) и дойдет этот текст до 38 строчке(т.е до низ до границы низа)38 строчка-это самый низ, а 1 строчка-это верх, это и есть границы текста, он должен учитывать их, а если текста больше и он не вместился на все строчки, то надо сделать ограничение по символам: для этого нужно расчитать сколько символов в одной строчке, а потом умн. на количество строчек и все))
(Добавление)
Желательно, что бы по слову переносил текст)
(Добавление)
Я знаю, что прошу у вас очень много и всегда, но мне нужна помощь, мне даже корму и репутацию понизили за это))) за то, что прошу много))
(Добавление)
Когда-нибудь и я вам помогу, хотя врядли, потому что вы же умнее и лучше разбирайтесь, но все же... идейку точно подкину |
|
|
Zireael |
Отправлено: 09 Января, 2018 - 13:32:18
|
Эксперт
Покинул форум
Сообщений всего: 4462
Дата рег-ции: Нояб. 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]=230; pos_size_static0[0][3]=200;
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; // строка для input
int i=14; // количество строк в статике
int count_symbol=35; // максимальное количество символов в строке статика
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;
enabletimer(0);
loop()
{
sleep(10);
}
CREATE_TIMER(0, 100)
{
if(flag_button0[0]>0)
{
flag_button0[0]=0;
str=text_edit0[0]; // получаем текст из text_edit
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+1])+rn+tmp2;
}
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j+1])+rn+str;
}
else
{
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j+1])+rn+str;
}
text_static0[0]=s; // выводим статик
text_edit0[0]=""; // очищаем text_edit
}
} |
|
|
007wan |
Отправлено: 09 Января, 2018 - 13:38:19
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Блин, я не хочу к этому возвращаться потому что я вам мозги компосирую и себе, но выше код- твой. попробуй написать пару предложений с запятыми или каляку маляку вообщем любое что-то и много. он не переносит текст. попробуй мысленно представить свое предложение, оно будет большим в данном случаи нам нужно концовка и начала, а именно раположение: концовка будет на последней строчке, т.е внизу(оно должно обязательно быть видимым, а не так как тут), а начало будет на столько(код должен расчитать)
(Добавление)
Zireael , Он как бы "держится на одном месте", а должен чуть выше на пару строк, а вот эти ПАРУ СТРОК он должен сам как-то посчитать.
(Добавление)
Zireael , Просто у тебя появление строчки всегда начинается с низу, но это хорошо для короткого текста, а не для большого, потому что большой внизу пропадает(Отредактировано автором: 09 Января, 2018 - 13:41:29) |
|
|
007wan |
Отправлено: 09 Января, 2018 - 14:14:18
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Что не так?
Это вообще нормально? Чисто ваш код и ваше предложение ввел и ничего не менял.
(Добавление)
Перезагружал программу. Без изменений. Вылетов не было(это бы все объяснило).
(Добавление)
Zireael пишет: 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]=230; pos_size_static0[0][3]=200;
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; // строка для input
int i=14; // количество строк в статике
int count_symbol=35; // максимальное количество символов в строке статика
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;
enabletimer(0);
loop()
{
sleep(10);
}
CREATE_TIMER(0, 100)
{
if(flag_button0[0]>0)
{
flag_button0[0]=0;
str=text_edit0[0]; // получаем текст из text_edit
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+1])+rn+tmp2;
}
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j+1])+rn+str;
}
else
{
strcpy(#temp[0], s); j=0;
while(temp[j] != formatic(13))j++; j++; s=format(#temp[j+1])+rn+str;
}
text_static0[0]=s; // выводим статик
text_edit0[0]=""; // очищаем text_edit
}
} Использовался этот код(выше. самый последний)
(Добавление)
Может быть код и рабочий-не спорю, но что-то здесь не так...(Отредактировано автором: 09 Января, 2018 - 14:18:14) |
|
|
|