首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

VB6 TextBox 行距調整:原生不支持,需自繪或 ActiveX 替代方案

     編輯:程式設計疑難解答

直接回答

VB6 原生 TextBox 控件不支持設置行距屬性。 其內部由 Windows EDIT 控件實現,行距由字體大小固定決定,無 API 可調整行間距。

可行替代方案

方案一:RichTextBox 控件(Microsoft Rich Textbox Control 6.0)

  • 支持 SelParagraphSpacing 屬性(Twips 單位)設置段前/段後間距。
  • 代碼示例:
    RichTextBox1.SelParagraphSpacing = 200 ' 段後間距 200 Twips = 10.58 pt
    RichTextBox1.SelParagraphSpacingBefore = 100 ' 段前間距
    
  • 缺點:功能較重,僅為調整行距引入過重依賴。

方案二:自繪 UserControl(推薦輕量)

  1. 創建 UserControl,繪製文本區域。
  2. 使用 DrawText API 配合 DT_WORDBREAK、DT_CALCRECT 計算行高。
  3. 在繪製循環中手動添加行間距:y = y + lineHeight + extraLineSpacing。
  4. 處理滾動、選中、編輯等交互(工作量大)。

方案三:調用 C++ 編寫的 ActiveX 控件(原回答思路)

  • 用 ATL/WTL 編寫輕量編輯控件,暴露 LineSpacing 屬性。
  • VB6 以 CreateObject 或拖放引用使用。
  • 優點:性能好、功能全;缺點:需 C++ 技能、部署需註冊 DLL。

方案四:模擬行距(無編輯需求時)

  • 若僅顯示文本,用多個 Label 控件垂直排列,Top = Top + Height + Gap。
  • 或用 ListView 控件 Report 視圖,每行一項,調整行高(SendMessage hWnd, LVM_SETITEMHEIGHT, 0, ByVal newHeight)。

VB6 開發建議

  1. 優先用 RichTextBox:零代碼修改屬性即可,滿足 90% 場景。
  2. 避免純 VB 重繪 EDIT 控件:子類化 WM_PAINT 极易導致閃爍、輸入法失效、崩潰。
  3. 考慮遷移至 VB.NET / WinForms:TextBox 不支持,但 RichTextBox、DataGridView、第三方控件(如 FastColoredTextBox)完美支持行距。

總結

VB6 TextBox **無行距屬性**,底層 EDIT 控件不支持。**RichTextBox 是最省事方案**;需高性能自定義編輯器請用 C++ ActiveX;單純顯示用 Label/ListView 模擬。別在 VB6 純代碼層面硬改 EDIT 控件繪製,坑太深。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved