ListIconGadget Spaltenbreite ändern sperren ?

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Donald
Beiträge: 307
Registriert: 03.01.2005 02:21
Wohnort: Marl

ListIconGadget Spaltenbreite ändern sperren ?

Beitrag 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:
DONALD :D www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Hast Du nichts konkreteres? Der Link bringt mich auch nur in eine neue Liste von Suchergebnissen.
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag 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

Benutzeravatar
Donald
Beiträge: 307
Registriert: 03.01.2005 02:21
Wohnort: Marl

Beitrag 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
;}
DONALD :D www.PureBasic-Donald.de gibt es im Moment nicht mehr
PureBasic - jaPBe - PureVisonXP - TailBite
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag 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
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag 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
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
FGK
Beiträge: 249
Registriert: 09.01.2005 14:02
Computerausstattung: i5-4430 CPU / 8GB RAM
GeForce GT630
Windows 10 Home / 64-bit
Wohnort: Augsburg

Beitrag 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
Antworten