FreeBasic
Главная
Вход
Регистрация
Вторник, 12.11.2024, 21:59Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Изменение цвета ячейки в таблице
WQДата: Четверг, 04.09.2014, 22:17 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Вот такой код:

Цитата

#Include Once "inc/iup.bi"
#Include Once "inc/iupcontrols.bi"
'#Include Once "inc/iupcd.bi"

Sub _init_ Constructor
IupOpen(0,0)
IupControlsOpen()
End Sub

Sub _exit_ Destructor
IupClose()
End Sub

Function button_press (c As Ihandle Ptr, a As Integer, b As Integer) As Integer
? a, b
'IupSetAttribute(c, "FGCOLOR" & a & ":" & b, "255 0 0")
IupStoreAttribute(c,"FGCOLOR" & a & ":" & b,"255 0 0")
Return IUP_DEFAULT
End Function

Function create_mat() As Ihandle Ptr
Dim As Ihandle Ptr mat = IupMatrix(NULL)

IupSetAttribute(mat, "NUMCOL", "1")
IupSetAttribute(mat, "NUMLIN", "3")
IupSetAttribute(mat, "NUMCOL_VISIBLE", "1")
IupSetAttribute(mat, "NUMLIN_VISIBLE", "3")
IupSetAttribute(mat, "EXPAND", "NO")
IupSetAttribute(mat, "SCROLLBAR", "NO")

IupSetAttribute(mat, "0:0", "Inflation")
IupSetAttribute(mat, "1:0", "Medicine ")
IupSetAttribute(mat, "2:0", "Food")
IupSetAttribute(mat, "3:0", "Energy")
IupSetAttribute(mat, "0:1", "January 2000")
IupSetAttribute(mat, "1:1", "5.6")
IupSetAttribute(mat, "2:1", "2.2")
IupSetAttribute(mat, "3:1", "7.2")

IupSetAttribute(mat,"BGCOLOR1:0", "255 128 0")
IupSetAttribute(mat,"BGCOLOR2:1", "255 128 0")
IupSetAttribute(mat,"FGCOLOR2:0", "100 0 128")
IupSetAttribute(mat,"FGCOLOR1:1", "255 0 128")

IupSetCallback(mat, "CLICK_CB", Cast(Icallback,@button_press))
Return mat
End Function

Sub func_1 ()
Dim As Ihandle Ptr _cbox, dlg, hbox

_cbox = IupCbox(create_mat(), NULL)
'IupSetAttribute(_cbox,"SIZE","480x200")

hbox = IupSetAttributes(IupHbox(_cbox, NULL), MARGIN=10x10")

dlg = IupDialog(hbox)
IupSetHandle("dlg",dlg)
IupSetAttribute(dlg,"TITLE","Cbox Test")

End Sub

func_1()
IupShowXY(IupGetHandle("dlg"),IUP_CENTER,IUP_CENTER)
IupMainLoop()


По логике, при клике по ячейке должен меняться цвет текста этой ячейки - а в реале это происходит только после 2-клика по любой редактируемой ячейке.
 
haavДата: Пятница, 05.09.2014, 07:58 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Репутация: 49
Статус: Offline
Попробуй так:


Код
....
Function button_press (c As Ihandle Ptr, a As Integer, b As Integer) As Integer
      ? a, b
      IupSetAttribute(c, "FGCOLOR" & a & ":" & b, "255 0 0")      
      IupUpdate (c)
      Return IUP_DEFAULT
End Function
.....


Че-то оф. сайт не доступен, а вся дока там.

Добавлено позже:

Я и забыл, ведь документацию я выкладывал на своем сайте: http://free-basic.ru/user-files/IUPDocs.zip


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Суббота, 06.09.2014, 12:16 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Спасибо!
Теперь бы еще разобраться, можно ли встроить окно, созданное IUP, как дочернее, в окно, созданное через WinApi. Очень нужна такая табличка.
Обратный пример нашел
 
haavДата: Суббота, 06.09.2014, 14:05 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 1372
Репутация: 49
Статус: Offline
Цитата WQ ()
Спасибо!Теперь бы еще разобраться, можно ли встроить окно, созданное IUP, как дочернее, в окно, созданное через WinApi. Очень нужна такая табличка.
Обратный пример нашел

Конечно можно:


Код
#Include Once "IUP/iup.bi"
#Include Once "IUP/iupcontrols.bi"
#Include Once "windows.bi"
'#Include Once "inc/iupcd.bi"

Sub _init_ Constructor
     IupOpen(0,0)
     IupControlsOpen()
End Sub

Sub _exit_ Destructor
     IupClose()
End Sub

Function button_press (c As Ihandle Ptr, a As Integer, b As Integer) As Integer
     IupStoreAttribute(c,"FGCOLOR" & a & ":" & b,"255 0 0")
     IupUpdate (c)
     Return IUP_DEFAULT
End Function

Function windowproc(hwnd As HWND,msg As UINT,wParam As WPARAM,lParam As LPARAM) As Integer
     Select Case msg
         Case WM_DESTROY
             PostQuitMessage(0)
     End Select
     Return DefWindowProc(hwnd,msg,wparam,lparam)
End Function

Function create_mat() As Ihandle Ptr
     Dim As Ihandle Ptr mat = IupMatrix(NULL)

     IupSetAttribute(mat, "NUMCOL", "1")
     IupSetAttribute(mat, "NUMLIN", "3")
     IupSetAttribute(mat, "NUMCOL_VISIBLE", "1")
     IupSetAttribute(mat, "NUMLIN_VISIBLE", "3")
     IupSetAttribute(mat, "EXPAND", "NO")
     IupSetAttribute(mat, "SCROLLBAR", "NO")

     IupSetAttribute(mat, "0:0", "Inflation")
     IupSetAttribute(mat, "1:0", "Medicine ")
     IupSetAttribute(mat, "2:0", "Food")
     IupSetAttribute(mat, "3:0", "Energy")
     IupSetAttribute(mat, "0:1", "January 2000")
     IupSetAttribute(mat, "1:1", "5.6")
     IupSetAttribute(mat, "2:1", "2.2")
     IupSetAttribute(mat, "3:1", "7.2")

     IupSetAttribute(mat,"BGCOLOR1:0", "255 128 0")
     IupSetAttribute(mat,"BGCOLOR2:1", "255 128 0")
     IupSetAttribute(mat,"FGCOLOR2:0", "100 0 128")
     IupSetAttribute(mat,"FGCOLOR1:1", "255 0 128")

     IupSetCallback(mat, "CLICK_CB", Cast(Icallback,@button_press))
     Return mat
End Function

Function main Cdecl (frame As IHandle Ptr) As Integer
     Dim As HWND hParent = CPtr(HWND,IupGetAttribute(frame,"WID"))
     Dim As hwnd hwnd = CreateWindowEx(0,"#32770","Главное окно",WS_VISIBLE Or WS_OVERLAPPEDWINDOW,100,100,300,300,0,0,0,0)
     SetWindowLong(hwnd,GWL_WNDPROC,@windowproc)
     SetParent(hParent,hwnd)
     SetWindowLong(hParent,GWL_STYLE,WS_CHILD Or WS_VISIBLE)
     Return IUP_DEFAULT
End Function

Sub func_1 ()
     Dim As Ihandle Ptr _cbox, dlg, hbox

     _cbox = IupCbox(create_mat(), NULL)
     'IupSetAttribute(_cbox,"SIZE","480x200")

     hbox = IupSetAttributes(IupHbox(_cbox, NULL), "MARGIN=10x10")

     dlg = IupDialog(hbox)
     IupSetHandle("dlg",dlg)
     IupSetCallback(dlg,"MAP_CB"  ,@main)

End Sub

func_1()
IupShowXY(IupGetHandle("dlg"),0,0)

IupMainLoop()


Обычное окно с созданием класса уж сам создашь, я взял имеющиеся в винде диалоговое окно для примера.


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
WQДата: Суббота, 06.09.2014, 17:16 | Сообщение # 5
Полковник
Группа: Проверенные
Сообщений: 215
Репутация: 7
Статус: Offline
Шикарно! Никаких проблем с интеграцией в имеющийся код не возникло.
Даже не подумал, что IupMainLoop() может и цикл While GetMessage заменить.
IUP очень интересная библиотека, если разобраться, то дальше часто проще, чем в WinApi.
Хотелось бы заменить данным видом таблицы ListView. В моей программе их несколько, и со всеми, кроме одного, проблем не возникнет - все нужные функции есть. Но в одном ListView необходимо перетаскивание строк - вроде плей-листа в плеере.
Пока программа написана на Autoit, и код на Winapi огромный, при том, что там удобная библиотека работы с ListView. На FreeBasic, на сколько я могу понять, кода будет гораздо больше, т.к. некоторые функции нужно писать самостоятельно.
И тут я не уверен, так что пока читаю справку IupMatrix.
 
  • Страница 1 из 1
  • 1
Поиск: