Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Полоса прокрутки Добавлено: 14.02.09 10:06  

Автор вопроса:  Artful
У меня есть несколько ListBox стоящих рядом, записи записываются одновременно во все... и когда окна не хватает выпадают полосы прокрутки у каждого LisBox. Как сделать так, чтобы выпадала только одна полоса прокрутки (крайняя) и чтобы ее прокрутка воздействовала на все ListBoxы? Помогите, пожалуйста!!!

Ответить

  Ответы Всего ответов: 9  

Номер ответа: 1
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #1
Добавлено: 14.02.09 13:55
просто. сделай, чтобы каждый следущий лист бокс перекрывал предыдущий примерно на ширину полосы прокрутки. В событиях крайнего листобокса Scroll и каком-то еще, выставляй остальным листбоксам TopIndex такой же как у крайнего

Ответить

Номер ответа: 2
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #2 Добавлено: 14.02.09 16:11
Winand, наверное правильнее это будет через свою процедуру окна сделать, а не ждать VBшного события скрул.

Ответить

Номер ответа: 3
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #3 Добавлено: 14.02.09 18:10
несколько ListBox стоящих рядом, записи записываются одновременно во все
Дежа-вю, не иначе... Надо ли иметь эти
несколько ListBox
согласованных , не проще ли иметь один (ListBox), поройся на форуме буквально за последние 1-2 иесяца - найдешь ответ. Не нашел - дай сигнал, попробую подсказать.

Ответить

Номер ответа: 4
Автор ответа:
 Artful



Вопросов: 4
Ответов: 5
 Профиль | | #4 Добавлено: 15.02.09 10:30
все сделал... только, проблема: когда прокручиваешь полосу прокрутки держа ее кнопкой мышки все нормально, а когда прокручиваю колесиком мышки, то прокручивается только один listbox, может тут происходит какое то другое событие, подскажите пожалуйста?

Ответить

Номер ответа: 5
Автор ответа:
 fAndOrIn



Вопросов: 5
Ответов: 344
 Профиль | | #5 Добавлено: 15.02.09 11:47
Включи Timer и проверяй (устанавливай)TopIndex-ы раз десять в секунду...

Ответить

Номер ответа: 6
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #6 Добавлено: 15.02.09 15:04
это лишнее, трех раз в секунду предостаточно

Ответить

Номер ответа: 7
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #7 Добавлено: 15.02.09 18:07
Есть и такой вариант, бросаешь на форму три листбокса и этот код

  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4.     OldList1Proc = SetWindowLong(List1.hWnd, -4&, AddressOf List1Proc)  'перенаправить обработку событий
  5.     OldList2Proc = SetWindowLong(List2.hWnd, -4&, AddressOf List2Proc)  'перенаправить обработку событий
  6.     OldList3Proc = SetWindowLong(List3.hWnd, -4&, AddressOf List3Proc)  'перенаправить обработку событий
  7. End Sub
  8.  
  9. Private Sub Form_Unload(Cancel As Integer)
  10.     Call SetWindowLong(List1.hWnd, -4&, OldList1Proc)                   'восстановить обработку событий
  11.     Call SetWindowLong(List2.hWnd, -4&, OldList2Proc)                   'восстановить обработку событий
  12.     Call SetWindowLong(List3.hWnd, -4&, OldList3Proc)                   'восстановить обработку событий
  13. End Sub


добавляешь модуль и в него этот код

  1. Option Explicit
  2.  
  3. Public Declare Function CallWindowProc Lib "user32.dll" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  4. Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
  5. Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
  6.  
  7. Public OldList1Proc As Long
  8. Public OldList2Proc As Long
  9. Public OldList3Proc As Long
  10.  
  11. Public Function List1Proc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  12.     List1Proc = CallWindowProc(OldList1Proc, hWnd, wMsg, wParam, lParam)
  13.     If wMsg = 522 Or wMsg = 277 Or wMsg = 256 Or wMsg = 513 Then
  14.         CallWindowProc OldList2Proc, Form1.List2.hWnd, wMsg, wParam, lParam
  15.         CallWindowProc OldList3Proc, Form1.List3.hWnd, wMsg, wParam, lParam
  16.     End If
  17. End Function
  18.  
  19. Public Function List2Proc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  20.     If wMsg = 522 Or wMsg = 277 Or wMsg = 256 Or wMsg = 513 Then
  21.         CallWindowProc OldList1Proc, Form1.List1.hWnd, wMsg, wParam, lParam
  22.         List2Proc = CallWindowProc(OldList2Proc, hWnd, wMsg, wParam, lParam)
  23.         CallWindowProc OldList3Proc, Form1.List3.hWnd, wMsg, wParam, lParam
  24.     Else: List2Proc = CallWindowProc(OldList2Proc, hWnd, wMsg, wParam, lParam)
  25.     End If
  26. End Function
  27.  
  28. Public Function List3Proc(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  29.     If wMsg = 522 Or wMsg = 277 Or wMsg = 256 Or wMsg = 513 Then
  30.         CallWindowProc OldList1Proc, Form1.List1.hWnd, wMsg, wParam, lParam
  31.         CallWindowProc OldList2Proc, Form1.List2.hWnd, wMsg, wParam, lParam
  32.     End If
  33.     List3Proc = CallWindowProc(OldList3Proc, hWnd, wMsg, wParam, lParam)
  34. End Function


Это я так от делать нечего для разнообразия подкинул, попробуй если будет время.

Ответить

Номер ответа: 8
Автор ответа:
 Winand



Вопросов: 87
Ответов: 2795
 Web-сайт: winandfx.narod.ru
 Профиль | | #8
Добавлено: 17.02.09 00:55
Smith, конечно же я привел не правильный пример. На самом деле он настолько плох имхо, что дальше некуда=)) зато оочень просто.
И вообще пишите на C++/Qt. Это классно)

Ответить

Номер ответа: 9
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #9 Добавлено: 17.02.09 10:49
Как сделать так, чтобы выпадала только одна полоса прокрутки (крайняя) и чтобы ее прокрутка воздействовала на все ListBoxы?
А не гемор ли, а? Как насчет ListView?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам