Ресайзинг элементов управления

Здесь можно размещать файлы относящиеся к указанной теме.
Ответить
Poltergeyst
начинающий
Сообщения: 5
Зарегистрирован: 08 июл 2008, 21:53

Ресайзинг элементов управления

Сообщение Poltergeyst » 20 май 2018, 15:42

Чтобы установить ресайзинг элементов управления формы в runtime mode, можно применить метод Move2 к каждому, уже сформированному элементу управления с помощью runtime метода DoParams. В параметрах метода Move2 указать выражение для относительного размера и положения каждого элемента, как он изначально установлен на форме. При изменении размеров формы размер и положение каждого элемента будут изменятся пропорционально форме. (пример на LangMF 9.0)

Код: Выделить всё

'=========================================================================================
' Ресайзинг элементв управления(LangMF9)
'=========================================================================================

<#Module=ResizeSample>


	'---------------------------------------------------------------------------------
 	Sub Load(cmdstr)


		'-------------------------------------------------------------------------
		With Form
			
			.AutoRedraw		= True
			.Caption		= "RESIZING"
			.Width			= 540 * vbPx
			.Height			= 320 * vbPy
			.Style.ControlBox 	= True
			.Style.MaxButton 	= True
			.Style.SizeBorder  	= True
			
			'------------------------------------------------------------------
			.Add "LCombo",1,"Width=135","Height=20", _
					"Top=25","Left=5","Enabled=False"
	
			.Add "Command",1,"Width=105","Height=20", _
					"Top=25","Left=150","Caption=""Command"""

			.Add "LCombo",2,"Width=135","Height=20", _
					"Top=25","Left=275","Enabled=False"

			.Add "Command",2,"Width=105","Height=20", _
					"Top=25","Left=420","Caption=""Command"""

			
			.Add "LCombo",3,"Width=95","Height=20", _
					"Top=70","Left=230"

			.Add "Text",1,"Width=95","Height=20", _
					"Top=100","Left=230","Text="""""

			.Add "Text",2,"Width=95","Height=20", _
					"Top=130","Left=230","Text=""500"""

			.Add "Check",1,"Width=260","Height=20", _
					"Top=160","Left=55","Alignment=1","Caption=""Check"""

			.Add "Command",3,"Width=150","Height=40", _
					"Top=70","Left=370","Default=True","Caption=""Command"""

			.Add "Command",4,"Width=150","Height=40", _
					"Top=120","Left=370","Cancel=True","Caption=""Command"""

			.Add "HScroll",1,"Width=365","Height=20", _
					"Top=190","Left=5","FontSize=14"
			
			.Add "ProgressBar",1,"Width=515","Height=20", _
					"Top=220","Left=5"

			.Add "COption",1,"Width=60","Height=20", _
					"Top=260","Left=105","Caption=""COption"""
			
			.Add "COption",2,"Width=60","Height=20", _
					"Top=260","Left=170","Caption=""COption""","Value=True"
			
			.Add "COption",3,"Width=60","Height=20", _
					"Top=260","Left=235","Caption=""COption"""

			'------------------------------------------------------------------
			.Add "Text",3,"Width=80","Height=20", _
					"Top=260","Left=310","MaxLength=2","Text=""Text""","Enabled=False"
			.Add "Check",2,"Width=150","Height=20", _
					"Top=260","Left=400","Caption=""Check"""
			
			
			' Настроить ресайзинг элементов управления 
			' Применить метод Move2 к каждому, уже сформированному элементу 
			' управления с помощью runtime метода DoParams. В параметрах метода 
			' Move2 указать относительный размер и положение каждого элемента, 
			' как он изначально установлен на форме. При изменении размеров формы 
			' размер и положение каждого элемента будут изменятся пропорционально 
			' форме, сохраняя изначально заданное относительное положение.
			'------------------------------------------------------------------
			On Error Resume Next
			
			For Each oCntrl In .Controls

				sParam = CStr("Move2 " & oCntrl.Left*vbPx/.Width & "," & _
							 oCntrl.Top*vbPy/.Height & ",,," & _
							 oCntrl.Width*vbPx/.Width & "," & _
							 oCntrl.Height*vbPy/.Height & ",1")

			
				.DoParams oCntrl, Array(sParam)
			Next

			On Error GoTo 0
						
		End With
		

		Form.Visible=True
		DoEvents

		Form.SetFocus()
		DoEvents	
		
	End Sub
<#Module>

<#Form=Form>

	Sub Form_Unload()
		EndMF
		DoEvents
	End Sub	
<#Form>
Последний раз редактировалось Poltergeyst 26 май 2018, 21:42, всего редактировалось 1 раз.

Аватара пользователя
Atomix
Admin
Сообщения: 104
Зарегистрирован: 19 янв 2005, 17:00
Контактная информация:

Re: Ресайзинг элементов управления

Сообщение Atomix » 24 май 2018, 14:09

Рад видеть.

А что все до сих пор на 9 версии, в 11 очень много улучшений.

Poltergeyst
начинающий
Сообщения: 5
Зарегистрирован: 08 июл 2008, 21:53

Re: Ресайзинг элементов управления

Сообщение Poltergeyst » 26 май 2018, 21:43

Для LangMF11 получилось как-то так:

Код: Выделить всё

'=========================================================================================
' Ресайзинг элементов управления (LangMF11)
'=========================================================================================

<#Module=ResizeSample>


	'---------------------------------------------------------------------------------
 	Sub Load(cmdstr)


		'-------------------------------------------------------------------------
		With Form

			.ScaleMode 		= 3
			.AutoRedraw		= True
			.Caption		= "RESIZING"
			.Width			= 540 * vbPx
			.Height			= 320 * vbPy
			.Style.ControlBox 	= True
			.Style.MaxButton 	= True
			.Style.SizeBorder  	= True
			
			'------------------------------------------------------------------
			.Add "Text",1,".Move 5, 25, 135, 20"
			.Add "Text",2,".Move 275, 25, 135, 20"
			.Add "Text",3,".Move 230, 70, 95, 20"
			.Add "Text",4,".MaxLength=2",".Move 310, 260, 80, 20"

			.Add "Command",1,".Caption=""Command""",".Move 150, 25, 105, 20"
			.Add "Command",2,".Caption=""Command""",".Move 420, 25, 105, 20"
			.Add "Command",3,".Caption=""Command""",".Move 370, 70, 150, 40"
			.Add "Command",4,".Cancel=True",".Caption=""Command""",".Move 370, 120, 150, 40"

			.Add "Text",5,".Text=""""",".Move 230, 100, 95, 20"
			.Add "Text",6,"Text=""500""",".Move 230, 130, 95, 20"

			.Add "Check",1,".Alignment=1",".Caption=""Check""",".Move 55, 160, 260, 20"
			.Add "Check",2,".Caption=""Check""",".Move 400, 260, 150, 20"

			.Add "HScroll",1,".Move 5, 190, 365, 20"
			.Add "Pbar",1,".Move 5, 220, 515, 20"

			.Add "Opt",1,".Caption=""COption""",".Move 105, 260, 60, 20"
			.Add "Opt",2,".Caption=""COption""",".Value=True",".Move 170, 260, 60, 20"
			.Add "Opt",3,".Caption=""COption""",".Move 235, 260, 60, 20"

			
			' Настроить ресайзинг элементов управления 
			' Применить метод Move2 к каждому, уже сформированному элементу 
			' управления с помощью runtime метода DoParams. В параметрах метода 
			' Move2 указать относительный размер и положение каждого элемента, 
			' как он изначально установлен на форме. При изменении размеров формы 
			' размер и положение каждого элемента будут изменятся пропорционально 
			' форме, сохраняя изначально заданное относительное положение.
			'------------------------------------------------------------------
			On Error Resume Next

			For Each oCntrl In .Controls
				Sys.DoParams oCntrl, Array(sParam(oCntrl))
			Next
			
			' Progress Bar не попадает в коллекцию элементов, его приходится
			' настраивать отдельно
			'------------------------------------------------------------------
			Sys.DoParams .Pbar(1), Array(sParam(.Pbar(1)))

			On Error GoTo 0			
		End With
		
		Form.Visible=True
		DoEvents

		Form.SetFocus()
		DoEvents	
		
	End Sub

	'---------------------------------------------------------------------------------
	Function Prep(ByVal arg)
		Prep = Replace(CStr(Round(arg,2)),",",".")
	End Function

	'---------------------------------------------------------------------------------
	Function sParam(ByRef arg)
		sParam = CStr(".Parent.Move2 $0," & Prep(arg.Left*vbPx/Form.Width) & "," & _
			Prep(arg.Top*vbPy/Form.Height) & ",,," & _
			Prep(arg.Width*vbPx/Form.Width) & "," & _
			Prep(arg.Height*vbPy/Form.Height) & ",1")
	End Function	
	
	
<#Module>

<#Form=Form>
	Sub Form_Unload()
		EndMF
		DoEvents
	End Sub	
<#Form>

Ответить