VERSION 5.00
Object = "{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}#2.0#0"; "mscomctl.ocx"
Object = "{0D452EE1-E08F-101A-852E-02608C4D0BB4}#2.0#0"; "FM20.DLL"
Begin VB.Form Room
Caption = "Модель комнаты"
ClientHeight = 4575
ClientLeft = 60
ClientTop = 450
ClientWidth = 7860
LinkTopic = "Form1"
ScaleHeight = 4575
ScaleWidth = 7860
StartUpPosition = 3 'Windows Default
Begin MSComctlLib.ProgressBar barTemperature
Height = 255
Left = 3480
TabIndex = 9
Top = 2040
Width = 4215
_ExtentX = 7435
_ExtentY = 450
_Version = 393216
Appearance = 1
Min = 7
Max = 40
End
Begin VB.CommandButton btnLampOn
Caption = "Включить"
Height = 300
Left = 2280
TabIndex = 2
Top = 1140
Width = 1095
End
Begin VB.CommandButton btnTVOn
Caption = "Включить"
Height = 300
Left = 2280
TabIndex = 1
Top = 240
Width = 1095
End
Begin VB.Timer Timer
Enabled = 0 'False
Interval = 1
Left = 3600
Top = 120
End
Begin VB.CommandButton btnStart
Caption = "Начать"
Height = 495
Left = 6240
TabIndex = 0
Top = 3960
Width = 1215
End
Begin MSComctlLib.Slider sbMaxTemperature
Height = 300
Left = 120
TabIndex = 21
Top = 4080
Width = 4455
_ExtentX = 7858
_ExtentY = 529
_Version = 393216
Min = 10
Max = 40
SelStart = 10
TickFrequency = 10
Value = 10
End
Begin MSComctlLib.Slider sbMinTemperature
Height = 300
Left = 120
TabIndex = 22
Top = 3120
Width = 4455
_ExtentX = 7858
_ExtentY = 529
_Version = 393216
Min = 7
Max = 40
SelStart = 7
TickFrequency = 10
Value = 7
End
Begin VB.Label Label7
Caption = "Мощность"
Height = 255
Left = 4560
TabIndex = 20
Top = 240
Width = 1695
End
Begin VB.Label Label6
Caption = "Максимальная температура"
Height = 300
Left = 120
TabIndex = 19
Top = 3720
Width = 2895
End
Begin VB.Label Label5
Caption = "Минимальная температура"
Height = 300
Left = 120
TabIndex = 18
Top = 2760
Width = 3135
End
Begin VB.Label Label4
Caption = "Термометр"
Height = 300
Left = 4560
TabIndex = 17
Top = 1560
Width = 1215
End
Begin VB.Label Label3
Caption = "Радиатор"
Height = 300
Left = 120
TabIndex = 16
Top = 2040
Width = 1095
End
Begin VB.Label Label2
Caption = "Лампа"
Height = 300
Left = 120
TabIndex = 15
Top = 1140
Width = 1095
End
Begin VB.Label Label1
Caption = "Телевизор"
Height = 300
Left = 120
TabIndex = 14
Top = 240
Width = 1095
End
Begin MSForms.SpinButton sbRadiator
Height = 300
Left = 1920
TabIndex = 13
Top = 2040
Width = 255
Size = "450;529"
SmallChange = 100
End
Begin MSForms.SpinButton sbLamp
Height = 300
Left = 1920
TabIndex = 12
Top = 1140
Width = 255
Size = "450;529"
SmallChange = 5
End
Begin MSForms.SpinButton sbTV
Height = 300
Left = 1920
TabIndex = 11
Top = 240
Width = 255
Size = "450;529"
SmallChange = 5
End
Begin VB.Label lbTemperature
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Height = 300
Left = 6360
TabIndex = 10
Top = 1560
Width = 600
End
Begin VB.Label edMinTemperature
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "7"
Height = 300
Left = 3840
TabIndex = 8
Top = 2760
Width = 600
End
Begin VB.Label edMaxTemperature
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "10"
Height = 300
Left = 3840
TabIndex = 7
Top = 3720
Width = 600
End
Begin VB.Label lbPower
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Height = 300
Left = 6360
TabIndex = 6
Top = 240
Width = 600
End
Begin VB.Label lbRadiator
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "100"
Height = 300
Left = 1320
TabIndex = 5
Top = 2040
Width = 600
End
Begin VB.Label lbLamp
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "5"
Height = 300
Left = 1320
TabIndex = 4
Top = 1140
Width = 600
End
Begin VB.Label lbTV
Alignment = 1 'Right Justify
BorderStyle = 1 'Fixed Single
Caption = "30"
Height = 300
Left = 1320
TabIndex = 3
Top = 240
Width = 600
End
End
Attribute VB_Name = "Room"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'минимальное и максимальное значения температуры комнаты
Private Const MIN_ROOM_TEMPERATURE = 7
Private Const MAX_ROOM_TEMPERATURE = 40
'теплопотеря комнаты за интервал времени
Private Const ROOM_HEAT_LOSS = 1
'теплоотдача радиатора за интервал времени
Private Const RADIATOR_HEAT_STRENGTH = 2
'интервал времени
Private Const TIMER_INTERVAL = 100
'минимальные и максимальные значения мощностей устройств
Private Const MIN_TV_POWER = 30
Private Const MAX_TV_POWER = 100
Private Const MIN_LAMP_POWER = 5
Private Const MAX_LAMP_POWER = 100
Private Const MIN_RADIATOR_POWER = 100
Private Const MAX_RADIATOR_POWER = 1000
'поля
Private mTemperature As Long
Private mTVOn As Boolean
Private mLampOn As Boolean
Private mRadiatorOn As Boolean
'свойства
Property Get Temperature() As Long
Temperature = mTemperature
End Property
Property Let Temperature(ByVal RHS As Long)
mTemperature = RHS
lbTemperature = RHS
barTemperature.Value = Min(Max(RHS, barTemperature.Min), barTemperature.Max)
End Property
Property Get TVOn() As Boolean
TVOn = mTVOn
End Property
Property Let TVOn(ByVal RHS As Boolean)
mTVOn = RHS
CalculatePower
End Property
Property Get LampOn() As Boolean
LampOn = mLampOn
End Property
Property Let LampOn(ByVal RHS As Boolean)
mLampOn = RHS
CalculatePower
End Property
Property Get RadiatorOn() As Boolean
RadiatorOn = mRadiatorOn
End Property
Property Let RadiatorOn(ByVal RHS As Boolean)
mRadiatorOn = RHS
CalculatePower
End Property
Property Get TVPower() As Long
TVPower = sbTV
End Property
Property Get LampPower() As Long
LampPower = sbLamp
End Property
Property Get RadiatorPower() As Long
RadiatorPower = sbRadiator
End Property
Property Get MinTemperature() As Long
MinTemperature = sbMinTemperature
End Property
Property Get MaxTemperature() As Long
MaxTemperature = sbMaxTemperature
End Property
'методы
Private Sub CalculatePower()
Dim Power As Long
If TVOn Then
Power = Power + TVPower
End If
If LampOn Then
Power = Power + LampPower
End If
If RadiatorOn Then
Power = Power + RadiatorPower
End If
lbPower = Power
End Sub
Private Sub ChangeControlStates(ByVal Working As Boolean)
btnTVOn.Visible = Working
btnLampOn.Visible = Working
sbTV.Enabled = Not Working
sbLamp.Enabled = Not Working
sbRadiator.Enabled = Not Working
btnStart.Caption = IIf(Working, "Закончить", "Начать")
If Not Working Then
lbPower = ""
lbTemperature = ""
End If
End Sub
'обработчики событий
Private Sub Form_Load()
With sbTV
.Min = MIN_TV_POWER
.Max = MAX_TV_POWER
.Value = MIN_TV_POWER
End With
With sbLamp
.Min = MIN_LAMP_POWER
.Max = MAX_LAMP_POWER
.Value = MIN_LAMP_POWER
End With
With sbRadiator
.Min = MIN_RADIATOR_POWER
.Max = MAX_RADIATOR_POWER
.Value = MIN_RADIATOR_POWER
End With
With barTemperature
.Min = MIN_ROOM_TEMPERATURE
.Max = MAX_ROOM_TEMPERATURE
Temperature = .Value
End With
With Timer
.Enabled = False
.Interval = TIMER_INTERVAL
End With
ChangeControlStates False
End Sub
Private Sub btnStart_Click()
Timer.Enabled = Not Timer.Enabled
Temperature = MIN_ROOM_TEMPERATURE
ChangeControlStates Timer.Enabled
End Sub
Private Sub btnTVOn_Click()
TVOn = Not TVOn
btnTVOn.Caption = IIf(TVOn, "Выключить", "Включить")
End Sub
Private Sub btnLampOn_Click()
LampOn = Not LampOn
btnLampOn.Caption = IIf(LampOn, "Выключить", "Включить")
End Sub
Private Sub sbTV_Change()
lbTV = sbTV
End Sub
Private Sub sbLamp_Change()
lbLamp = sbLamp
End Sub
Private Sub sbRadiator_Change()
lbRadiator = sbRadiator
End Sub
Private Sub sbMaxTemperature_Scroll()
sbMaxTemperature = Max(sbMinTemperature, sbMaxTemperature)
edMaxTemperature = sbMaxTemperature
End Sub
Private Sub sbMinTemperature_Scroll()
sbMinTemperature = Min(sbMinTemperature, sbMaxTemperature)
edMinTemperature = sbMinTemperature
End Sub
Private Sub Timer_Timer()
Temperature = Temperature - ROOM_HEAT_LOSS
If RadiatorOn Then
Temperature = Temperature + RADIATOR_HEAT_STRENGTH
End If
If Temperature > MaxTemperature Then
RadiatorOn = False
ElseIf Temperature < MinTemperature Then
RadiatorOn = True
End If
End Sub
'вспомогательные
Private Function Min(ByVal a, ByVal b)
If a < b Then Min = a Else Min = b
End Function
Private Function Max(ByVal a, ByVal b)
If a > b Then Max = a Else Max = b
End Function
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.