PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Горизонтальное выравнивание в ячейках ListIconGadget ?


Горизонтальное выравнивание в ячейках ListIconGadget ?

Сообщений 1 страница 8 из 8

1

В хелпе не нашел.
Все прижимается к левому краю - а надо по центру и к правому.

0

2

http://www.purearea.net/pb/CodeArchiv/G … e+right.pb

Код:
#Gadget_ListView = 0 

ListViewSpalte.LV_COLUMN 
ListViewSpalte\mask = #LVCF_FMT 

If OpenWindow(0,0,0,300,100, "",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  If CreateGadgetList(WindowID(0)) 
    ListViewHandle = ListIconGadget(#Gadget_ListView,0,0,300,100, "1", 100, #PB_ListIcon_GridLines) 
    AddGadgetColumn(#Gadget_ListView, 1, "2", 80) 
    AddGadgetColumn(#Gadget_ListView, 2, "3", 80) 
  EndIf 
  
  Spalte = 1 ; Spalte festlegen 
  ListViewSpalte\fmt = #LVCFMT_RIGHT ; Ausrichtung festlegen 
  SendMessage_(ListViewHandle, #LVM_SETCOLUMN, Spalte, @ListViewSpalte) ; Message senden 
  
  Spalte = 2  ; Spalte festlegen 
  ListViewSpalte\fmt = #LVCFMT_CENTER  ; Ausrichtung festlegen 
  SendMessage_(ListViewHandle, #LVM_SETCOLUMN, Spalte, @ListViewSpalte) ; Message senden 
  
  AddGadgetItem(#Gadget_ListView,0,"Links (standart)" + Chr(10) + "Rechts" + Chr(10) + "Mitte") 
  
  Repeat ; 
    EventID=WaitWindowEvent() 
  Until EventID=#PB_Event_CloseWindow 
EndIf 
End

0

3

OK.
Как работающий пример - Мое применение
- в таблице есть только выравнивание по прав.краю (кроме дефолтного по-левому)

Код:
Procedure Open_Window_0()
	Protected ListViewHandle
	Protected ListViewCol.LV_COLUMN ; для управления столбцом
	ListViewCol\mask = #LVCF_FMT
	
	If OpenWindow(#Window_0, ....)
    ;-
    ListViewCol\fmt = #LVCFMT_RIGHT ; выравнивать по правому краю
    ListViewHandle = ListIconGadget(#w0ListIcon_0, 20, 30, 700, 310, "ID", 50,#PB_ListIcon_FullRowSelect|#PB_ListIcon_AlwaysShowSelection|#PB_ListIcon_GridLines )
    SendMessage_(ListViewHandle, #LVM_SETCOLUMN, 0, @ListViewCol) ; Message senden

    AddGadgetColumn(#w0ListIcon_0, 1, "IP", 100)
    AddGadgetColumn(#w0ListIcon_0, 2, "Watch", 60)

    AddGadgetColumn(#w0ListIcon_0, 3, "CopyCounter", 80)
    SendMessage_(ListViewHandle, #LVM_SETCOLUMN, 3, @ListViewCol) ; Message senden 

    AddGadgetColumn(#w0ListIcon_0, 4, "MaxToner", 80)
    SendMessage_(ListViewHandle, #LVM_SETCOLUMN, 4, @ListViewCol) ; Message senden 

    AddGadgetColumn(#w0ListIcon_0, 5, "NowToner", 80)
    SendMessage_(ListViewHandle, #LVM_SETCOLUMN, 5, @ListViewCol) ; Message senden 

    AddGadgetColumn(#w0ListIcon_0, 6, "% Toner", 80)
    SendMessage_(ListViewHandle, #LVM_SETCOLUMN, 6, @ListViewCol) ; Message senden
....

0

4

Код:
If OpenWindow(0,0,0,300,100, "",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
     ListViewHandle = ListIconGadget(1,0,0,300,100, "1", 100, #PB_ListIcon_GridLines) 
    AddGadgetColumn(1, 1, "2", 80) 
    AddGadgetColumn(1, 2, "3", 80) 
  
  AddGadgetItem(1,0,"Links (standart)" + Chr(10) + "Rechts" + Chr(10) + "Mitte") 
  
  Repeat ; 
    EventID=WaitWindowEvent() 
  Until EventID=#PB_Event_CloseWindow 
EndIf 
End

в этом примере как убрать заголовки столбцов, чтоб при этом осталась строка не тронутым?

0

5

Код:
If OpenWindow(0,0,0,300,100, "",#PB_Window_SystemMenu|#PB_Window_ScreenCentered) 
  ListViewHandle = ListIconGadget(1,0,0,300,100, "1", 100, #PB_ListIcon_GridLines|#LVS_NOCOLUMNHEADER) 
  AddGadgetColumn(1, 1, "2", 80) 
  AddGadgetColumn(1, 2, "3", 80) 
  
  AddGadgetItem(1,0,"Links (standart)" + Chr(10) + "Rechts" + Chr(10) + "Mitte") 
  
  Repeat ; 
    EventID=WaitWindowEvent() 
  Until EventID=#PB_Event_CloseWindow 
EndIf 
End

+1

6

Не подскажешь как без заголовок, можно растягивать столбцы?

0

7

вот так питаюсь но не знаю правильно ли делаю, будут ли дальнейшем проблемы

Код:
#ListIcon = 1 
#LVM_GETSUBITEMRECT = #LVM_FIRST+56 
  Procedure IsWindowMouseOver(ID.l)
  Protected hWnd.l
If IsGadget(ID); если Gadget работаем как с GadgetID
    hWnd=GadgetID(ID)
  Else
      ProcedureReturn #False
    EndIf
  
  Protected rc.RECT
  Protected cursorpos.q
  If IsWindowVisible_(hWnd)
    GetCursorPos_(@cursorpos)
    GetWindowRect_(hWnd, @rc)
    ProcedureReturn PtInRect_(@rc, cursorpos)
  Else
    ProcedureReturn #False
  EndIf
EndProcedure
                      
Procedure Callback(Window.l, Message.l, wParam.l, lParam.l) 
  result = #PB_ProcessPureBasicEvents 
  Select Message 
    Case #WM_NOTIFY        ; these events are send as notification messages 
      *pnmh.NMHDR = lParam  ; lParam points to a structure with more info 
      If *pnmh\hwndFrom = GadgetID(#ListIcon) ; see if it is the right gadget 
        Select *pnmh\code  ; code contains actual message 
          Case #LVN_COLUMNCLICK ; user clicked on the Header of a column 
            *pnmv.NMLISTVIEW = lParam ; another info structure 
            Column.l = *pnmv\iSubItem ; clicked column
            
            Debug Str(Column) 
            
            
            
          Case #NM_CLICK  ; user clicked in the ListView 
            *lpnmitem.NMITEMACTIVATE = lParam 
            Row.l = *lpnmitem\iItem 
            Column.l = *lpnmitem\iSubItem 
            rc.RECT 
            ; there is also 
            ; #NM_DBLCLK  - doublecklick 
            ; #NM_RCLICK  - right button 
            ; #NM_RDBLCLK - right doubleclick 
            ; they work the same as #NM_CLICK 
           If Column=0
             rc\top = Column+1 
            SendMessage_(*pnmh\hwndFrom, #LVM_GETSUBITEMRECT, Row, rc) 
            ResizeGadget(3,rc\left+5,rc\top,rc\right-rc\left,rc\bottom-rc\top)
            ResizeGadget(5,rc\left,0,5,355)
          Else
            rc\top = Column 
            SendMessage_(*pnmh\hwndFrom, #LVM_GETSUBITEMRECT, Row, rc) 
            ResizeGadget(3,rc\left+5,rc\top,rc\right-rc\left,rc\bottom-rc\top)
            
            ;SendMessage_(*pnmh\hwndFrom,#LVM_SETCOLUMNWIDTH,0,#LVSCW_AUTOSIZE) 
            
            EndIf
        EndSelect 
      EndIf 
  EndSelect 
  ProcedureReturn result 
EndProcedure 

If OpenWindow(0,0,0,400,400, "Listicon test...",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
   ComboBoxGadget(3,0,0,0,0)
   ContainerGadget(5,0,0,0,0,#PB_Container_Single)
   CloseGadgetList()
   
   ListIconGadget(#ListIcon, 10, 10, 380, 380, "Column0",100,#PB_ListIcon_FullRowSelect|#LVS_NOCOLUMNHEADER) 
    ; Fullrowselect must be set, because otherwiese only the first 
    ; column will be clickable 
    AddGadgetColumn(#ListIcon, 1, "Column1", 100) 
    AddGadgetItem(#ListIcon, 0, "Row0"+Chr(10)+"XXX"+Chr(10)+"XXX") 
    AddGadgetItem(#ListIcon, 1, "Row1"+Chr(10)+"XXX"+Chr(10)+"XXX") 
    AddGadgetItem(#ListIcon, 2, "Row2"+Chr(10)+"XXX"+Chr(10)+"XXX") 
    AddGadgetItem(#ListIcon, 3, "Row3"+Chr(10)+"XXX"+Chr(10)+"XXX") 
    
    SetParent_(GadgetID(3),GadgetID(#ListIcon))
   SetParent_(GadgetID(5),GadgetID(#ListIcon))
   SetCursor_( LoadCursor_(GadgetID(5),#IDC_UPARROW	))
   SetWindowCallback(@Callback()) 
    Repeat 
    e=  WaitWindowEvent() 
    If e=#WM_MOUSEMOVE 
     If  IsWindowMouseOver(5)
      
      SetCursor_( LoadCursor_(0,#IDC_SIZEWE))
     
        Debug "на разделителе"
     SendMessage_(GadgetID(#ListIcon),#LVM_SETCOLUMNWIDTH,0,255)
   
     EndIf
   EndIf  
    Until e = #PB_Event_CloseWindow 
 
EndIf 
End

0

8

После долгого перерыва пришлось вернуться к этому вопросу.
Сделал процедуру чтобы забыть навсегда. И поместил ее в файл ListIconAlligment.pbi

Procedure ListIconAlligment(id, Alligment$)
;Alligment$ = "rrcll" ;[one character]=[one column]; R=Right, L=Left, C=Center
;id=GadgetID(#ListIcon_0)
Protected ListViewHandle=id, i
Protected ListViewCol.LV_COLUMN ; для управления столбцом
ListViewCol\mask = #LVCF_FMT

Alligment$=UCase(Alligment$) ;большие буквы
For i=1 To Len(Alligment$)
    Select Mid(Alligment$,i,1) ; одна буква
    Case "R"
        ListViewCol\fmt = #LVCFMT_RIGHT ; выравнивать по правому краю
    Case "C"
        ListViewCol\fmt = #LVCFMT_CENTER
    Case "L"
        ListViewCol\fmt = #LVCFMT_LEFT
    Default
        ListViewCol\fmt = #LVCFMT_LEFT
    EndSelect
    SendMessage_(ListViewHandle, #LVM_SETCOLUMN, i-1, @ListViewCol)
   
Next

EndProcedure

0


Вы здесь » PureBasic - форум » Вопросы по PureBasic » Горизонтальное выравнивание в ячейках ListIconGadget ?