Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
qwertyhp
-
- Продвинутый пользователь
-
-
- Сообщения: 156
- Зарегистрирован: 07.10.2009 (Ср) 15:02
- Откуда: Москва
qwertyhp » 08.08.2018 (Ср) 23:41
Здравствуйте!
На форме есть ListBox и TextBox. TextBox служит для редактирования содержимого ListBox'а, и изменения в TextBox автоматически передаются в ListBox. А при отметке строки в ListBox производится операция с отмеченной строкой.
Вопрос такой:
Можно ли (и если ДА - то как) синхронизировать прокрутку (обе, и в т.ч. мышью) в обоих боксах?
Шрифт везде одинаковый, TextBox - ведущий при прокрутке.
Либо - можно ли добиться в ListBox'е редактирования строк (и отказаться от TextBox)?
Либо - возможно - есть третий вариант решения задачи?
ListBox с CHECK, ось WinXP.
Подскажите, пожалуйста.
Спасибо.
Пятачок Forever!
-
Teranas
-
- Бывалый
-
-
- Сообщения: 224
- Зарегистрирован: 13.12.2008 (Сб) 4:26
- Откуда: Новосибирск
-
Teranas » 09.08.2018 (Чт) 4:27
- Код: Выделить всё
Option Explicit
Private Const LB_GETITEMRECT As Long = &H198
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Private iLst As Long, hLst As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageW" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Sub Text1_Vis(b As Boolean)
Text1.Visible = b
Text1.Enabled = b
End Sub
Private Sub Form_Load()
Dim i As Long
iLst = -1
Text1_Vis False
For i = 0 To 40
List1.AddItem CStr(Fix(Rnd * 9000))
Next
Set Text1.Font = List1.Font
hLst = List1.hWnd
End Sub
Private Sub Text1_SetPos()
Dim RC As RECT
SendMessage hLst, LB_GETITEMRECT, iLst, ByVal VarPtr(RC)
Text1.Left = List1.Left
Text1.Width = (RC.Right - RC.Left) * Screen.TwipsPerPixelY
Text1.Height = (RC.Bottom - RC.Top) * Screen.TwipsPerPixelY
Text1.Top = List1.Top + RC.Top * Screen.TwipsPerPixelY
If Text1.Top < List1.Top Or (Text1.Top + 60) > (List1.Top + List1.Height) Then
Text1_Vis False
End If
End Sub
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
iLst = List1.ListIndex
If iLst < 0 Then Exit Sub
Text1.ZOrder 0
Text1_Vis True
Text1.Text = List1.List(iLst)
Text1_SetPos
Text1.SetFocus
Text1.SelStart = 32700
Text1.SelLength = 0
End Sub
Private Sub List1_Scroll()
If Text1.Visible Then Text1_SetPos
End Sub
Private Sub Text1_KeyUp(KeyCode As Integer, Shift As Integer)
If KeyCode = 27 Then Text1_Vis False
If KeyCode = 13 Then
Text1_Vis False
If iLst >= 0 And iLst < List1.ListCount Then
List1.List(iLst) = Text1.Text
End If
End If
End Sub
С уважением, Андрей.
-
qwertyhp
-
- Продвинутый пользователь
-
-
- Сообщения: 156
- Зарегистрирован: 07.10.2009 (Ср) 15:02
- Откуда: Москва
qwertyhp » 03.09.2018 (Пн) 19:35
Андрей, спасибо огромное за помощь!
Пятачок Forever!
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 18