Seite 1 von 1

ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 07:46
von ProgOldie
Ich möchte eine ggf. geänderte Spaltenbreite abspeichern. Mit GetGadgetItemAttribute() kann man die aktuelle Breite einer Spalte zwar ermitteln. Aber wie merkt man, dass die Spaltenbreite geändert wurde? Ich möchte ja nicht ständig die aktuelle Spaltenbreite abfragen und mit den abgespeicherten Einstellungen vergleichen.
Wie generiert man ein Event bei Änderung der Spaltenbreite?

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 08:56
von Bisonte
Da bei der Änderung kein #PB_EventType_Change ausgelöst wird, bleibt wohl nur noch das "dauernde" Abfragen.
Am besten mit einem AddWindowTimer() .... Es sei denn, es gäbe da ein API Konstrukt, was das ganze dann allerdings
auf ein OS "fixiert".

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 10:34
von RSBasic

Code: Alles auswählen

EnableExplicit

Define a
Global ListCB

Procedure ListCB(hWnd, Message, wParam, lParam)
  Protected *HD_NOTIFY.HD_NOTIFY
  Protected Result = CallWindowProc_(ListCB, hWnd, Message, wParam, lParam)
  
  Select Message
    Case #WM_NOTIFY
      *HD_NOTIFY = lParam
      If *HD_NOTIFY\hdr\code = #HDN_ITEMCHANGED
        Debug "Breite der Spalte " + Str(*HD_NOTIFY\iItem+1) + " hat sich geändert"
      EndIf
  EndSelect
  
  ProcedureReturn Result
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ListIconGadget(1, 0, 0, WindowWidth(0), WindowHeight(0), "Spalte 1", 150, 0)
  AddGadgetColumn(1, 1, "Spalte 2", 150)
  AddGadgetColumn(1, 2, "Spalte 3", 150)
  
  For a=1 To 10
    AddGadgetItem(1, -1, "Eintrag " + Str(a), 0, 0)
  Next
  
  ListCB = SetWindowLongPtr_(GadgetID(1), #GWL_WNDPROC, @ListCB())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 12:23
von ProgOldie
Danke RSBasic, genau das war's.
Habe auch gleich aus deiner WinAPI noch den Klick auf den Header darin untergebracht.

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 12:26
von HeX0R
Ich mache sowas üblicherweise beim Beenden des Programms.
Welchen Sinn macht es, das on-the-fly zu überwachen?

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 18:58
von ts-soft
HeX0R hat geschrieben:Ich mache sowas üblicherweise beim Beenden des Programms.
Welchen Sinn macht es, das on-the-fly zu überwachen?
Dasselbe, hab ich mich auch gefragt <)

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 20:07
von ProgOldie
@ts-soft, @HeXOR

o.K., das macht man sinnvollerweise in aller Regel erst am Ende. Manchmal hat man halt ein Brett vor dem Kopf.... :o

Re: ListiconGadget: Event bei Änderung der Spaltenbreite

Verfasst: 31.07.2015 20:12
von ts-soft
ProgOldie hat geschrieben:Manchmal hat man halt ein Brett vor dem Kopf.... :o
Das gehört beim Programmieren einfach dazu :D