Показать сообщение отдельно
Старый 01.05.2008, 18:09   #20
Bagration
Знающий
 
Регистрация: 06.10.2007
Сообщений: 225
Написано 15 полезных сообщений
(для 21 пользователей)
Плохо Ответ: Ptr и Var : как работает ?

Вот представим, имеется меню, кнопки, при нажатии определенной кнопки меняется значение глобальной переменной а переменной типа меню. Делается это указателями, то есть я не передаю значение а лишь даю понять проге какую переменную надо увеличить или уменьшить , короче не важно действия, главное суть. Вот ниже я привел пример:
Global ButtonList:TList = New TList
'varriables
Global varriable_1:Int
Global varriable_2:Int
Global varriable_3:Int
Type TButtonGUI
	Field pos_x:Int, pos_y:Int
	Field color:Int[4] 
	Field txt:String
	Function Button:TButtonGUI(txt:String, pos_x:Int, pos_y:Int) 
		Local Button:TButtonGUI = New TButtonGUI
			button.txt = txt
			button.pos_x = pos_x
			button.pos_y = pos_Y
			button.color[1] = 0
			button.color[2] = 0
			button.color[3] = 128
			ButtonList.AddLast(Button) 
	End Function
	Method update(name:String, ukazatel Var) 
		If MouseX() >= pos_x And MouseY() >= pos_y And MouseX() <= pos_x + 250 And MouseY() <= pos_y + 70 Then
			color[1] = 255
			color[2] = 0
			color[3] = 0
			If txt = name Then
				If MouseHit(1) Then
					ukazatel:+1
				End If
			End If
			Else
			color[1] = 0
			color[2] = 0
			color[3] = 128
		End If
		
	End Method
	Method draw() 
		SetColor(color[1] , color[2] , color[3] ) 
		DrawRect(pos_x, pos_y, 250, 70) 
		SetColor(0, 0, 0) 
		DrawText(txt, pos_x + 125 - TextWidth(txt) *.5, pos_y + 35 - TextHeight(txt) *.5) 
	End Method
End Type
Function UpdateButton(txt:String, ukazatel Var) 
	For Local up_button:TButtonGUI = EachIn ButtonList
		up_button.update(txt, ukazatel) 
		up_button.draw
	Next
End Function
 
Graphics (800, 600, 0, 60, 2) 

HideMouse
TButtonGUI.Button("Varriable 1", 50, 100) 
TButtonGUI.Button("Varriable 2", 50, 300) 
TButtonGUI.Button("Varriable 3", 50, 500) 

While Not KeyHit(KEY_ESCAPE) 
	Cls
	UpdateButton("Varriable 1", varriable_1) 
	UpdateButton("Varriable 2", varriable_2) 
	UpdateButton("Varriable 3", varriable_3) 
	'cursor
	SetColor(255, 255, 255) 
	DrawOval(MouseX(), MouseY(), 4, 4) 
	'txt
	SetColor(255, 255, 255) 
	DrawText("MouseX: " + MouseX(), 20, 20) 
	DrawText("MouseY: " + MouseY(), 20, 40) 
	DrawText("Varriable 1 = " + varriable_1, 600, 20) 
	DrawText("Varriable 2 = " + varriable_2, 600, 40) 
	DrawText("Varriable 3 = " + varriable_3, 600, 60) 
	Flip
Wend
Здесь я создал 3 кнопки, потом в упдейте дал указания какой кнопке какую переменную увеличить.
UpdateButton("Varriable 1", varriable_1)
UpdateButton("Varriable 2", varriable_2)
UpdateButton("Varriable 3", varriable_3)
Жирными буквами указаны указатели.
А нельзя ли скажем добавить в типе меню еще переменную указатель, Varriable , которая будет хранить указатель на нужную переменную, но тип филда не могу задать . Потом создание кнопок будет уже следующим:
TButtonGUI.Button("Varriable 1", 50, 100,varriable_1)
TButtonGUI.Button("Varriable 1", 50, 100,varriable_2)
TButtonGUI.Button("Varriable 1", 50, 100,varriable_3)
Потом исходя из того что в типе меню есть переменная указатель, то в упдейте просто увеличивается Varriable(указатель) на 1 или еще что. (смотреть метод обновления). Тогда теоретически не придеться каждый раз вызывать Упдейт с разными значениями.
Как думаете такое возможно?
Надеюсь я понятно изьяснился.
(Offline)
 
Ответить с цитированием