Aktuelle Zeit: 23.05.2013 04:54

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Editierbares ListIconGadget mit Ausrichtung
BeitragVerfasst: 03.10.2010 18:26 
Offline
Benutzeravatar

Registriert: 22.04.2010 18:28
Wohnort: #PB_Any
Hier eine Lösung mit je einer Prozedur von netmaestro und sibru, welche durch mich manipuliert wurden.

Den Code habe ich schon eine ganze Weile herumzuliegen. Vielleicht kann jemand was mit anfangen.

Hinweis: Die erste Spalte im LIG ist ausgeblendet. Änderungen werden übernommen sobald der Mauszeiger aus der Zelle bewegt wird.
Code:
Enumeration
  #Win
EndEnumeration

Enumeration
  #Lig
  #Stg
EndEnumeration

Global Zeile, Spalte, oldproc

#LVM_SUBITEMHITTEST = #LVM_FIRST + 57
#LVM_GETSUBITEMRECT = #LVM_FIRST + 56

Procedure LigAusrichtGet() ;sibru
  Protected Ausricht.LV_COLUMN\mask = #LVCF_FMT
  If SendMessage_(GadgetID(#Lig), #LVM_GETCOLUMN, Spalte, @Ausricht) = 0
    Ausricht\fmt = #LVS_NOCOLUMNHEADER - 1 ;Error
  EndIf
  If Ausricht\fmt - #LVS_NOCOLUMNHEADER = 0 : Adj = #ES_LEFT
  ElseIf Ausricht\fmt - #LVS_NOCOLUMNHEADER = 1 : Adj = #ES_RIGHT
  ElseIf Ausricht\fmt - #LVS_NOCOLUMNHEADER = 2 : Adj = #ES_CENTER
  Else
    Adj = #ES_LEFT
  EndIf
  ProcedureReturn Adj
EndProcedure

Procedure SubClass_LV(hWnd, uMsg, wParam, lParam) ;netmaestro
  result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
  If uMsg = #WM_LBUTTONDOWN
    GetCursorPos_(@cp.POINT)
    MapWindowPoints_(0, hWnd, @cp, 1)
    hitinfo.LVHITTESTINFO
    hitinfo\pt\x = cp\x
    hitinfo\pt\y = cp\y
    SendMessage_(hWnd, #LVM_SUBITEMHITTEST, 0, @hitinfo)
    If hitinfo\iSubItem > 0 And hitinfo\iItem >= 0
      Zeile  = hitinfo\iItem
      Spalte = hitinfo\iSubItem
      RtlZeroMemory_(@itemrect.RECT, SizeOf(RECT))
      itemrect\top = hitinfo\iSubItem
      SendMessage_(hWnd, #LVM_GETSUBITEMRECT, hitinfo\iItem, @itemrect)
      FreeGadget(#Stg)
      StringGadget(#Stg, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, GetGadgetItemText(#Lig, Zeile, Spalte), #WS_EX_STATICEDGE | LigAusrichtGet())
      SetParent_(GadgetID(#Stg), GadgetID(#Lig))
      ResizeGadget(#Stg, itemrect\left + 6, itemrect\top, itemrect\right - itemrect\left - 11, itemrect\bottom - itemrect\top - 1)
      SetActiveGadget(#Stg)
      SendMessage_(GadgetID(#Stg), #EM_SETSEL, 0, -1)
    Else
      HideGadget(#Stg, 1)
    EndIf
  ElseIf uMsg = #WM_NOTIFY And IsWindowVisible_(GadgetID(1)) = 1
    HideGadget(#Stg, 1)
  EndIf
  ProcedureReturn result
EndProcedure

If OpenWindow(#Win, #PB_Ignore, #PB_Ignore, 350, 250, "EditListIconGadget", #PB_Window_SystemMenu)
  ListIconGadget(#Lig, 0, 0, 350, 250, "", 0, #PB_ListIcon_GridLines)
  oldproc = SetWindowLongPtr_(GadgetID(#Lig), #GWL_WNDPROC, @SubClass_LV())
  AddGadgetColumn(#Lig, 1, "GSM-Netz", 100)
  AddGadgetColumn(#Lig, 2, "UMTS-Netz", 100)
  AddGadgetColumn(#Lig, 3, "Festnetz", 115)
  AddGadgetItem(#Lig, -1, #LF$ + "HSCSD" + #LF$ + "UMTS" + #LF$ + "Modem")
  AddGadgetItem(#Lig, -1, #LF$ + "GPRS" + #LF$ + "HSPA" + #LF$ + "ISDN")
  AddGadgetItem(#Lig, -1, #LF$ + "EDGE" + #LF$ + "HSPA+" + #LF$ + "DSL")
  StringGadget(#Stg, 0, 0, 0, 0, "", #WS_EX_STATICEDGE) : HideGadget(#Stg, 1)
  align.LV_COLUMN\mask = #LVCF_FMT
  align\fmt = #LVCFMT_CENTER
  SendMessage_(GadgetID(#Lig), #LVM_SETCOLUMN, 2, @align)
  align\fmt = #LVCFMT_RIGHT
  SendMessage_(GadgetID(#Lig), #LVM_SETCOLUMN, 3, @align)
 
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case #Stg
            Select EventType()
              Case #PB_EventType_Change
                SetGadgetItemText(#Lig, Zeile, GetGadgetText(#Stg), Spalte)
            EndSelect
        EndSelect
      Case #PB_Event_CloseWindow
        Select EventWindow()
          Case #Win
            CloseWindow(#Win)
            Break
        EndSelect
    EndSelect
  ForEver
EndIf
End

_________________
[WinXP SP2 (x86)] [PB 4.51 (x86)] [Suche] [MsgBoxMaker] Bild


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye