StatusBar
|
|
Vitamin | Дата: Среда, 08.02.2017, 12:19 | Сообщение # 1 |
Лейтенант
Группа: Пользователи
Сообщений: 59
Статус: 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 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Цитата Vitamin ( ) Функция не рабочая или я что-то делаю не так?
Ошибка в логике работы функции. Сама функция должна создавать новые вкладки и менять текст и длину существующих. То есть она не умеет уменьшать кол-во вкладок. То есть, если мы создали 3 вкладки, то мы можем добавить больше (4,5,6...), но уменьшить кол-во не можем. Если нужно уменьшить кол-во вкладок, то надо удалять старый гаджет и создавать новый. Но , как оказалось в логике работы функции затесалась ошибка и она даже не может менять то, что задумывалось
Может вот такое решение устроит:
Код 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
Статус: Offline
| С одинаковым количеством вкладок теперь работает как надо. Спасибо.
Сообщение отредактировал Vitamin - Среда, 08.02.2017, 14:08 |
|
| |
|