// Ниже простой скрипт, для точного расчета полученной строки на экране для разных нужд,
// в данном примере, это выравнивание строки по правому краю экрана.
// Пользуйтесь на здоровье.
// Ниже блок ширин символов в пикселях.
// Он немного громоздкий, его можно сократить, удалив ненужные символы.
// Я сделал с запасом
int Ш[256]; Ш[0]=0; Ш[1]=19; Ш[2]=10; Ш[3]=11; Ш[4]=10; Ш[5]=10; Ш[6]=11; Ш[7]=10; Ш[8]=11; Ш[9]=2; Ш[10]=2; Ш[11]=11; Ш[12]=14;
Ш[13]=2; Ш[14]=11; Ш[15]=11; Ш[16]=11; Ш[17]=11; Ш[18]=10; Ш[19]=10; Ш[20]=11; Ш[21]=11; Ш[22]=11; Ш[23]=10; Ш[24]=10; Ш[25]=11;
Ш[26]=11; Ш[27]=11; Ш[28]=2; Ш[29]=2; Ш[30]=2; Ш[31]=2; Ш[32]=4; Ш[33]=4; Ш[34]=6; Ш[35]=8; Ш[36]=8; Ш[37]=11; Ш[38]=9;
Ш[39]=4; Ш[40]=4; Ш[41]=4; Ш[42]=6; Ш[43]=8; Ш[44]=4; Ш[45]=4; Ш[46]=4; Ш[47]=4; Ш[48]=8; Ш[49]=8; Ш[50]=8; Ш[51]=8;
Ш[52]=8; Ш[53]=8; Ш[54]=8; Ш[55]=8; Ш[56]=8; Ш[57]=8; Ш[58]=4; Ш[59]=4; Ш[60]=8; Ш[61]=8; Ш[62]=8; Ш[63]=8; Ш[64]=14;
Ш[65]=8; Ш[66]=10; Ш[67]=9; Ш[68]=10; Ш[69]=9; Ш[70]=8; Ш[71]=10; Ш[72]=10; Ш[73]=4; Ш[74]=7; Ш[75]=9; Ш[76]=8; Ш[77]=12;
Ш[78]=10; Ш[79]=10; Ш[80]=9; Ш[81]=10; Ш[82]=10; Ш[83]=9; Ш[84]=8; Ш[85]=10; Ш[86]=8; Ш[87]=14; Ш[88]=9; Ш[89]=10; Ш[90]=9;
Ш[91]=4; Ш[92]=4; Ш[93]=4; Ш[94]=5; Ш[95]=8; Ш[96]=5; Ш[97]=8; Ш[98]=8; Ш[99]=7; Ш[100]=8; Ш[101]=8; Ш[102]=4; Ш[103]=8;
Ш[104]=8; Ш[105]=4; Ш[106]=4; Ш[107]=7; Ш[108]=4; Ш[109]=12; Ш[110]=8; Ш[111]=8; Ш[112]=8; Ш[113]=8; Ш[114]=5; Ш[115]=8; Ш[116]=4;
Ш[117]=8; Ш[118]=8; Ш[119]=10; Ш[120]=8; Ш[121]=8; Ш[122]=8; Ш[123]=5; Ш[124]=4; Ш[125]=5; Ш[126]=5; Ш[127]=4; Ш[128]=14; Ш[129]=8;
Ш[130]=4; Ш[131]=6; Ш[132]=7; Ш[133]=10; Ш[134]=10; Ш[135]=10; Ш[136]=4; Ш[137]=15; Ш[138]=14; Ш[139]=8; Ш[140]=14; Ш[141]=9; Ш[142]=14;
Ш[143]=10; Ш[144]=8; Ш[145]=4; Ш[146]=4; Ш[147]=7; Ш[148]=7; Ш[149]=7; Ш[150]=6; Ш[151]=9; Ш[152]=4; Ш[153]=9; Ш[154]=12; Ш[155]=8;
Ш[156]=12; Ш[157]=7; Ш[158]=8; Ш[159]=8; Ш[160]=9; Ш[161]=9; Ш[162]=8; Ш[163]=7; Ш[164]=8; Ш[165]=8; Ш[166]=4; Ш[167]=8; Ш[168]=9;
Ш[169]=10; Ш[170]=9; Ш[171]=7; Ш[172]=8; Ш[173]=4; Ш[174]=10; Ш[175]=4; Ш[176]=5; Ш[177]=8; Ш[178]=4; Ш[179]=4; Ш[180]=6; Ш[181]=10;
Ш[182]=7; Ш[183]=4; Ш[184]=8; Ш[185]=14; Ш[186]=7; Ш[187]=7; Ш[188]=4; Ш[189]=9; Ш[190]=8; Ш[191]=4; Ш[192]=8; Ш[193]=10; Ш[194]=10;
Ш[195]=8; Ш[196]=12; Ш[197]=9; Ш[198]=14; Ш[199]=10; Ш[200]=10; Ш[201]=10; Ш[202]=9; Ш[203]=9; Ш[204]=12; Ш[205]=10; Ш[206]=10; Ш[207]=10;
Ш[208]=9; Ш[209]=9; Ш[210]=8; Ш[211]=9; Ш[212]=14; Ш[213]=9; Ш[214]=10; Ш[215]=8; Ш[216]=12; Ш[217]=13; Ш[218]=10; Ш[219]=12; Ш[220]=9;
Ш[221]=9; Ш[222]=12; Ш[223]=9; Ш[224]=8; Ш[225]=8; Ш[226]=8; Ш[227]=6; Ш[228]=10; Ш[229]=8; Ш[230]=10; Ш[231]=8; Ш[232]=8; Ш[233]=8;
Ш[234]=7; Ш[235]=8; Ш[236]=9; Ш[237]=8; Ш[238]=8; Ш[239]=8; Ш[240]=8; Ш[241]=7; Ш[242]=6; Ш[243]=8; Ш[244]=12; Ш[245]=8; Ш[246]=8;
Ш[247]=8; Ш[248]=12; Ш[249]=12; Ш[250]=8; Ш[251]=10; Ш[252]=7; Ш[253]=7; Ш[254]=11; Ш[255]=7;
int color, max_x, max_y; getdisplay(color, max_x, max_y);
// -----------------------------------------------------------------------------------------------
string Стро = "23sd Шла Саша по шоссе";
int дли = ДлиннаПикс(Стро);
textout(1,max_x-дли, 10, Стро, 1); // Выводим строку прижатой к правому краю
loop() pause(999);
// ---------------------------------------------------------------------------------------------
function ДлиннаПикс(string str)
{
char c[999]; int Сум = 0;
strcpy(#c[0], str);
int Дл = size(#c[0]);
for(int i=0;i<Дл;i++)
{
Сум = Сум + Ш[formatci(c[i])];
}
return Сум;
}
1. Skycrew - 27 Июля, 2018 - 21:56:25 - перейти к сообщению
2. Zireael - 09 Сентября, 2018 - 10:47:58 - перейти к сообщению
Цитата:
Он немного громоздкий
CODE:
external(INT, "GetTextExtentPoint32A", "GetTextExtentPoint32A", "Gdi32.dll");
external(INT, "GetDC", "GetDC", "User32.dll");
int c[2], color, max_x, max_y; getdisplay(color, max_x, max_y);
string s="23 sd Шла Саша по шоссе"; // строка
int x=GetTextExtentPoint32A(GetDC(0), s, size(s), address(#c[0])); // получить параметры строки
if(x>0)
{
messagebox("Длина строки в пикселях: "+format(c[0]));
textout(1, max_x-formatsn(format(c[0])), 10, s, 1); // Выводим строку прижатой к правому краю
loop() pause(999);
}
external(INT, "GetDC", "GetDC", "User32.dll");
int c[2], color, max_x, max_y; getdisplay(color, max_x, max_y);
string s="23 sd Шла Саша по шоссе"; // строка
int x=GetTextExtentPoint32A(GetDC(0), s, size(s), address(#c[0])); // получить параметры строки
if(x>0)
{
messagebox("Длина строки в пикселях: "+format(c[0]));
textout(1, max_x-formatsn(format(c[0])), 10, s, 1); // Выводим строку прижатой к правому краю
loop() pause(999);
}