简单地,用VB6把它写成了这个样子。一个设计用的FORM,一个组件的PALTTE,一个属性列表(没有方法和事件列表)。

组件周围做了六个Caret,通过它缩放组件,按住鼠标拖动组件,同时更新属性列表显示。

可以保存设计、装载设计、生成代码RAPIDQ代码

组件模板挺简陋的,没有针对性的设计一些用户控件,然后设置它们的Parent在设计界面上有针对性的缩放,连简单的图像也没做。试练,就简简单单吧。
比如:设计下面的一个界面吧

点击Code生成代码
CREATE Design AS QFORM
Width = 754
Height = 495
CREATE Edit1 AS QEDIT
Text = "TextBox01"
Width = 270
Height = 64
Left = 317
Top = 58
Font.Size = 10.8
END CREATE
CREATE Label2 AS QLABEL
Caption = "Label02"
Width = 133
Height = 63
Left = 142
Top = 58
Font.Size = 10.8
END CREATE
CREATE Button3 AS QBUTTON
Caption = "Button03"
Width = 442
Height = 91
Left = 142
Top = 150
Font.Size = 10.8
END CREATE
CREATE Button4 AS QBUTTON
Caption = "Button04"
Width = 234
Height = 51
Left = 142
Top = 275
Font.Size = 10.8
END CREATE
CREATE Button5 AS QBUTTON
Caption = "Button05"
Width = 191
Height = 49
Left = 392
Top = 275
Font.Size = 10.8
END CREATE
CREATE Button6 AS QBUTTON
Caption = "Button06"
Width = 133
Height = 42
Left = 300
Top = 367
Font.Size = 10.8
END CREATE
CREATE Button7 AS QBUTTON
Caption = "Button07"
Width = 133
Height = 42
Left = 450
Top = 367
Font.Size = 10.8
END CREATE
END CREATE
'Insert your initialization code here
Design.ShowModal
用RC.EXE编译生成执行文件 frmCode.exe

运行执行文件frmCode.exe显示的界面

生成的代码是UPX压缩的,用UPX -d解开后,再用resHacker把 Theme.xml写入frmCode.exe文件。xp样式不起作用,DPI感知起作用。
全局模块的代码
Option Explicit
Global TPPPx As Single
Global TPPPy As Single
Public Const HWND_DESKTOP As Long = 0
Public Const LOGPIXELSX As Long = 88
Public Const LOGPIXELSY As Long = 90
'Grid isEditable
Global EditableFlag As Boolean
Global isCaretsShow As Boolean
Global isCompChanged As Boolean
Global GridSpaceV As Long
Global GridSpaceH As Long
Type gUIComps
Name As String
Caption As String
FontSize As Single
Width As Single
Height As Single
Left As Single
Top As Single
End Type
Global UIComps(1000) As gUIComps
Global CompMoveID As Integer 'Value 0/1, Hide carets when Component moves, and then show carets when MouseUP
Global CompFocusID As Integer 'It is the Component INDEX when get focus
Global CompSelID As Integer 'It is the selection ID of Component palete at "Components" form
Global CompDisplayID As Integer 'It is for loading Components in the Components Array
'For components drag
Global BtnOldX1 As Long: Global BtnOldY1 As Long
Global BtnNewX1 As Long: Global BtnNewY1 As Long
'For carets drag
Global BtnOldX2 As Long: Global BtnOldY2 As Long
Global BtnNewX2 As Long: Global BtnNewY2 As Long
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
UI设计界面代码
Option Explicit
Private Sub Carets_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim RemainsToGridH As Long
Dim RemainsToGridV As Long
If isCompChanged = True Then
isCompChanged = False
RemainsToGridH = CompDisplay(CompFocusID).Left Mod GridSpaceH
If RemainsToGridH < GridSpaceH / 2 Then
CompDisplay(CompFocusID).Left = CompDisplay(CompFocusID).Left - CompDisplay(CompFocusID).Left Mod GridSpaceH
UIComps(CompFocusID).Left = CompDisplay(CompFocusID).Left
Else
CompDisplay(Index).Left = CompDisplay(CompFocusID).Left - CompDisplay(CompFocusID).Left Mod GridSpaceH + GridSpaceH
UIComps(CompFocusID).Left = CompDisplay(CompFocusID).Left
End If
RemainsToGridV = CompDisplay(CompFocusID).Top Mod GridSpaceV
If RemainsToGridV < GridSpaceV / 2 Then
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top - CompDisplay(CompFocusID).Top Mod GridSpaceV
UIComps(CompFocusID).Top = CompDisplay(CompFocusID).Top
Else
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top - CompDisplay(CompFocusID).Top Mod GridSpaceV + GridSpaceV
UIComps(CompFocusID).Top = CompDisplay(CompFocusID).Top
End If
End If
End Sub
Private Sub CompDisplay_Click(Index As Integer)
CaretsShow
CompFocusID = Index
CaretsRePos (CompFocusID)
CompProps.Text1.Text = ""
End Sub
Private Sub CompDisplay_MouseUp(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim RemainsToGridH As Long
Dim RemainsToGridV As Long
If isCompChanged = True Then
isCompChanged = False
RemainsToGridH = CompDisplay(CompFocusID).Left Mod GridSpaceH
If RemainsToGridH < GridSpaceH / 2 Then
CompDisplay(CompFocusID).Left = CompDisplay(CompFocusID).Left - CompDisplay(CompFocusID).Left Mod GridSpaceH
UIComps(CompFocusID).Left = CompDisplay(CompFocusID).Left
Else
CompDisplay(CompFocusID).Left = CompDisplay(CompFocusID).Left - CompDisplay(CompFocusID).Left Mod GridSpaceH + GridSpaceH
UIComps(CompFocusID).Left = CompDisplay(CompFocusID).Left
End If
RemainsToGridV = CompDisplay(CompFocusID).Top Mod GridSpaceV
If RemainsToGridV < GridSpaceV / 2 Then
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top - CompDisplay(CompFocusID).Top Mod GridSpaceV
UIComps(CompFocusID).Top = CompDisplay(CompFocusID).Top
Else
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top - CompDisplay(CompFocusID).Top Mod GridSpaceV + GridSpaceV
UIComps(CompFocusID).Top = CompDisplay(CompFocusID).Top
End If
End If
If CompMoveID = 1 Then
CompMoveID = 0
CaretsShow
End If
End Sub
Private Sub Form_Click()
CaretsHide
CompFocusNone
End Sub
Private Sub Form_DblClick()
CaretsHide
CompFocusNone
If Components.CompSel(0).Value = True Then
Exit Sub
End If
CompDisplayID = CompDisplayID + 1
CompFocusID = CompDisplayID
Load CompDisplay(CompDisplayID)
CompDisplay(CompDisplayID).Caption = Components.CompSel(CompSelID).Caption + Format$(CompDisplayID, "00")
CompDisplay(CompDisplayID).Width = 1600: CompDisplay(CompDisplayID).Height = 500
CompDisplay(CompDisplayID).Move 300, 300
CompDisplay(CompDisplayID).FontSize = 11
CompDisplay(CompDisplayID).ZOrder (0)
'Store common properties of the created component
UIComps(CompDisplayID).Name = Components.CompSel(CompSelID).Caption
UIComps(CompDisplayID).Caption = CompDisplay(CompDisplayID).Caption
UIComps(CompDisplayID).FontSize = CompDisplay(CompDisplayID).FontSize
UIComps(CompDisplayID).Width = CompDisplay(CompDisplayID).Width
UIComps(CompDisplayID).Height = CompDisplay(CompDisplayID).Height
UIComps(CompDisplayID).Left = CompDisplay(CompDisplayID).Left
UIComps(CompDisplayID).Top = CompDisplay(CompDisplayID).Top
'To DO
'Store extra properties of the created component
PropsShow (CompDisplayID)
CompDisplay(CompDisplayID).Visible = True
CaretsRePos (CompDisplayID)
CaretsShow
End Sub
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
'Escape KEY
If KeyCode = 27 Then
CaretsHide
Exit Sub
End If
'Delete KEY
If KeyCode = 46 Then
If isCaretsShow = True Then
Unload CompDisplay(CompFocusID)
UICompDelete (CompFocusID)
CaretsHide
End If
End If
End Sub
Private Sub Form_Load()
Dim DesignLeft As Long
GridSpaceV = 100
GridSpaceH = 100
isCompChanged = False
TwipsPerPixelX
TwipsPerPixelY
DesignLeft = 350
If Design.Left > DesignLeft Then
Design.Left = DesignLeft
End If
CompDisplayID = 0
Components.Show
Components.Top = Design.Top
Components.Left = Design.Left + Design.Width
CompProps.Show
CompProps.Top = Design.Top
CompProps.Left = Design.Left + Design.Width + Components.Width
CaretsHide
DrawDesignGrid
End Sub
Sub CaretsRePos(compnum As Integer)
Carets(0).Left = CompDisplay(compnum).Left - 2 * Carets(0).Width: Carets(0).Top = CompDisplay(compnum).Top - 2 * Carets(0).Height
Carets(1).Left = CompDisplay(compnum).Left - 2 * Carets(1).Width: Carets(1).Top = CompDisplay(compnum).Top + CompDisplay(compnum).Height / 2 - Carets(1).Height / 2
Carets(2).Left = CompDisplay(compnum).Left - 2 * Carets(2).Width: Carets(2).Top = CompDisplay(compnum).Top + CompDisplay(compnum).Height + Carets(2).Height
Carets(3).Left = CompDisplay(compnum).Left + CompDisplay(compnum).Width / 2 - Carets(3).Width / 2: Carets(3).Top = CompDisplay(compnum).Top + CompDisplay(compnum).Height + Carets(3).Height
Carets(4).Left = CompDisplay(compnum).Left + CompDisplay(compnum).Width + Carets(4).Width: Carets(4).Top = CompDisplay(compnum).Top + CompDisplay(compnum).Height + Carets(4).Height
Carets(5).Left = CompDisplay(compnum).Left + CompDisplay(compnum).Width + Carets(5).Width: Carets(5).Top = CompDisplay(compnum).Top + CompDisplay(compnum).Height / 2 - Carets(5).Height / 2
Carets(6).Left = CompDisplay(compnum).Left + CompDisplay(compnum).Width + Carets(6).Width: Carets(6).Top = CompDisplay(compnum).Top - 2 * Carets(6).Height
Carets(7).Left = CompDisplay(compnum).Left + CompDisplay(compnum).Width / 2 - Carets(7).Width / 2: Carets(7).Top = CompDisplay(compnum).Top - 2 * Carets(7).Height
End Sub
Private Sub Carets_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Carets(Index).SetFocus
If Button = 1 Then
BtnOldX2 = X: BtnOldY2 = Y
CaretsRePos (CompFocusID)
End If
End Sub
Private Sub Carets_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim diffWidth As Single
Dim diffHeight As Single
If Button = 1 Then
BtnNewX2 = X: BtnNewY2 = Y
diffWidth = BtnNewX2 - BtnOldX2
diffHeight = BtnNewY2 - BtnOldY2
Select Case Index
Case 0
CompDisplay(CompFocusID).Width = CompDisplay(CompFocusID).Width - diffWidth
CompDisplay(CompFocusID).Left = CompDisplay(CompFocusID).Left + diffWidth
CompDisplay(CompFocusID).Height = CompDisplay(CompFocusID).Height - diffHeight
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top + diffHeight
Case 1
CompDisplay(CompFocusID).Width = CompDisplay(CompFocusID).Width - diffWidth
CompDisplay(CompFocusID).Left = CompDisplay(CompFocusID).Left + diffWidth
Case 2
CompDisplay(CompFocusID).Width = CompDisplay(CompFocusID).Width - diffWidth
CompDisplay(CompFocusID).Left = CompDisplay(CompFocusID).Left + diffWidth
CompDisplay(CompFocusID).Height = CompDisplay(CompFocusID).Height + diffHeight
Case 3
CompDisplay(CompFocusID).Height = CompDisplay(CompFocusID).Height + diffHeight
Case 4
CompDisplay(CompFocusID).Width = CompDisplay(CompFocusID).Width + diffWidth
CompDisplay(CompFocusID).Height = CompDisplay(CompFocusID).Height + diffHeight
Case 5
CompDisplay(CompFocusID).Width = CompDisplay(CompFocusID).Width + diffWidth
Case 6
CompDisplay(CompFocusID).Width = CompDisplay(CompFocusID).Width + diffWidth
CompDisplay(CompFocusID).Height = CompDisplay(CompFocusID).Height - diffHeight
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top + diffHeight
Case 7
CompDisplay(CompFocusID).Height = CompDisplay(CompFocusID).Height - diffHeight
CompDisplay(CompFocusID).Top = CompDisplay(CompFocusID).Top + diffHeight
End Select
UIComps(CompFocusID).Width = CompDisplay(CompFocusID).Width
UIComps(CompFocusID).Height = CompDisplay(CompFocusID).Height
UIComps(CompFocusID).Left = CompDisplay(CompFocusID).Left
UIComps(CompFocusID).Top = CompDisplay(CompFocusID).Top
PropsShowData (CompFocusID)
CaretsRePos (CompFocusID)
isCompChanged = True
End If
End Sub
Sub CaretsHide()
Dim i As Integer
isCaretsShow = False
For i = 0 To 7
Carets(i).Visible = False
Next i
End Sub
Sub CaretsShow()
Dim i As Integer
isCaretsShow = True
For i = 0 To 7
Carets(i).Visible = True
Next i
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
MainQuit
End Sub
Sub MainQuit()
Unload Components
Unload CompProps
End
End Sub
Private Sub CompDisplay_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
BtnOldX1 = X: BtnOldY1 = Y
CompFocusID = Index
CaretsRePos (CompFocusID)
PropsShow (CompFocusID)
End If
End Sub
Private Sub CompDisplay_MouseMove(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
CompMoveID = 1
CaretsHide
CompFocusID = Index
BtnNewX1 = CompDisplay(CompFocusID).Left + (X - BtnOldX1)
BtnNewY1 = CompDisplay(CompFocusID).Top + (Y - BtnOldY1)
If BtnNewX1 < 0 Then BtnNewX1 = 0
If BtnNewY1 < 0 Then BtnNewY1 = 0
CompDisplay(CompFocusID).Move BtnNewX1, BtnNewY1
If (CompDisplay(CompFocusID).Left + CompDisplay(CompFocusID).Width) > Design.ScaleWidth Then BtnNewX1 = Design.ScaleWidth - CompDisplay(CompFocusID).Width
If (CompDisplay(CompFocusID).Top + CompDisplay(CompFocusID).Height) > Design.ScaleHeight Then BtnNewY1 = Design.ScaleHeight - CompDisplay(CompFocusID).Height
CompDisplay(CompFocusID).Move BtnNewX1, BtnNewY1
UIComps(CompFocusID).Width = CompDisplay(CompFocusID).Width
UIComps(CompFocusID).Height = CompDisplay(CompFocusID).Height
UIComps(CompFocusID).Left = CompDisplay(CompFocusID).Left
UIComps(CompFocusID).Top = CompDisplay(CompFocusID).Top
PropsShowData (CompFocusID)
CaretsRePos (CompFocusID)
isCompChanged = True
End If
End Sub
Sub CompFocusNone()
CompProps.MSFlexGrid1.Clear
CompProps.gridTitle
CompProps.Text1.Text = ""
EditableFlag = False: CompProps.Label1.BackColor = RGB(255, 0, 0)
Design.SetFocus
End Sub
Sub PropsShow(comp As Integer)
'All properties are in TEXT format
'Show Grid Title
CompProps.gridTitle
'Show Grid data
CompProps.MSFlexGrid1.TextMatrix(1, 1) = Trim(Str(comp))
CompProps.MSFlexGrid1.TextMatrix(2, 1) = UIComps(comp).Name
CompProps.MSFlexGrid1.TextMatrix(3, 1) = UIComps(comp).Caption
CompProps.MSFlexGrid1.TextMatrix(4, 1) = Trim(Str(UIComps(comp).Width))
CompProps.MSFlexGrid1.TextMatrix(5, 1) = Trim(Str(UIComps(comp).Height))
CompProps.MSFlexGrid1.TextMatrix(6, 1) = Trim(Str(UIComps(comp).Left))
CompProps.MSFlexGrid1.TextMatrix(7, 1) = Trim(Str(UIComps(comp).Top))
End Sub
Sub PropsShowData(comp As Integer)
'Show Grid data
CompProps.MSFlexGrid1.TextMatrix(1, 1) = Trim(Str(comp))
CompProps.MSFlexGrid1.TextMatrix(2, 1) = UIComps(comp).Name
CompProps.MSFlexGrid1.TextMatrix(3, 1) = UIComps(comp).Caption
CompProps.MSFlexGrid1.TextMatrix(4, 1) = Trim(Str(UIComps(comp).Width))
CompProps.MSFlexGrid1.TextMatrix(5, 1) = Trim(Str(UIComps(comp).Height))
CompProps.MSFlexGrid1.TextMatrix(6, 1) = Trim(Str(UIComps(comp).Left))
CompProps.MSFlexGrid1.TextMatrix(7, 1) = Trim(Str(UIComps(comp).Top))
End Sub
Sub UICompDelete(comno As Integer)
UIComps(comno).Name = ""
UIComps(comno).Caption = ""
UIComps(comno).Width = 0
UIComps(comno).Height = 0
UIComps(comno).Left = 0
UIComps(comno).Top = 0
CompFocusNone
End Sub
Sub DrawDesignGrid()
Dim i, j As Integer
Design.DrawStyle = 0
For i = Design.ScaleLeft To Design.ScaleWidth Step GridSpaceH
For j = Design.ScaleTop To Design.ScaleHeight Step GridSpaceV
Design.PSet (i, j), RGB(0, 0, 255)
Next j
Next i
For i = Design.ScaleTop To Design.ScaleHeight Step GridSpaceV
For j = Design.ScaleLeft To Design.ScaleWidth Step GridSpaceH
Design.PSet (j, i), RGB(0, 0, 255)
Next j
Next i
End Sub
Private Sub Form_Resize()
Design.Cls
DrawDesignGrid
End Sub
Sub UIwriteout()
Dim i As Integer
Open "Projects\UIform\frmUI.frm" For Output Shared As #1
Write #1, "UIschemar=" + Trim(Str(Design.Width)) + "-" + Trim(Str(Design.Height))
For i = 1 To CompDisplayID
If UIComps(i).Name <> "" Then
Write #1, "Name.Index=" + UIComps(i).Name + "." + Trim(Str(i))
Write #1, "Caption=" + UIComps(i).Caption
Write #1, "Width=" + Trim(Str(UIComps(i).Width))
Write #1, "Height=" + Trim(Str(UIComps(i).Height))
Write #1, "Left=" + Trim(Str(UIComps(i).Left))
Write #1, "Top=" + Trim(Str(UIComps(i).Top))
Write #1, "FontSize=" + Trim(Str(UIComps(i).FontSize))
DoEvents
End If
Next i
Close #1
End Sub
Sub UIreadin()
Dim i As Integer
Dim Index As Integer
Dim Name As String
Dim Param As String
Dim ParamArr() As String
Dim ParamArrSibling() As String
CaretsHide
'Unload components first
For i = 1 To CompDisplayID
If UIComps(i).Name <> "" Then
Unload CompDisplay(i)
UICompDelete (i)
End If
Next i
'Read in all components
Open "Projects\UIform\frmUI.frm" For Input Shared As #1
Do While Not EOF(1)
Input #1, Param
ParamArr = Split(Param, "=")
Select Case ParamArr(0)
Case "UIschemar"
ParamArrSibling = Split(ParamArr(1), "-")
Design.Width = Val(ParamArrSibling(0))
Design.Height = Val(ParamArrSibling(1))
Case "Name.Index"
ParamArrSibling = Split(ParamArr(1), ".")
Name = ParamArrSibling(0)
Index = Val(ParamArrSibling(1))
UIComps(Index).Name = Name
Case "Caption"
UIComps(Index).Caption = ParamArr(1)
Case "Width"
UIComps(Index).Width = Val(ParamArr(1))
Case "Height"
UIComps(Index).Height = Val(ParamArr(1))
Case "Left"
UIComps(Index).Left = Val(ParamArr(1))
Case "Top"
UIComps(Index).Top = Val(ParamArr(1))
Case "FontSize"
UIComps(Index).FontSize = Val(ParamArr(1))
End Select
Loop
Close #1
On Error Resume Next
For i = 1 To Index
Load CompDisplay(i)
CompDisplay(i).Caption = UIComps(i).Caption
CompDisplay(i).Width = UIComps(i).Width
CompDisplay(i).Height = UIComps(i).Height
CompDisplay(i).Left = UIComps(i).Left
CompDisplay(i).Top = UIComps(i).Top
CompDisplay(i).Visible = True
CompDisplayID = i
Next i
Err.Clear
End Sub
Sub Codegen()
Dim CurrComps As Integer
Dim Name As String
Dim Param As String
Dim ParamArr() As String
Dim ParamArrSibling() As String
'Code file for write
Open "Projects\src\frmCode.bas" For Output Shared As #2
'Read in all components
Open "Projects\UIform\frmUI.frm" For Input Shared As #1
Do While Not EOF(1)
Input #1, Param
ParamArr = Split(Param, "=")
Select Case ParamArr(0)
Case "UIschemar"
Print #2, "CREATE" + Space(1) + "Design" + Space(1) + "AS QFORM"
ParamArrSibling = Split(ParamArr(1), "-")
Print #2, Space(4) + "Width" + Space(1) + "=" + Space(1) + Format$((Val(ParamArrSibling(0)) / TPPPx), "#############")
Print #2, Space(4) + "Height" + Space(1) + "=" + Space(1) + Format$((Val(ParamArrSibling(1)) / TPPPy), "#############")
CurrComps = 0
Case "Name.Index"
CurrComps = CurrComps + 1
ParamArrSibling = Split(ParamArr(1), ".")
Name = ParamArrSibling(0)
If CurrComps > 1 Then
Print #2, Space(4) + "END CREATE"
End If
If Name = "Label" Then
Print #2, Space(4) + "CREATE" + Space(1) + "Label" + ParamArrSibling(1) + Space(1) + "AS QLABEL"
ElseIf Name = "TextBox" Then
Print #2, Space(4) + "CREATE" + Space(1) + "Edit" + ParamArrSibling(1) + Space(1) + "AS QEDIT"
ElseIf Name = "Button" Then
Print #2, Space(4) + "CREATE" + Space(1) + "Button" + ParamArrSibling(1) + Space(1) + "AS QBUTTON"
End If
Case "Caption"
If Name = "Label" Then
Print #2, Space(8) + "Caption" + Space(1) + "=" + Space(1) + """" + ParamArr(1) + """"
ElseIf Name = "TextBox" Then
Print #2, Space(8) + "Text" + Space(1) + "=" + Space(1) + """" + ParamArr(1) + """"
ElseIf Name = "Button" Then
Print #2, Space(8) + "Caption" + Space(1) + "=" + Space(1) + """" + ParamArr(1) + """"
End If
Case "Width"
Print #2, Space(8) + "Width" + Space(1) + "=" + Space(1) + Format$((Val(ParamArr(1)) / TPPPx), "#############")
Case "Height"
Print #2, Space(8) + "Height" + Space(1) + "=" + Space(1) + Format$((Val(ParamArr(1)) / TPPPy), "#############")
Case "Left"
Print #2, Space(8) + "Left" + Space(1) + "=" + Space(1) + Format$((Val(ParamArr(1)) / TPPPx), "#############")
Case "Top"
Print #2, Space(8) + "Top" + Space(1) + "=" + Space(1) + Format$((Val(ParamArr(1)) / TPPPy), "#############")
Case "FontSize"
Print #2, Space(8) + "Font.Size" + Space(1) + "=" + Space(1) + ParamArr(1)
End Select
Loop
Close #1
Print #2, Space(4) + "END CREATE"
Print #2, "END CREATE"
Print #2,
Print #2, "'Insert your initialization code here"
Print #2,
Print #2, "Design.ShowModal"
Close #2
End Sub
'Call for conversion of Twips vs Pixel.
Function TwipsPerPixelX() As Single
'--------------------------------------------------
'Returns the width of a pixel, in twips.
'--------------------------------------------------
Dim lngDC As Long
lngDC = GetDC(HWND_DESKTOP)
TwipsPerPixelX = 1440& / GetDeviceCaps(lngDC, LOGPIXELSX)
TPPPx = TwipsPerPixelX
ReleaseDC HWND_DESKTOP, lngDC
End Function
Function TwipsPerPixelY() As Single
'--------------------------------------------------
'Returns the height of a pixel, in twips.
'--------------------------------------------------
Dim lngDC As Long
lngDC = GetDC(HWND_DESKTOP)
TwipsPerPixelY = 1440& / GetDeviceCaps(lngDC, LOGPIXELSY)
TPPPy = TwipsPerPixelY
ReleaseDC HWND_DESKTOP, lngDC
End Function
组件选择模板代码
Option Explicit
Private Sub Command1_Click()
Command1.Enabled = False
Design.UIwriteout
Command1.Enabled = True
End Sub
Private Sub Command2_Click()
Command2.Enabled = False
Design.UIreadin
Command2.Enabled = True
End Sub
Private Sub Command3_Click()
Command3.Enabled = False
Design.Codegen
Command3.Enabled = True
End Sub
Private Sub CompPal_Click(Index As Integer)
Design.CaretsHide
Design.CompFocusNone
CompSel(Index).Value = True
CompSelID = Index
End Sub
Private Sub CompSel_Click(Index As Integer)
Design.CaretsHide
CompSel(Index).Value = True
CompSelID = Index
EditableFlag = False
CompProps.Label1.BackColor = RGB(255, 0, 0)
End Sub
Private Sub Form_Load()
CompSel(0).Value = True
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = 1
'Design.MainQuit
End Sub
属性列表窗体代码
Option Explicit
Private Sub Command1_Click()
If EditableFlag = False Then
Exit Sub
End If
If Trim(Text1.Text) <> "" Then
MSFlexGrid1.Text = Text1.Text
'Update components inner array
UIComps(Val(MSFlexGrid1.TextMatrix(1, 1))).Name = MSFlexGrid1.TextMatrix(2, 1)
UIComps(Val(MSFlexGrid1.TextMatrix(1, 1))).Caption = MSFlexGrid1.TextMatrix(3, 1)
UIComps(Val(MSFlexGrid1.TextMatrix(1, 1))).Width = Val(MSFlexGrid1.TextMatrix(4, 1))
UIComps(Val(MSFlexGrid1.TextMatrix(1, 1))).Height = Val(MSFlexGrid1.TextMatrix(5, 1))
UIComps(Val(MSFlexGrid1.TextMatrix(1, 1))).Left = Val(MSFlexGrid1.TextMatrix(6, 1))
UIComps(Val(MSFlexGrid1.TextMatrix(1, 1))).Top = Val(MSFlexGrid1.TextMatrix(7, 1))
'Update visual components
Design.CompDisplay(Val(MSFlexGrid1.TextMatrix(1, 1))).Caption = MSFlexGrid1.TextMatrix(3, 1)
Design.CompDisplay(Val(MSFlexGrid1.TextMatrix(1, 1))).Width = Val(MSFlexGrid1.TextMatrix(4, 1))
Design.CompDisplay(Val(MSFlexGrid1.TextMatrix(1, 1))).Height = Val(MSFlexGrid1.TextMatrix(5, 1))
Design.CompDisplay(Val(MSFlexGrid1.TextMatrix(1, 1))).Left = Val(MSFlexGrid1.TextMatrix(6, 1))
Design.CompDisplay(Val(MSFlexGrid1.TextMatrix(1, 1))).Top = Val(MSFlexGrid1.TextMatrix(7, 1))
End If
End Sub
Private Sub Form_Load()
EditableFlag = False: Label1.BackColor = RGB(255, 0, 0)
MSFlexGrid1.Cols = 2
MSFlexGrid1.Rows = 8
MSFlexGrid1.FixedRows = 3
MSFlexGrid1.AllowUserResizing = flexResizeColumns
MSFlexGrid1.ColAlignment(1) = flexAlignLeftCenter
MSFlexGrid1.RowHeight(0) = 400
MSFlexGrid1.RowHeight(1) = 400
MSFlexGrid1.RowHeight(2) = 400
MSFlexGrid1.RowHeight(3) = 400
MSFlexGrid1.RowHeight(4) = 400
MSFlexGrid1.RowHeight(5) = 400
MSFlexGrid1.RowHeight(6) = 400
MSFlexGrid1.RowHeight(7) = 400
MSFlexGrid1.ColWidth(0) = 2000
MSFlexGrid1.ColWidth(1) = 3500
gridTitle
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = 1
End Sub
Private Sub MSFlexGrid1_EnterCell()
If MSFlexGrid1.TextMatrix(1, 1) = "" Then
Exit Sub
End If
Text1.Text = MSFlexGrid1.Text
EditableFlag = True: Label1.BackColor = RGB(0, 255, 0)
End Sub
Sub gridTitle()
MSFlexGrid1.TextMatrix(0, 1) = "Properties"
MSFlexGrid1.TextMatrix(1, 0) = "Index"
MSFlexGrid1.TextMatrix(2, 0) = "Name"
MSFlexGrid1.TextMatrix(3, 0) = "Caption"
MSFlexGrid1.TextMatrix(4, 0) = "Width"
MSFlexGrid1.TextMatrix(5, 0) = "Height"
MSFlexGrid1.TextMatrix(6, 0) = "Left"
MSFlexGrid1.TextMatrix(7, 0) = "Top"
End Sub
全部代码都齐了,还有一个.res文件是vb6编译时用于感知DPI和做xp样式用的,直接作为资源文件加到项目中即可。
源代码打包上传到CSDN了