Seite 1 von 1

ListIconGadget Spaltenbreite ändern sperren ?

Verfasst: 03.09.2006 01:16
von Donald
Hi,

kennt jemand den API-Befehl um das ändern einer bestimmten Spaltenbreite zu sperren?

Suche mir schon nen heißen in den APIs, hab alles mögliche gefunden,
aber nichts was das sperren angeht. Vielleicht liegt es ja auch nur daran
das mein englisch so toll ist und nur die hälfte lesen/verstehen kann :cry:

Verfasst: 03.09.2006 02:34
von edel

Verfasst: 03.09.2006 09:03
von real
Hast Du nichts konkreteres? Der Link bringt mich auch nur in eine neue Liste von Suchergebnissen.

Verfasst: 03.09.2006 09:44
von edel
Dir ist schon klar, das google (auch) eine Suchmaschine ist ?


naja hier mal ein kleines Beispiel wie es gehen koennte

Beispiel :

Code: Alles auswählen

  
  Structure HITTESTINFO
    pt.POINT 
    flags.l
    iItem.l
  EndStructure
  
  #HDM_HITTEST    = #HDM_FIRST + 6
  #LVM_GETHEADER  = #LVM_FIRST + 31
  
  #window   = 0
  #listview = 0
  
  Procedure Callback(hwnd,msg,wParam,lParam)
    Protected old = GetWindowLong_(hwnd,#GWL_USERDATA)
    Protected ht.HITTESTINFO
    
    If Not old : ProcedureReturn 0 : EndIf
    
    If msg = #WM_SETCURSOR
      ProcedureReturn 0
    EndIf
    
    If msg = #WM_LBUTTONDBLCLK
      ProcedureReturn 0
    EndIf
    
    If msg = #WM_LBUTTONDOWN
      
      ht\pt\x = lParam & $FFFF 
      ht\pt\y = (lParam >> 16) & $FFFF 

      SendMessage_(hwnd,#HDM_HITTEST,0,@ht)
      
      If (ht\flags & #HHT_ONDIVIDER ) = #HHT_ONDIVIDER 
        ProcedureReturn 0
      EndIf

    EndIf
    
    ProcedureReturn CallWindowProc_(old,hwnd,msg,wParam,lParam)
  EndProcedure
  
  Procedure StopResize(gadget) 
    If IsGadget(gadget)
      Protected Header  = SendMessage_(GadgetID(gadget),#LVM_GETHEADER,0,0)
      Protected old     = SetWindowLong_(Header,#GWL_WNDPROC,@Callback()) 
      ProcedureReturn SetWindowLong_(Header,#GWL_USERDATA,old) 
    EndIf 
  EndProcedure
  
  
  hwnd = OpenWindow(#window,#PB_Ignore,#PB_Ignore,400,400,"")
  
  CreateGadgetList(hwnd)
  
  ListIconGadget(#listview,0,0,400,400,"blub1",150) : StopResize(#listview)
  AddGadgetColumn(#listview,1,"blub2",150)
  
  
  Repeat
    
  Until WaitWindowEvent() = #WM_CLOSE


Verfasst: 04.09.2006 21:36
von Donald
Hi,

so hier noch ein Beispiel, nun können einzelen Spalten bestimmt werden welche no Resize sein sollen.

Was jetzt nur noch fehlt ist das der Cursor bei der gesperrten Spalte nicht mehr anzeigt das man die
Spalte vergrößern kann.

Versucht es mal, vielleicht bekommt es ja jemand hin.

Code: Alles auswählen

;
; for PB 4.00
;
Enumeration 
  #MainWindow = 0 
  #ListIconGadget = 0 
EndEnumeration 

#LVM_GETHEADER = (#LVM_FIRST + 31) 

Global HerderID.l, old.l 

Macro HeaderIDFromGadgetID(GadgetID) 
  SendMessage_(GadgetID, #LVM_GETHEADER, 0, 0) 
EndMacro 

Procedure HeaderCallBack(Window, msg, wParam, lParam) 
  Protected *NotifyMsgInfos.NMHEADER = lParam 
  If msg = #WM_NOTIFY 
    Select *NotifyMsgInfos\hdr\code 
      Case  #HDN_BEGINTRACKA,  #HDN_BEGINTRACKW 
        If *NotifyMsgInfos\hdr\idFrom = HeaderID 
          If *NotifyMsgInfos\iItem = 0       ; zu sperrende Spalte
            ProcedureReturn #True 
          ElseIf *NotifyMsgInfos\iItem = 1   ; zu sperrende Spalte
            ProcedureReturn #True
          Else                      
            ProcedureReturn #False 
          EndIf 
        EndIf 
    EndSelect 
  EndIf
  ProcedureReturn CallWindowProc_(old, Window, msg, wParam, lParam) 
EndProcedure 

;{- Abfrage
If OpenWindow(#MainWindow, 0, 0, 540, 300, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu) 
  If CreateGadgetList(WindowID(#MainWindow)) And ListIconGadget(#ListIconGadget, 10, 10, 520, 280, "Spalte 0", 100, #PB_ListIcon_MultiSelect | #PB_ListIcon_GridLines | #PB_ListIcon_HeaderDragDrop | #PB_ListIcon_FullRowSelect) 
    AddGadgetColumn(#ListIconGadget, 1, "Spalte 1", 100) 
    AddGadgetColumn(#ListIconGadget, 2, "Spalte 2", 300) 
    HerderID = HeaderIDFromGadgetID(GadgetID(#ListIconGadget)) 
    For i = 1 To 10 
      AddGadgetItem(#ListIconGadget, -1, "a"+Str(i) + Chr(10) + "b"+Str(i) + Chr(10) + "c"+Str(i)) 
    Next i 
    old = SetWindowLong_(GadgetID(#ListIconGadget), #GWL_WNDPROC, @HeaderCallBack())      
    Repeat 
      Select WaitWindowEvent() 
        Case #PB_Event_CloseWindow 
          Quit + 1 
      EndSelect 
    Until Quit 
  EndIf 
EndIf 
End
;}

Verfasst: 04.09.2006 22:42
von Falko
Nur mal so ein kleines Beispiel, wie du den Cursor beibehalten könntest.
Ist aber global für alle Änderungen des Cursors.

Füge mal in der Repeat folgendes ein:

Code: Alles auswählen

....
Repeat
     If GetCursor_()<>65553
      Debug "Cursor ist sowas"
       SetCursor_(65553)
     EndIf
      Select WaitWindowEvent()
          Case #PB_Event_CloseWindow
....
Gruß Falko

Verfasst: 26.11.2006 14:13
von FGK
@Donald

Einzelne Spalten kann ich zwar nicht ohne die falsche Anzeige
des Cursors anbieten, aber die komplette Sperrung der Spaltenbreite
geht so:

Code: Alles auswählen

  *header = SendMessage_(GadgetID(gadget), #LVM_GETHEADER, #Null, #Null) 
  EnableWindow_(*header,0)
Gruß FGK

Verfasst: 31.03.2007 12:10
von Xaby
Mmmm, abder damit sperrst du auch die VerschiebeMöglichkeit.

kann man Drag'n'Drop unabhängig an und ab schalten vom SpaltenbreiteÄndern?

Code: Alles auswählen

#LVM_GETHEADER=#LVM_FIRST + 31   
*header = SendMessage_(GadgetID(#Liste), #LVM_GETHEADER, #Null, #Null) 
EnableWindow_(*header,0) 
Und wie kann ich es wieder ENTSPERREN???

:allright:

Verfasst: 31.03.2007 13:29
von FGK
@Xaby
Mmmm, abder damit sperrst du auch die VerschiebeMöglichkeit.

kann man Drag'n'Drop unabhängig an und ab schalten vom SpaltenbreiteÄndern?
Code:
#LVM_GETHEADER=#LVM_FIRST + 31
*header = SendMessage_(GadgetID(#Liste), #LVM_GETHEADER, #Null, #Null)
EnableWindow_(*header,0)



Und wie kann ich es wieder ENTSPERREN???
Och komm schon!

Code: Alles auswählen

EnableWindow_(*header,1)
Gruß FGK