Seite 1 von 1

Grid Problem [ERLEDIGT]

Verfasst: 08.01.2013 20:57
von Pure_Beginner
Hallo Leute,

hab mir ES/EX Grid gekauft und bin zu dämlich um es zu bedien ! /:->

Das erstellen des Grids war kein Problen.
jedoch das einfärben der Wochenenden. (Samstage+Sonntage).

Hier das gesamte Listing

Code: Alles auswählen

EnableExplicit
XIncludeFile "D:\Program Files (x86)\PureBasic (X86)\Includes\esgrid.pbi"
IncludePath ""


Procedure.l MyCellCallBack(egrid, uMsg, *cellinfo.egridCellInfo) 
  Protected result 
  Select uMsg 
    Case #egrid_cellUpdated
      result=1
      
    Case #egrid_SelectCell 
      result=#True 
      InvalidateRect_(GadgetID(egrid),0,0)
    Case #egrid_LosingFocus 
      InvalidateRect_(GadgetID(egrid),0,0)
    Case #egrid_FormatCell 
      If *cellinfo\row<>-1 And *cellinfo\row=egrid_SelectedRow(egrid)
        *cellinfo\backcolour = $A5F4F9 
      EndIf 
    Default 
      result = #True                      
  EndSelect 
  
  ProcedureReturn result 
EndProcedure 


Procedure Tage_im_Monat(Jahr.i)
  
  If OpenWindow(0, 10, 10, 1650, 900, "Kalender " + Str(Jahr), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    If PanelGadget(1, 10, 10, 1630,683)
      
      
      Protected Tage.i, k.i, Ergebnis.i, i.i, Event.i, Quit.i
      Protected Tagtext.s
      
      
      If Jahr % 4 = 0 And  (Jahr % 100 <> 0 Or Jahr % 400 = 0)         ;auf schaltjahr überprüfen
        Tage = 29
      Else
        Tage = 28
      EndIf
      
      Dim Monatstage.i(11)                                              ;array für anzahl der tage
      Monatstage(0) = 31
      Monatstage(1) = Tage
      Monatstage(2) = 31
      Monatstage(3) = 30
      Monatstage(4) = 31
      Monatstage(5) = 30
      Monatstage(6) = 31
      Monatstage(7) = 31
      Monatstage(8) = 30
      Monatstage(9) = 31
      Monatstage(10) = 30
      Monatstage(11) = 31
      
      Dim Monat.s(11)                                                     ;array für monatsnamen 
      Monat(0) = "Januar"
      Monat(1) = "Februar"
      Monat(2) = "März"
      Monat(3) = "April"
      Monat(4) = "Mai"
      Monat(5) = "Juni"
      Monat(6) = "Juli"
      Monat(7) = "August"
      Monat(8) = "September"
      Monat(9) = "Oktober"
      Monat(10) = "November"
      Monat(11) = "Dezember"
      
      
      For k = 0 To 11                                             ;schleife für monate
        AddGadgetItem(1, k, Monat(k) )                            ;panelgadget beschriftung
        egrid_CreateGrid(2+k, 10, 10, 1603, 636, 18,#egrid_NoHeaderButtons|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText)  ;|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText
        egrid_CreateCellCallback(2+k, @MyCellCallBack()) 
        
        egrid_AddColumn(2+k,0,"Tag",35)
        egrid_AddColumn(2+k,1,"",25)
        egrid_AddColumn(2+k,2,"Beamer raum 3 is kaputt",120)
        egrid_AddColumn(2+k,3,"Beamer raum 2",60)
        egrid_AddColumn(2+k,4,"VR",30)
        
        egrid_SetHeaderHeight(2+k,40)
        
        egrid_SetOption(2+k, #egrid_HeaderBorderColour, #Red)
        egrid_SetOption(2+k, #egrid_SelectionBorderColour, #Blue)
        egrid_SetOption(2+k, #egrid_SelectionBorderWidth, 2)
        egrid_SetOption(2+k, #egrid_GridLineColour, #Blue)
        SetActiveGadget(2+k)
        
        egrid_AddRows(2+k,-1, Monatstage(k)) ;100 rows.
        
        
        
        For i = 1 To Monatstage(k)                                ;schleife für anzahl der tage
          Ergebnis = DayOfWeek(Date (Jahr,1+k,i,0,0,0))            ;aktueller tag ermitteln
          
          Select Ergebnis                                          ;umwandeln in text
            Case 0
              Tagtext = "So"
            Case 1
              Tagtext = "Mo"
            Case 2
              Tagtext = "Di"
            Case 3
              Tagtext = "Mi"
            Case 4
              Tagtext = "Do"
            Case 5
              Tagtext = "Fr"
            Case 6
              Tagtext = "Sa"
          EndSelect
          
          egrid_SetCellText(2+k, 0, i-1, Tagtext)
          egrid_SetCellText(2+k, 1, i-1, Str(i))
          
          
          If Tagtext = "So" Or Tagtext = "Sa"
             *cellinfo\backcolour = $A5F4F9 
          EndIf
          
        Next           
      Next     
      
       
      
      Repeat
        Event = WaitWindowEvent()
        
        
        If Event = #PB_Event_CloseWindow  
          Quit = 1
        EndIf
       
        
        
      Until Quit = 1
      
    EndIf
  EndIf
  
  
  
EndProcedure

Tage_im_Monat(2012)



und hier die Stelle an der ich versuche die entsprechenden Zellen einzufärben

Code: Alles auswählen

If Tagtext = "So" Or Tagtext = "Sa"
             *cellinfo\backcolour = $A5F4F9 
          EndIf
hat wohl was mit Zeigern zu tun, bin da aber noch nicht so fit.

Und werd's es wohl auch nie werden. :lol:

Kann mir bitte jemand helfen

Grüße
Christian

Re: Grid Problem

Verfasst: 08.01.2013 21:17
von ts-soft
Pure_Beginner hat geschrieben:Kann mir bitte jemand helfen
Klar, aber bitte angucken was ich gemacht habe und nicht einfach nur nutzen :wink:

Code: Alles auswählen

EnableExplicit
XIncludeFile "D:\Program Files (x86)\PureBasic (X86)\Includes\esgrid.pbi"
IncludePath ""

Procedure.i MyCellCallBack(egrid, uMsg, *cellinfo.egridCellInfo)
  Protected result
  Select uMsg
    Case #egrid_cellUpdated
      result=1
     
    Case #egrid_SelectCell
      result=#True
      InvalidateRect_(GadgetID(egrid),0,0)
    Case #egrid_LosingFocus
      InvalidateRect_(GadgetID(egrid),0,0)
    Case #egrid_FormatCell
      If *cellinfo\row<>-1 And *cellinfo\row=egrid_SelectedRow(egrid)
        *cellinfo\backcolour = $A5F4F9
      EndIf
      
      If *cellinfo\row <> - 1 ; ist nicht der header
        If *cellinfo\column = 0 ; Erste Spalte = Tag
          If egrid_GetCellText(egrid, 0, *cellinfo\row) = "Sa" Or egrid_GetCellText(egrid, 0, *cellinfo\row) = "So"
            *cellinfo\backcolour = $A5F4F9 
          EndIf
        EndIf
      EndIf
    Default
      result = #True                     
  EndSelect
 
  ProcedureReturn result
EndProcedure


Procedure Tage_im_Monat(Jahr.i)
 
  If OpenWindow(0, 10, 10, 1650, 900, "Kalender " + Str(Jahr), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    If PanelGadget(1, 10, 10, 1630,683)
     
     
      Protected Tage.i, k.i, Ergebnis.i, i.i, Event.i, Quit.i
      Protected Tagtext.s
     
     
      If Jahr % 4 = 0 And  (Jahr % 100 <> 0 Or Jahr % 400 = 0)         ;auf schaltjahr überprüfen
        Tage = 29
      Else
        Tage = 28
      EndIf
     
      Dim Monatstage.i(11)                                              ;array für anzahl der tage
      Monatstage(0) = 31
      Monatstage(1) = Tage
      Monatstage(2) = 31
      Monatstage(3) = 30
      Monatstage(4) = 31
      Monatstage(5) = 30
      Monatstage(6) = 31
      Monatstage(7) = 31
      Monatstage(8) = 30
      Monatstage(9) = 31
      Monatstage(10) = 30
      Monatstage(11) = 31
     
      Dim Monat.s(11)                                                     ;array für monatsnamen
      Monat(0) = "Januar"
      Monat(1) = "Februar"
      Monat(2) = "März"
      Monat(3) = "April"
      Monat(4) = "Mai"
      Monat(5) = "Juni"
      Monat(6) = "Juli"
      Monat(7) = "August"
      Monat(8) = "September"
      Monat(9) = "Oktober"
      Monat(10) = "November"
      Monat(11) = "Dezember"
     
     
      For k = 0 To 11                                             ;schleife für monate
        AddGadgetItem(1, k, Monat(k) )                            ;panelgadget beschriftung
        egrid_CreateGrid(2+k, 10, 10, 1603, 636, 18,#egrid_NoHeaderButtons|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText)  ;|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText
        egrid_CreateCellCallback(2+k, @MyCellCallBack())
       
        egrid_AddColumn(2+k,0,"Tag",35)
        egrid_AddColumn(2+k,1,"",25)
        egrid_AddColumn(2+k,2,"Beamer raum 3 is kaputt",120)
        egrid_AddColumn(2+k,3,"Beamer raum 2",60)
        egrid_AddColumn(2+k,4,"VR",30)
       
        egrid_SetHeaderHeight(2+k,40)
       
        egrid_SetOption(2+k, #egrid_HeaderBorderColour, #Red)
        egrid_SetOption(2+k, #egrid_SelectionBorderColour, #Blue)
        egrid_SetOption(2+k, #egrid_SelectionBorderWidth, 2)
        egrid_SetOption(2+k, #egrid_GridLineColour, #Blue)
        SetActiveGadget(2+k)
       
        egrid_AddRows(2+k,-1, Monatstage(k)) ;100 rows.
       
       
       
        For i = 1 To Monatstage(k)                                ;schleife für anzahl der tage
          Ergebnis = DayOfWeek(Date (Jahr,1+k,i,0,0,0))            ;aktueller tag ermitteln
         
          Select Ergebnis                                          ;umwandeln in text
            Case 0
              Tagtext = "So"
            Case 1
              Tagtext = "Mo"
            Case 2
              Tagtext = "Di"
            Case 3
              Tagtext = "Mi"
            Case 4
              Tagtext = "Do"
            Case 5
              Tagtext = "Fr"
            Case 6
              Tagtext = "Sa"
          EndSelect
         
          egrid_SetCellText(2+k, 0, i-1, Tagtext)
          egrid_SetCellText(2+k, 1, i-1, Str(i))
         
         
          If Tagtext = "So" Or Tagtext = "Sa"
             ;*cellinfo\backcolour = $A5F4F9
          EndIf
         
        Next           
      Next     
     
       
     
      Repeat
        Event = WaitWindowEvent()
       
       
        If Event = #PB_Event_CloseWindow 
          Quit = 1
        EndIf
       
       
       
      Until Quit = 1
     
    EndIf
  EndIf
 
 
 
EndProcedure

Tage_im_Monat(2012)

Gruß
Thomas

Re: Grid Problem

Verfasst: 08.01.2013 21:26
von Pure_Beginner
Hallo Thomas,

danke für deine schnelle Antwort.
Funktioniert prima. :allright:

Bin auch gleich drauf gekommen was du gemacht hast, aber nicht dahinter. :?

werd mich aber eingehender damit befassen.

nochmals besten Dank.

Grüße
Christian

Re: Grid Problem

Verfasst: 08.01.2013 21:35
von ts-soft
Bis auf das erstellen des Grids, Colums, Rows und ein paar Optionen spielt die Musik immer im Callback.
Einfach mal mit den mitgelieferten Beispielen herumspielen und dabei in die Hilfe gucken.

PS: Exgrid bietet ein paar kleine aber feine Vorteile gegenüber dem Esgrid. Wenn Du beide Lizenzen hast,
dann würde ich eher dieses zu programmieren erlernen, obwohl es wegen des OOP-Ansatzes vielleicht
anfangs nicht ganz so einleuchtend ist.

Gruß
Thomas

Re: Grid Problem [ERLEDIGT]

Verfasst: 08.01.2013 21:42
von Pure_Beginner
Hallo Thomas,

ja hab auch EX Grid, da strahl ich garnix. :lol:

Aber mit fast 50 und nur 3 bis 4 Stunden in der Woche mit PB ist das auch nicht verwunderlich.

Zum Glück gibt es ja ES Grid und das Forum, so machts auch weiterhin immer wieder Spaß was zu Basteln. :D

Danke für deine Mühe.

Gruß
Christian

Re: Grid Problem [ERLEDIGT]

Verfasst: 08.01.2013 22:03
von ts-soft
Naja, ich hab die 50 schon lange überschritten :mrgreen:

Dein Callback enthielt noch fehler und unnötiges, hab es mal optimiert:

Code: Alles auswählen

EnableExplicit
XIncludeFile "D:\Program Files (x86)\PureBasic (X86)\Includes\esgrid.pbi"
IncludePath ""

Procedure.i MyCellCallBack(egrid, uMsg, *cellinfo.egridCellInfo)
  Protected result = #True
  
  Select uMsg
    Case #egrid_SelectCell
      InvalidateRect_(GadgetID(egrid), 0, 0)  
          
    Case #egrid_FormatCell
      If *cellinfo\row <> - 1 And *cellinfo\row = egrid_SelectedRow(egrid)
        *cellinfo\backcolour = $A5F4F9
      EndIf
      
      If *cellinfo\row <> - 1 ; ist nicht der header
        If *cellinfo\column = 0 ; Erste Spalte = Tag
          If egrid_GetCellText(egrid, 0, *cellinfo\row) = "Sa" Or egrid_GetCellText(egrid, 0, *cellinfo\row) = "So"
            *cellinfo\backcolour = $A5F4F9
          EndIf
        EndIf
      EndIf
      
  EndSelect
  
  ProcedureReturn result
EndProcedure

Procedure Tage_im_Monat(Jahr.i)
  
  If OpenWindow(0, 10, 10, 1650, 900, "Kalender " + Str(Jahr), #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
    If PanelGadget(1, 10, 10, 1630,683)
      
      
      Protected Tage.i, k.i, Ergebnis.i, i.i, Event.i, Quit.i
      Protected Tagtext.s
      
      
      If Jahr % 4 = 0 And  (Jahr % 100 <> 0 Or Jahr % 400 = 0)         ;auf schaltjahr überprüfen
        Tage = 29
      Else
        Tage = 28
      EndIf
      
      Dim Monatstage.i(11)                                              ;array für anzahl der tage
      Monatstage(0) = 31
      Monatstage(1) = Tage
      Monatstage(2) = 31
      Monatstage(3) = 30
      Monatstage(4) = 31
      Monatstage(5) = 30
      Monatstage(6) = 31
      Monatstage(7) = 31
      Monatstage(8) = 30
      Monatstage(9) = 31
      Monatstage(10) = 30
      Monatstage(11) = 31
      
      Dim Monat.s(11)                                                     ;array für monatsnamen
      Monat(0) = "Januar"
      Monat(1) = "Februar"
      Monat(2) = "März"
      Monat(3) = "April"
      Monat(4) = "Mai"
      Monat(5) = "Juni"
      Monat(6) = "Juli"
      Monat(7) = "August"
      Monat(8) = "September"
      Monat(9) = "Oktober"
      Monat(10) = "November"
      Monat(11) = "Dezember"
      
      
      For k = 0 To 11                                             ;schleife für monate
        AddGadgetItem(1, k, Monat(k) )                            ;panelgadget beschriftung
        egrid_CreateGrid(2+k, 10, 10, 1603, 636, 18,#egrid_NoHeaderButtons|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText)  ;|#egrid_GridLines,#egrid_CustomHeader|#egrid_MultiLineText
        egrid_CreateCellCallback(2+k, @MyCellCallBack())
        
        egrid_AddColumn(2+k,0,"Tag",35)
        egrid_AddColumn(2+k,1,"",25)
        egrid_AddColumn(2+k,2,"Beamer raum 3 is kaputt",120)
        egrid_AddColumn(2+k,3,"Beamer raum 2",60)
        egrid_AddColumn(2+k,4,"VR",30)
        
        egrid_SetHeaderHeight(2+k,40)
        
        egrid_SetOption(2+k, #egrid_HeaderBorderColour, #Red)
        egrid_SetOption(2+k, #egrid_SelectionBorderColour, #Blue)
        egrid_SetOption(2+k, #egrid_SelectionBorderWidth, 2)
        egrid_SetOption(2+k, #egrid_GridLineColour, #Blue)
        SetActiveGadget(2+k)
        
        egrid_AddRows(2+k,-1, Monatstage(k)) ;100 rows.
        
        
        
        For i = 1 To Monatstage(k)                                ;schleife für anzahl der tage
          Ergebnis = DayOfWeek(Date (Jahr,1+k,i,0,0,0))            ;aktueller tag ermitteln
          
          Select Ergebnis                                          ;umwandeln in text
            Case 0
              Tagtext = "So"
            Case 1
              Tagtext = "Mo"
            Case 2
              Tagtext = "Di"
            Case 3
              Tagtext = "Mi"
            Case 4
              Tagtext = "Do"
            Case 5
              Tagtext = "Fr"
            Case 6
              Tagtext = "Sa"
          EndSelect
          
          egrid_SetCellText(2+k, 0, i-1, Tagtext)
          egrid_SetCellText(2+k, 1, i-1, Str(i))
        Next           
      Next     
      
      
      
      Repeat
        Event = WaitWindowEvent()
        
        
        If Event = #PB_Event_CloseWindow
          Quit = 1
        EndIf
        
        
        
      Until Quit = 1
      
    EndIf
  EndIf
  
  
  
EndProcedure

Tage_im_Monat(2012)


Re: Grid Problem [ERLEDIGT]

Verfasst: 08.01.2013 22:14
von Pure_Beginner
@Thomas

mein Beruf hat so garnix mit Programmierung zu tun. (Tischlermeister)

Richtig zeit fürs Lernen hab ich auch nicht (obwohl es mich stark interessiert), darum lerning by doing.

Deshalb glaube ich das aus dem OOP nix wird.

Grüße
Christian

Re: Grid Problem [ERLEDIGT]

Verfasst: 09.01.2013 16:31
von bobobo
hmm
Kalender kann ich auch :mrgreen:

und das Einfärben hab ich dort mit der PUREColor Lib vom heiligen Gnozal gelöst

Code: Alles auswählen

;gnozal lib PureColor benötigt zum Einfärben

jahr=Year(Date())
OpenWindow(0,0,0,800,480,"Es ist "+Str(jahr),#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
w=800/12
ListIconGadget(0,0,0,800,480,"Jan",w,#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
For m= 1 To 11
  Select Month(Date(jahr,m,1,1,0,0))
    Case 1 :      mn.s="Feb"
    Case 2 :      mn.s="Mär"
    Case 3 :      mn.s="Apr"
    Case 4 :      mn.s="Mai"
    Case 5 :      mn.s="Jun"
    Case 6 :      mn.s="Jul"
    Case 7 :      mn.s="Aug"
    Case 8 :      mn.s="Sep"
    Case 9 :      mn.s="Okt"
    Case 10:      mn.s="Nov"
    Case 11:      mn.s="Dez"
  EndSelect
  AddGadgetColumn(0,m,mn,800/12)
Next m
days.s=Space(11)
days=ReplaceString(days," "," "+Chr(10))

For m=0 To 30
  AddGadgetItem(0,m,days)
Next m
 
d1=Date(jahr,1,1,0,0,0)
doy=DayOfYear(Date(jahr,12,31,0,0,0))

For d=0 To doy-1
  dd.s=FormatDate("%dd",AddDate(d1,#PB_Date_Day,d))
  dm.s=FormatDate("%mm",AddDate(d1,#PB_Date_Day,d))
  ddate.s=FormatDate("%dd.%mm",AddDate(d1,#PB_Date_Day,d))
  Select DayOfWeek(AddDate(d1,#PB_Date_Day,d))
    Case 0 : dn.s="So":PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFE0E0)
    Case 1 : dn.s="Mo";:PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFFFFF)
    Case 2 : dn.s="Di";:PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFFFFF)
    Case 3 : dn.s="Mi":PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFFAFA)
    Case 4 : dn.s="Do";:PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFFFFF)
    Case 5 : dn.s="Fr";:PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFFFFF)
    Case 6 : dn.s="Sa":PureCOLOR_SetCellColor(0,Val(dd)-1,Val(dm)-1,#Black,$FFF0F0)
  EndSelect
  val.s=LSet(ddate,8," ")+dn
  SetGadgetItemText(0,Val(dd)-1,val.s,Val(dm)-1)
Next d
;workarround, da die Liniendarstellung leidet wenn im LV die Purecolor lib wirkt
SendMessage_(GadgetID(0), #LVM_SETEXTENDEDLISTVIEWSTYLE, #LVS_EX_GRIDLINES, #LVS_EX_GRIDLINES)
DisableGadget(0,1)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
End

Re: Grid Problem [ERLEDIGT]

Verfasst: 09.01.2013 19:10
von Pure_Beginner
@ bobobo

Ja die Tools von gnozal kenne ich auch LVSort, LPrint, POP3, SMTP usw.

Aber ich hatte andere Vorstellungen.
Die erste Spalte für den Tag, die zweite Spalte für das Datum und die folgenden für Einträge.
Deshalb ein Grid und weil ich zu blöd zum bedienen (einfärben) war, hab ich nach Hilfe gefragt.
Mir war das mit dem *Zeiger etwas unheimlich und unbekannt.

Grüße
Christian