powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / EditBox
10 сообщений из 10, страница 1 из 1
EditBox
    #32248148
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот такой вопрос.

Как узнать, сколько символов попало в первую строку Edit'а, сколько во вторую и т.д.
И вообще сколько строк занял мой текст?
...
Рейтинг: 0 / 0
EditBox
    #32248161
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
local array laLine( 1 )

lnCount = alines(paLine, thisform.edtBox.Value, .f.)
if m.lnCount> 0 
    lnFirstLineLen = len(laLine[ 1 ])
endif
...
Рейтинг: 0 / 0
EditBox
    #32248196
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НЕ РАБОТАЕТ :(

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
local array laLine( 1 )

lnCount = ALINES(laLine, thisform.edit1.Value, .f.)
MESSAGEBOX(STR(lnCount))&& Результат  1 , хотя у меня  3  строки
IF  m.lnCount> 0 
    lnFirstLineLen = len(laLine( 1 ))
    MESSAGEBOX(STR(lnFirstLineLen)) &&  77  (то же что и len(thisform.edit1.Value))
ENDIF 
...
Рейтинг: 0 / 0
EditBox
    #32248211
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это получился просто счётчик CHR(13).
...
Рейтинг: 0 / 0
EditBox
    #32248229
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример взят с сайт nsvisual.com (сейчас недоступен) Автор под ником po2

*!*RE: Число строк в мемо
*!*po2 14-08-2003 15:18
*!*http://nsvisual.com/ph/read.php3?f=5&pnn=1&i=65444&t=65444
*!*--------------------------------------------------------------------------------
*!*После сделанного объяснения о месте применения уже несколько не к месту, но все же.
*!*Ниже приведен работающий алгоритм точно расчитывающий количество строк, которое
*!*потребуется для отображения текста в EditBox'е. У меня оформлен как метод формы.
*!*В качестве параметра передается ссылка на EditBox.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
lPar oEditBox 
with oEditBox 
	ThisForm.FontName=.FontName 
	ThisForm.FontSize=.FontSize 
	ThisForm.FontItalic=.FontItalic 
	ThisForm.FontBold=.FontBold 
	cText= allt(.Text) 
	local ; 
		aText( 1 ) ,; 
		cCurSimbol,; 
		cCurString,; 
		cFontStyle,; 
		nDim ,; 
		nLenCurString,; 
		nMaxLenString,; 
		nPosLastSB 

	cCurSimbol='' 
	cCurString='' 
	cFontStyle=iif(.FontBold ,'B','')+iif(.FontItalic,'I','') 
	cFontStyle=iif(empt(cFontStyle),'N',cFontStyle) 
	nDim= 0  
	nLenCurString= 0  
	nMaxLenString=.Width -.Margin - sysm( 5 ) -  2 *sysm( 10 ) -  5  
	nPosLastSB= 0  
	for i1727 =  1  to len(cText) 
		cCurSimbol=subs(cText,i1727, 1 ) 
		do case 
		case cCurSimbol==chr( 13 ) 
			nDim=nDim +  1  
			dime aText(nDim) 
			aText(nDim)=cCurString 
			nPosLastSB= 0  
			cCurString='' 
			loop 
		case cCurSimbol==chr( 32 ) 
			cCurString=cCurString + cCurSimbol 
			nPosLastSB=len(cCurString) 
			nLast= i1727 
		othe 
			cCurString=cCurString + cCurSimbol 
		endc 
		if ThisForm.TextWidth(cCurString)>=nMaxLenString 
			nDim= nDim +  1  
			dime aText(nDim) 
			if nPosLastSB= 0  
				nDelta=iif(ThisForm.TextWidth(cCurString)=nMaxLenString, 0 , 1 ) 
				aText(nDim)=subs(cCurString, 1 ,len(cCurString)- nDelta) 
				i1727=i1727 - nDelta 
			else 
				aText(nDim)=subs(cCurString, 1 , nPosLastSB -  1 ) 
				i1727=iif(cCursimbol==chr( 32 ),i1727,nLast) 
			endi 
			nPosLastSB= 0  
			cCurString='' 
			loop 
		endi 
	endf 
endw 
if!empt(cCurString) 
	nDim=nDim +  1  
	dime aText(nDim) 
	aText(nDim)=cCurString 
endi 
*cWaiter='Число строк:'+tran(nDim) 
*for i1829 =  1  to nDim 
*cWaiter=cWaiter + chr( 13 ) + allt(aText(i1829)) 
*endf 
*wait wind nowa cWaiter 
retu nDim 
...
Рейтинг: 0 / 0
EditBox
    #32248236
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, то что надо
...
Рейтинг: 0 / 0
EditBox
    #32248609
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не так уж и точно
Вот строка например строка:
Код: plaintext
dfg sdfg sdfgl dlfg ldg gk gk g g g i i i gf  d d  dfg fg f gf g fdfdg l l lll l l

для Edit'а у которого
Width=253
ScrollBar=0
FontSize=12
даёт не очень точный результат

Там в коде есть такая строка
Код: plaintext
nMaxLenString=.Width -.Margin - sysm( 5 ) -  2 *sysm( 10 ) -  5  

её я заменил на

Код: plaintext
nMaxLenString=.Width -.Margin  - IIF(.ScrollBars= 0 , 0 ,sysm( 5 ))- 2 *sysm( 10 ) -  5 


Что такое - 5?
Может в нем проблемма?
Если поставить 4, вместо 5, то всё срабатывает (для той строки+ 12 размера шрифта+width=253 )
Откуда єто 5?
...
Рейтинг: 0 / 0
EditBox
    #32248758
po2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
po2
Гость
Согласен, в данном случае 4 лучше, чем 5. Пятерка – «полуэмпирическое» число равное удвоенной ширине обрамления текста(в пикселах + 1) в EditBox’е. Это обрамление существует вне зависимости от значения свойства Margin. Значение параметра подбиралось экспериментально, и очевидно пятерка на всех тестовых примерах дала нужный результат. Мне не известно зависит ли эта величина от каких-либо системных установок. Возможно, эффект не проявился еще и потому, что все используемые EditBox’ы предполагали наличие ScrollBar’а.
...
Рейтинг: 0 / 0
EditBox
    #32248907
lnu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может у кого то есть исходник EditBox'a (оригинальный или свой)?
Тогда можна будет точно сказать, 4 или 5, и от чего зависит эта величина
...
Рейтинг: 0 / 0
EditBox
    #32248938
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не совсем понял, на основании чего было решено, что толщина рамки EditBox - это именно SysMetric(10)?

Даже на глаз видно, что его толшина больше 1 пиксела. Думаю здесь разумнее использовать SysMetric(12), тогда поправочный коэффициент будет не нужен.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / EditBox
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]