أنا أعمل برنامج لرسم درف المطابخ من خلال برنامج الأوتوكاد بواسطة الفيجوال بيسك التي يتم تخريجها لحفرها على مكنة CNC , وبقي علي صف هذه الدرف على لوح MDF ذو القياس 122 * 244 سم , وهذه الدرف عبارة عن مستطيلات مختلفة الطول والعرض والمساحة,
فمن يستطيع مساعدتي في صف هذه الدرف داخل المستطيل السابق , سيكون هناك ضياع في مساحة تشريك, اكيد ولكن كلما كان هذا الضياع بأقل ما يمكن يكون البرنامج ذو كفاءة أكثر
أرجو متابعة المثال التالي:
:لمزيد من التوضيح انسخ هذا الكود إلى ملف نصي ثم غير اللاحقة من txt إلى frm ثم أنشئ مشروع جديد وأدخل هذا الفورم واجعله هو النافذة الرئيسية:
VERSION 5.00
Begin VB.Form frmMain
Caption = "Form1"
ClientHeight = 7485
ClientLeft = 60
ClientTop = 450
ClientWidth = 8100
LinkTopic = "Form1"
ScaleHeight = 499
ScaleMode = 3 'Pixel
ScaleWidth = 540
StartUpPosition = 3 'Windows Default
Begin VB.CommandButton cmdNest
Caption = "align "
Height = 375
Left = 6000
TabIndex = 2
Top = 6840
Width = 1815
End
Begin VB.CommandButton cmdNew
Caption = "new"
Height = 375
Left = 6000
TabIndex = 1
Top = 6240
Width = 1815
End
Begin VB.PictureBox PicTable
Appearance = 0 'Flat
BackColor = &H80000005&
ForeColor = &H80000008&
Height = 3660
Left = 6000
ScaleHeight = 242
ScaleMode = 3 'Pixel
ScaleWidth = 120
TabIndex = 0
Top = 2280
Width = 1830
End
Begin VB.Label imgDarfa
Alignment = 2 'Center
Appearance = 0 'Flat
BackColor = &H80000018&
BorderStyle = 1 'Fixed Single
Caption = "1"
BeginProperty Font
Name = "MS Sans Serif"
Size = 13.5
Charset = 178
Weight = 700
Underline = 0 'False
Italic = 0 'False
Strikethrough = 0 'False
EndProperty
ForeColor = &H000040C0&
Height = 900
Index = 0
Left = 840
TabIndex = 3
Top = 1800
Width = 450
End
End
Attribute VB_Name = "frmMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
'
Dim numDarfa As Integer
Private Sub cmdNest_Click()
'How I can align this rectangles (imgDarfa) in the big rectangle (PicTable)
Set imgDarfa(0).Container = PicTable
imgDarfa(0).Left = 0
imgDarfa(0).Top = 0
End Sub
Private Sub cmdNew_Click()
Dim i As Integer
Dim m As Integer
Dim Wd As Single
Dim Ht As Single
Dim D As Single
Dim n As Integer
'
For i = 0 To numDarfa
m = Rnd * 100
If m < 50 Then m = 1 Else m = -1
D = Rnd * 30
Ht = 60 + m * D
m = Rnd * 100
If m < 50 Then m = 1 Else m = -1
D = Rnd * 15
Wd = 30 + m * D
Set imgDarfa(i).Container = Me
imgDarfa(i).Width = Wd
imgDarfa(i).Height = Ht
'
Next i
ReArrange
End Sub
Private Sub Form_Load()
Dim i As Integer
'
numDarfa = 14
Randomize Timer
For i = 1 To numDarfa
Load imgDarfa(i)
imgDarfa(i).Visible = True
imgDarfa(i).Caption = i + 1
Next i
cmdNew_Click
End Sub
'
Private Sub ReArrange()
Dim i As Integer
For i = 0 To imgDarfa.UBound
If i <> 0 Then
imgDarfa(i).Left = imgDarfa(i - 1).Left + imgDarfa(i - 1).Width
imgDarfa(i).Top = 5
Else
imgDarfa(i).Left = 5
imgDarfa(i).Top = 5
End If
Next i
End Sub