news 2026/4/16 17:01:06

试写UI界面设计器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
试写UI界面设计器

简单地,用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了

【免费】简单的UI界面设计程序VB6源代码资源-CSDN下载

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 13:08:20

ChatGLM3-6B-128K快速入门:三步搭建你的AI对话助手

ChatGLM3-6B-128K快速入门&#xff1a;三步搭建你的AI对话助手 【ollama】ChatGLM3-6B-128K镜像提供了一种极简方式&#xff0c;让你无需配置环境、不写一行部署代码&#xff0c;就能在本地运行具备128K超长上下文理解能力的国产大模型。它不是“能跑就行”的演示版&#xff0…

作者头像 李华
网站建设 2026/4/16 13:36:22

5倍提速!软件启动与性能优化完全指南

5倍提速&#xff01;软件启动与性能优化完全指南 【免费下载链接】downkyi 哔哩下载姬downkyi&#xff0c;哔哩哔哩网站视频下载工具&#xff0c;支持批量下载&#xff0c;支持8K、HDR、杜比视界&#xff0c;提供工具箱&#xff08;音视频提取、去水印等&#xff09;。 项目地…

作者头像 李华
网站建设 2026/4/16 13:42:44

5分钟上手Nano-Banana Studio:AI一键生成服装拆解图(附4种风格预设)

5分钟上手Nano-Banana Studio&#xff1a;AI一键生成服装拆解图&#xff08;附4种风格预设&#xff09; 1. 为什么服装设计师需要“拆解图”&#xff1f; 你有没有见过博物馆里那些被精心平铺展开的古董旗袍&#xff1f;每颗盘扣、每道缝线、每片衬布都清晰可见&#xff0c;像…

作者头像 李华
网站建设 2026/4/16 13:35:00

从零开始:Qwen3-ForcedAligner-0.6B语音转录工具完整使用指南

从零开始&#xff1a;Qwen3-ForcedAligner-0.6B语音转录工具完整使用指南 1. 教程目标与适用人群 1.1 学习目标 本文是一份面向零基础用户的全流程实操指南&#xff0c;专为 Qwen3-ForcedAligner-0.6B 镜像设计。你不需要懂语音识别原理&#xff0c;也不需要会写代码——只要…

作者头像 李华
网站建设 2026/4/16 14:18:11

zi2zi:带有条件对抗网络的中国书法大师

原生 pix2pix 无法处理 同一字符对应多种字体风格的一对多问题&#xff0c;zi2zi 通过类别嵌入&#xff08;Category Embedding&#xff09;解决该问题zi2zi 的网络流程是基于 pix2pix 的 U-Net 生成器与 PatchGAN 判别器构建的端到端 CJK 字体条件图像翻译流程&#xff0c;融合…

作者头像 李华
网站建设 2026/4/15 18:16:39

SDXL风格图片生成实战:FLUX.1文生图操作手册

SDXL风格图片生成实战&#xff1a;FLUX.1文生图操作手册 想用AI画出专业水准的图片&#xff0c;但总觉得生成的画面要么太普通&#xff0c;要么风格不对味&#xff1f;今天&#xff0c;我们来聊聊一个能让你轻松驾驭多种艺术风格的“神器”——FLUX.1模型&#xff0c;特别是它…

作者头像 李华