FreeBasic
Главная
Вход
Регистрация
Вторник, 12.11.2024, 23:19Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
StatusBar
VitaminДата: Среда, 08.02.2017, 12:19 | Сообщение # 1
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
При многократной смене текста в StatusBar функцией SetStatusBarField, не срабатывает. Функция не рабочая или я что-то делаю не так?

Пример из справки немного дополненный:
Код
#Include "window9.bi"
Dim As HWND hwnd
hwnd=OpenWindow("Test",10,10,500,500)
StatusBarGadget(1,"StatusBarGadget")

SetStatusBarField(1,0,100,"one") ' первый раз все срабатывают
SetStatusBarField(1,1,200,"two")
SetStatusBarField(1,2,-1,"three")

Sleep 1000
SetStatusBarField(1,0,100,"one2")
SetStatusBarField(1,1,200,"two2")
SetStatusBarField(1,2,-1,"three2") ' не сработал

Sleep 1000
SetStatusBarField(1,0,100,"one3")
SetStatusBarField(1,1,-1,"two3") ' не сработал

Sleep 1000
SetStatusBarField(1,0,-1,"one4") ' не сработал

Do
 Var event=WaitEvent()
 If Event=EventClose Then End
Loop


Сообщение отредактировал Vitamin - Среда, 08.02.2017, 12:24
 
haavДата: Среда, 08.02.2017, 13:42 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Репутация: 49
Статус: Offline
Цитата Vitamin ()
Функция не рабочая или я что-то делаю не так?


Ошибка в логике работы функции. Сама функция должна создавать новые вкладки и менять текст и длину существующих. То есть она не умеет уменьшать кол-во вкладок. То есть, если мы создали 3 вкладки, то мы можем добавить больше (4,5,6...), но уменьшить кол-во не можем. Если нужно уменьшить кол-во вкладок, то надо удалять старый гаджет и создавать новый.
Но , как оказалось в логике работы функции затесалась ошибка и она даже не может менять то, что задумывалось smile

Может вот такое решение устроит:

Код
Function SetStatusBarField2(ByVal gadget As Integer,ByVal NField As Integer, ByVal Width_ As Integer, ByVal Text As String) As Integer Export
    Dim As Integer Ptr iArray = GetProp(GadgetID(gadget),"STATUSBARARRAY")
    Dim As Integer iNfields = Cast(Integer,GetProp(GadgetID(gadget),"STATUSBARNUMBERFIELDS"))

    If iArray = 0 Then
  iArray = Allocate(250)
  SetProp(GadgetID(gadget),"STATUSBARARRAY",iArray)
  SetProp(GadgetID(gadget),"STATUSBARNUMBERFIELDS",Cast(HANDLE,1))
  iNfields = 1
    Else
  If NField+1>iNfields Then
   iNfields+=1
  EndIf
  
  SetProp(GadgetID(gadget),"STATUSBARNUMBERFIELDS",Cast(Integer Ptr,iNfields))  
    EndIf

    *(iArray+NField) = Width_
    Function = SendMessage(GadgetID(gadget), SB_SETPARTS,Cast(WPARAM,iNfields), Cast(lparam,iArray))
    SendMessage(GadgetID(gadget), SB_SETTEXT ,NField, Cast(LPARAM,StrPtr(Text)))
End Function


По хорошему, конечно бы надо влезать в код либы и править кучу недоделок, но вот никакого вдохновения.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
VitaminДата: Среда, 08.02.2017, 14:06 | Сообщение # 3
Лейтенант
Группа: Пользователи
Сообщений: 59
Репутация: 4
Статус: Offline
С одинаковым количеством вкладок теперь работает как надо.
Спасибо.


Сообщение отредактировал Vitamin - Среда, 08.02.2017, 14:08
 
  • Страница 1 из 1
  • 1
Поиск: