Problem...
2 отговора
96 прегледа
Problem...
Imam sledniq problem:
Pravq igra boardgame sys tablo 6x6. Za sega tabloto se systoi ot 36 kartinki koito gi initcializiram po daden na4in... kak tova ne e vajno. Mejdu nqkoi ot tezi 36 kletki trqbva da ima STENI... prosto stena mejdu 2 kletki i ot ednata kletka ne moje da se mine v drugata.
Problema mi e 4e ne znam kak da narisuvam tezi steni na VB-to. Moje bi trqbva da napravq 2 kartinki - vertikalna i horizontalna stena i po nqkakuv na4in da gi postavqm na dadenoto mqsto. 6te mi dadete li nqkakva idea kak da risuvam tezi steni...
Pravq igra boardgame sys tablo 6x6. Za sega tabloto se systoi ot 36 kartinki koito gi initcializiram po daden na4in... kak tova ne e vajno. Mejdu nqkoi ot tezi 36 kletki trqbva da ima STENI... prosto stena mejdu 2 kletki i ot ednata kletka ne moje da se mine v drugata.
Problema mi e 4e ne znam kak da narisuvam tezi steni na VB-to. Moje bi trqbva da napravq 2 kartinki - vertikalna i horizontalna stena i po nqkakuv na4in da gi postavqm na dadenoto mqsto. 6te mi dadete li nqkakva idea kak da risuvam tezi steni...
Re: Problem...
Option Explicit
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private Const BDR_RAISEDINNER = &H4
Private Const BDR_RAISEDOUTER = &H1
Private Const EDGE_RAISED = _
(BDR_RAISEDOUTER Or BDR_RAISEDINNER)
Private Const BDR_SUNKENOUTER = &H2
Private Const BDR_SUNKENINNER = &H8
Private Const EDGE_SUNKEN = _
(BDR_SUNKENOUTER Or BDR_SUNKENINNER)
Private Const EDGE_ETCHED = _
(BDR_SUNKENOUTER Or BDR_RAISEDINNER)
Private Const EDGE_BUMP = _
(BDR_RAISEDOUTER Or BDR_SUNKENINNER)
Private Const BDR_INNER = &HC
Private Const BDR_OUTER = &H3
Private Const BDR_SUNKEN = &HA
Private Const BF_MIDDLE = &H800
Private Const BF_SOFT = &H1000
Private Const BF_ADJUST = &H2000
Private Const BF_FLAT = &H4000
Private Const BF_MONO = &H8000
Private Enum EdgeContrast
Middle = BF_MIDDLE
Soft = BF_SOFT
Adjust = BF_ADJUST
Flat = BF_FLAT
Mono = BF_MONO
End Enum
Private Enum EdgeStyle
ButtonStyle = EDGE_RAISED
MenuStyle = BDR_RAISEDINNER
MenuStyleSoft = BDR_RAISEDOUTER
SunkenPanel = BDR_SUNKEN
SunkenPanelSoft = BDR_SUNKENINNER
SunkenFrame = EDGE_ETCHED
RaisedFrame = EDGE_BUMP
End Enum
Private Const BF_LEFT = &H1
Private Const BF_TOP = &H2
Private Const BF_TOPLEFT = (BF_TOP Or BF_LEFT)
Private Const BF_RIGHT = &H4
Private Const BF_BOTTOM = &H8
Private Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
Private Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)
'Диагонални изпъкналости
Private Const BF_DIAGONAL = &H10
Private Const BF_DIAGONAL_ENDTOPRIGHT = _
(BF_DIAGONAL Or BF_TOP Or BF_RIGHT)
Private Const BF_DIAGONAL_ENDTOPLEFT = _
(BF_DIAGONAL Or BF_TOP Or BF_LEFT)
Private Const BF_DIAGONAL_ENDBOTTOMLEFT = _
(BF_DIAGONAL Or BF_BOTTOM Or BF_LEFT)
Private Const BF_DIAGONAL_ENDBOTTOMRIGHT = _
(BF_DIAGONAL Or BF_BOTTOM Or BF_RIGHT)
Private Declare Function DrawEdge Lib "user32.dll" _
(ByVal hdc As Long, _
qrc As RECT, _
ByVal edge As Long, _
ByVal grfFlags As Long) As Long
Private Sub Draw_Edge(PictureBox As PictureBox, _
ByVal Left As Long, _
ByVal Right As Long, _
ByVal Top As Long, _
ByVal Bottom As Long, _
ByVal Style As EdgeStyle, _
ByVal Kontrast As EdgeContrast)
Dim rc As RECT
If Not (TypeOf PictureBox Is PictureBox) Then
Exit Sub
End If
PictureBox.ScaleMode = vbTwips
PictureBox.Visible = True
PictureBox.AutoRedraw = True
PictureBox.BorderStyle = 0
PictureBox.ClipControls = True
PictureBox.ScaleMode = vbPixels
If (Bottom = 0) And (Right = 0) Then
rc.Left = PictureBox.ScaleLeft
rc.Top = PictureBox.ScaleTop
rc.Bottom = PictureBox.ScaleHeight + PictureBox.ScaleLeft
rc.Right = PictureBox.ScaleWidth + PictureBox.ScaleLeft
Else
rc.Left = Left
rc.Top = Top
rc.Bottom = Bottom
rc.Right = Right
End If
Call DrawEdge(PictureBox.hdc, rc, Style, BF_RECT Or Kontrast)
PictureBox.Refresh
End Sub
Private Sub Command1_Click()
Draw_Edge Picture1, 10, 15, 0, 100, ButtonStyle, Adjust
Draw_Edge Picture1, 50, 55, 0, 100, ButtonStyle, Adjust
End Sub
Редактирано от Щиpлиц на