Winmag | Дата: Воскресенье, 03.11.2019, 10:41 | Сообщение # 1 |
Рядовой
Группа: Пользователи
Сообщений: 3
Статус: Offline
| Привет, задача найти определенный текст в ListViewGadget и сделать данный item видимым, найти и выделить это не проблема в библиотеке windows9, но как прокрутить программно данный listview что определенный item стал видимым? Добавлено (03.11.2019, 11:12) --------------------------------------------- Нашел только вот этот вариант https://www.purebasic.fr/english/viewtopic.php?p=486835 на purebasic но при написании данного листинга на freebasic, не происходит пролистывание
|
|
| |
haav | Дата: Воскресенье, 03.11.2019, 15:14 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Как один из вариантов:
Код #Include "window9.bi"
#Define constSizeIcon 32
sub SetTopIndexListview( iGadget as long , iItem as long ) #Ifdef __FB_WIN32__ SetFocus(GadgetID(iGadget)) #Else gtk_widget_grab_focus(GadgetID(iGadget)) #EndIf SetSelectListViewItem(1,iItem) #Ifdef __FB_WIN32__ SendMessage(GadgetID(iGadget), LVM_SCROLL, 0, iItem*constSizeIcon) #Else dim as GtkWidget ptr listbox = GadgetId(iGadget) dim as long iCountItems = GetItemCountListView(iGadget) dim as any ptr pVertAdj dim as long iAdjValue , iUpper , iPageSize , hSingleLine , hRest , iNewPosition pVertAdj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(gtk_widget_get_parent(listbox))) iAdjValue = gtk_adjustment_get_value(pVertAdj) iUpper = gtk_adjustment_get_upper(pVertAdj) iPageSize = gtk_adjustment_get_page_size(pVertAdj) hSingleLine = iUpper/iCountItems iNewPosition = hSingleLine * iItem gtk_adjustment_set_value (pVertAdj, iNewPosition) #EndIf End sub
CenterWindow(OpenWindow("",10,10,300,360)) UpdateInfoXserver() ListViewGadget(1,10,10,150,300,,,,constSizeIcon) AddListViewColumn(1, "1 Столбец",0,0,133)
For aa As Integer=0 To 15 AddListViewItem(1,"item ?"+Str(aa),0,aa,0) Next
#Ifdef __FB_WIN32__ ButtonGadget(2,190,10,100,60,"Установим 6 пункт первым видимым",BS_MULTILINE) #Else ButtonGadget(2,190,10,100,60,!"Установим 6\nпункт первым\nвидимым") #EndIf
Do Var event=WaitEvent Select Case event Case EventClose End Case EventGadget If EventNumber=2 Then SetTopIndexListview(1,6) endif End Select Loop
Не знаю , как этот код поведет себя при различных ситуациях (например при изменении шрифта). В общем тут уже сам тестируй и думай что к чему.
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |