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

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???

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!
Gruß FGK