Фантомная подпись по умолчанию в текстовом поле VB6 - PullRequest
1 голос
/ 06 апреля 2011

Как я могу сделать это в VB6.0 ...

В текстовом поле есть заголовок по умолчанию, когда он пуст, скажем, "Введите имя здесь". но когда пользователь заполняет, заголовок будет заменен ...

Ответы [ 4 ]

7 голосов
/ 06 апреля 2011

В Windows API встроено баннеров-подсказок (или текст подсказки), встроенных в Windows XP.VB 6 не оказывает на него непосредственного влияния, но это не мешает вам сделать это, сделав несколько вызовов API.

Существует несколько преимуществ использования этого маршрута по сравнению с реализацией собственного пользовательского стиля.С одной стороны, он уже доступен бесплатно, а это значит, что для его использования вам нужно проделать совсем немного работы.Во-вторых, он уже полностью протестирован и профессионально отполирован.В-третьих, он будет автоматически получать обновления всякий раз, когда выйдет следующая версия Windows.

Весь необходимый вам код доступен здесь: SendMessage: используйте баннеры Cue для запроса пользователей

Как объясняется на странице, вам необходимо убедиться, что вы включили манифест с вашим EXE-файлом, чтобы вы могли воспользоваться преимуществами тем и функций Windows XP.Единственная сложность в коде заключается в том, что вам нужно убедиться, что вы пропустили строку Unicode .

Окончательный эффект выглядит примерно так:

Cue Banner sample

2 голосов
/ 06 апреля 2011

, если вы хотите использовать значение по умолчанию в текстовом поле, пока пользователь не выберет поле для начала ввода:

используйте событие GotFocus () для вашего текстового поля и вставьте следующее в качестве кода: txtName.text = ""

в событии LostFocus () используется:

If txtName.text = "" Then
txtName.text = "Enter Name Here"
End If
0 голосов
/ 06 апреля 2011

Родной win32 Альтернатива:

Private Const ECM_FIRST As Long = &H1500
Private Const EM_SETCUEBANNER As Long = (ECM_FIRST + 1)

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function InitCommonControls Lib "comctl32" () As Long

Private Sub Form_Initialize()
    InitCommonControls
End Sub

Private Sub Form_Load()
    Dim sCueCaption As String
    sCueCaption = StrConv("Enter Name Here", vbUnicode)
    Call SendMessage(Text1.hwnd, EM_SETCUEBANNER, 0&, ByVal sCueCaption)
End Sub

Для этого требуется манифест, поэтому следующее значение сохраняется как "<exename>.exe.manifest" (также можно использовать ресурс)

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly
   xmlns="urn:schemas-microsoft-com:asm.v1"
   manifestVersion="1.0">
   <assemblyIdentity
      type="win32"
      processorArchitecture="*"
      version="6.0.0.0"
      name="test"
   />
   <description>Enter your Description Here</description>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity
            type="win32"
            name="Microsoft.Windows.Common-Controls"
            version="6.0.0.0"
            language="*"
            processorArchitecture="*"
            publicKeyToken="6595b64144ccf1df"
         />
      </dependentAssembly>
   </dependency>
</assembly>
0 голосов
/ 06 апреля 2011
Private Sub Text1_Change()  
If Trim(Text1.Text) = "" Then
Label1.Caption = "Enter Name Here"
Else
Label1.Caption = ""
End If
End Sub

Private Sub Text1_Click()
Label1.Caption = "Enter Name Here"
End Sub

Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)
If Trim(Text1.Text) = "" Then
 Label1.Caption = "Enter Name Here"
Else
 Label1.Caption = ""
 End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...