powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Размеры тестового поля
7 сообщений из 7, страница 1 из 1
Размеры тестового поля
    #32620428
Endymion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возникла проблема..

как узнать размеры тестовой строки в датавиндоу. Что я имеею в виду, в датавиндоу есть тексотое поле, текст полностью в него не влезает, и при движение мышки над ним я открываю дополнительное текствое поле. Но сейчас оно у меня статическое, а я хотел бы сделать что бы оно было в ровень с текстом в неём. Как можно узнать размер текста в пиекселах (текст может быть написанн на различных языках, включать в себя все существующие литеры, различного фонта итд)

спасиба :)
...
Рейтинг: 0 / 0
Размеры тестового поля
    #32620486
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
Function ulong GetDC(ulong hWnd) Library "USER32.DLL"
Function long ReleaseDC(ulong hWnd, ulong hdcr) Library "USER32.DLL"
Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"
Function ulong SelectObject(ulong hdc, ulong hWnd) Library "GDI32.DLL"

Код: 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.
71.
72.
73.
74.
75.
//////////////////////////////////////////////////////////////////////////////
//	Public Function:		of_GetTextSize
//	Arguments:  			aw_obj:  				Window where temporary text will be created
//							as_Text:				The text to be sized.
//							as_FontFace:		The font used.
//							ai_FontSize:			The point size of the font.
//							ab_Bold:				True - Bold, False - Normal.
//							ab_Italic:			True - Yes, False - No.
//							ab_Underline:		True - Yes, False - No.
//							ai_Height:			the height of the object in pixels
//							ai_Width:			the width of the object in pixels
//	Returns:  			Integer			 1  if successful, - 1  if an error occurrs
//	Description:  		Calculates the size of a text object in pixels
//////////////////////////////////////////////////////////////////////////////
//	Rev. History			Version
//							 5 . 0 		Initial version
//							 5 . 0 . 03 	Changed Uint variables to Ulong for NT4. 0  compatibility
//							 8 . 0 		Not deleting statictext object under certain conditions.
//////////////////////////////////////////////////////////////////////////////
//	Copyright ©  1996 - 2000  Sybase, Inc. and its subsidiaries.  All rights reserved.  Any distribution of the 
// PowerBuilder Foundation Classes (PFC) source code by other than Sybase, Inc. and its subsidiaries is prohibited.
//////////////////////////////////////////////////////////////////////////////
Integer		li_Size, li_Len, li_Return, &
				li_WM_GETFONT =  49  	//  hex 0x0031
ULong			lul_Hdc, lul_Handle, lul_hFont
StaticText	lst_Temp
os_size 		lstr_Size

// Datawindow syntax specifies font point size is negative
li_Size = - 1  * ai_FontSize

if IsNull(aw_obj) Or Not IsValid (aw_obj) then
	return - 1 
end if

// Create a dummy StaticText Object on the window
// containing text with the desired characteristics
li_Return = aw_obj.OpenUserObject(lst_Temp)
If li_Return =  1  Then
	lst_Temp.FaceName = as_FontFace
	lst_Temp.TextSize = li_Size
	If ab_Bold Then
		lst_Temp.Weight =  700 
	Else
		lst_Temp.Weight =  400 
	End If
	lst_Temp.Italic = ab_Italic
	lst_Temp.Underline = ab_Underline

	li_Len = Len(as_Text)

	// Get the handle of the StaticText Object and create a Device Context
	lul_Handle = Handle(lst_Temp)
	lul_Hdc = GetDC(lul_Handle)

	// Get the font in use on the Static Text
	lul_hFont = Send(lul_Handle, li_WM_GETFONT,  0 ,  0 )

	// Select it into the device context
	SelectObject(lul_Hdc, lul_hFont)

	// Get the size of the text.
	If Not GetTextExtentpoint32A(lul_Hdc, as_Text, li_Len, lstr_Size ) Then 
		aw_obj.CloseUserObject(lst_Temp)
		Return - 1 
	End If

	ai_Height = lstr_Size.l_cy
	ai_Width = lstr_Size.l_cx

	ReleaseDC(lul_Handle, lul_Hdc)

	li_Return = aw_obj.CloseUserObject(lst_Temp)
End if

Return li_Return
...
Рейтинг: 0 / 0
Размеры тестового поля
    #32620679
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Endymionкак узнать размеры тестовой строки в датавиндоу. Что я имеею в виду, в датавиндоу есть тексотое поле, текст полностью в него не влезает, и при движение мышки над ним я открываю дополнительное текствое поле. Но сейчас оно у меня статическое, а я хотел бы сделать что бы оно было в ровень с текстом в неём . Как можно узнать размер текста в пиекселах (текст может быть написанн на различных языках, включать в себя все существующие литеры, различного фонта итд)

спасиба :)

Дорогой, Endymion, Вы хотя бы раз сами прочитайте сообщение перед его отправкой.
...
Рейтинг: 0 / 0
Размеры тестового поля
    #32622141
Endymion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Филипп : спасибо огромное :)
а откуда ты взял этот пример ? ты можешь кинуть линк ?
...
Рейтинг: 0 / 0
Размеры тестового поля
    #32622195
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорогой Endymion, по моему вам следует хорошенько подумать над переменой поля деятельности :-)

Код: plaintext
1.
2.
3.
//////////////////////////////////////////////////////////////////////////////
//	Copyright ©  1996 - 2000  Sybase, Inc. and its subsidiaries.  All rights reserved.  Any distribution of the 
// PowerBuilder Foundation Classes (PFC) source code by other than Sybase, Inc. and its subsidiaries is prohibited.
//////////////////////////////////////////////////////////////////////////////
...
Рейтинг: 0 / 0
Размеры тестового поля
    #32651877
Endymion
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
здраствуйте :)

скажите пожайлуста
вот в этой функции, в её определении

Function boolean GetTextExtentPoint32A(ulong hdcr, string lpString, long nCount, ref os_size size) Library "GDI32.DLL"

я должен отдельно определить os_size ? я было определил как обычную структуру (x и y как Long), но функция вычисляющая текст в пикселах выдаёт неправильное значение.


помогите пожалуйста.
...
Рейтинг: 0 / 0
Размеры тестового поля
    #32651904
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прямо внутри объекта pfc_n_cst_platformwin32 из которого цитата, она определена как
Код: plaintext
1.
2.
3.
type os_size from structure
    long l_cx
    long l_cy
end type
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Размеры тестового поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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