I saw that I had a mistake in naming the variables. X was y and vice versa. I changed the code.
Please lets go ahead with this.
PS: Could you please send me your email addresses.
I would like to share my snipkeeper code with you, too.
Code: Select all
#include "fivewin.ch"
STATIC oWndPlan
STATIC planFont
STATIC sy := 1
STATIC sx := 1
STATIC syTemp := 0
STATIC sxTemp := 0
STATIC aPlan := {}
STATIC ClickCol :=0
STATIC ClickRow :=0
STATIC startDay :=""
STATIC oBrush
STATIC lMove :=.f.
STATIC hBru
STATIC hPen
STATIC hPen1
STATIC hPen3
STATIC aTemp := {}
STATIC nStartZeile := 0
/* ********** added by rochinha, modify by Quique ********** */
STATIC nYear
/* ********** added by rochinha, modify by Quique ********** */
function main()
/* ********** added by rochinha, modify by Quique ********** */
nYear := YEAR( DATE() )
/* ********** added by rochinha, modify by Quique ********** */
aadd(aTemp,{0,0}) // 1
aadd(aTemp,{0,0}) // 2
aadd(aTemp,{0,0}) // 3
aadd(aTemp,{0,0}) // 4
aadd(aTemp,{0,0}) // 5
aadd(aTemp,{0,0}) // 6
aadd(aTemp,{0,0}) // 7
aadd(aTemp,{0,0}) // 8
aadd(aTemp,{0,0}) // 9
aadd(aTemp,{0,0}) // 10
aadd(aTemp,{0,0}) // 11
aadd(aTemp,{0,0}) // 12
SET DATE GERMAN
***
hBru := CreateSolidBrush( RGB(217,230,246) )
hPen := CreatePen( 0, 1, 12632256 )
hPen1 := CreatePen( 0, 1, 280 )
hPen3 := CreatePen( 0, 18,RGB(183,249,185) )//Sonntagsspalte
DEFINE BRUSH oBrush COLOR RGB(255,255,255)
DEFINE FONT planFont NAME "ARIAL" SIZE 0,-11
***
DEFINE WINDOW oWndPlan TITLE "Kalender" ;
HSCROLL ;
FROM 5, 5 TO 24, 98
oWndPlan:bLClicked := { |x,y,flags | f_bLClicked(x,y) }
oWndPlan:bMMoved := { |x,y,flags | f_MMoved(x,y) }
oWndPlan:bLButtonUp := { |x,y,flags | f_LButtonUp(x,y) }
/* ********** added by rochinha ********** */
oWndPlan:cTitle := "Kalender [ " + str(nYear,4) + " ]"
/* ********** added by rochinha ********** */
/* ********** added by rochinha ********** */
oWndPlan:oHScroll:bGoUp := {|| PreviousYear() }
oWndPlan:oHScroll:bGoDown := {|| NextYear() }
/* ********** added by rochinha ********** */
ACTIVATE WINDOW oWndPlan ON PAINT DrawRowLines()
return nil
func PreviousYear() /* ********** added by rochinha ********** */
nYear := nYear - 1
DrawRowLines()
oWndPlan:refresh()
oWndPlan:cTitle := "Kalender [ " + str(nYear,4) + " ]"
return .t.
func NextYear() /* ********** added by rochinha ********** */
nYear := nYear + 1
DrawRowLines()
oWndPlan:refresh()
oWndPlan:cTitle := "Kalender [ " + str(nYear,4) + " ]"
return .t.
func DrawRowLines ()
//Carles
local aInfo := oWndPlan:DispBegin()
//Carles
LOCAL I, nCurrentRows, iZeile
LOCAL cHeader1 := ""
LOCAL oSay
LOCAL hdc
LOCAL aDays := {;
"So","Mo","Di", "Mi", "Do", "Fr", "Sa","So",;
"Mo","Di", "Mi", "Do", "Fr", "Sa","So",;
"Mo","Di", "Mi", "Do", "Fr", "Sa","So",;
"Mo","Di", "Mi", "Do", "Fr", "Sa","So",;
"Mo","Di", "Mi", "Do", "Fr", "Sa","So","Mo" }
/* blocked by rochinha
LOCAL nYear := YEAR( DATE() ) */
LOCAL cYear := STR( nYear, 4 )
LOCAL dDate, nStart
LOCAL lSchaltJahr := ( DAY( CTOD( "29.02." + cYear ) ) <> 0 )
LOCAL aDaysInMonth := { 31, IIF( lSchaltJahr, 29, 28 ), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }
LOCAL nColOffSet := 10
LOCAL aRect1
LOCAL IMonate := 0
LOCAL ITemp := 0
local cTest := ""
local nEnde
FOR IMonate := 1 TO 12
aadd(aPlan,{"","","", "", "", "", "","",;
"","", "", "", "", "","",;
"","", "", "", "", "","",;
"","", "", "", "", "","",;
"","", "", "", "", "","","",0,0,0 } )
NEXT
aRect1 := { 0,0,500,1000}
FillRect(oWndPlan:hDc,aRect1,oBrush:hBrush)
iZeile := 0
nCurrentRows := 30
FOR I := 1 TO 13
SelectObject( oWndPlan:hDc, hPen )
IF iZeile = 5
SelectObject( oWndPlan:hDc, hPen1 )
iZeile := 0
ENDIF
//Lines
oWndPlan:line (nCurrentRows, 1,nCurrentRows, 726 )
nCurrentRows := nCurrentRows + 18
iZeile := iZeile + 1
NEXT
nCurrentRows:= 50
FOR I := 1 TO 38
SelectObject( oWndPlan:hDc, hPen )
IF iZeile = 5
SelectObject( oWndPlan:hDc, hPen1 )
iZeile := 0
ENDIF
oWndPlan:line (10,nColOffSet + nCurrentRows,400, nColOffSet + nCurrentRows )
nCurrentRows := nCurrentRows + 18
iZeile := iZeile + 1
NEXT
nCurrentRows:= 50
FOR I := 1 TO len(aDays)
if aDays[I] = "So"
//Farbhintergrund Sonntag
SelectObject( oWndPlan:hDc, hPen3 )
// Sonntag erste fette Linie
oWndPlan:line (0,nColOffSet+ 10 + nCurrentRows,400, nColOffSet+ 10 + nCurrentRows )
SelectObject( oWndPlan:hDc, hPen )
oWndPlan:say( 8, nColOffSet+36+I*18,aDays[I],RGB(255,128,0), RGB(125,236,175),planFont,.T.)
else
oWndPlan:say( 8, nColOffSet+36+I*18,aDays[I],RGB(255,128,0),16777215,planFont,.T.)
endif
nCurrentRows := nCurrentRows + 18
NEXT
nCurrentRows := 12
FOR I := 1 TO 12
SelectObject( oWndPlan:hDc, hPen )
IF iZeile = 5
SelectObject( oWndPlan:hDc, hPen1 )
iZeile := 0
ENDIF
nCurrentRows := nCurrentRows + 18
dDate := CTOD( "01." + PADL( ALLTRIM(STR( i, 2 )), 2, "0" ) + "." + cYear )
nStart := DOW( dDate )
aPlan[I,38] := nStart
aPlan[I,39] := 30-18+ (18*( aDaysInMonth[i] + nStart - 1 )) //col begin of month
aPlan[I,40] := nStart + aDaysInMonth[i] //col end of month
FOR iZeile := nStart TO aDaysInMonth[i] + nStart - 1
aPlan[I,iZeile] = ( PADL( ALLTRIM(STR( (iZeile-nStart+1), 2 )), 2, "0" )+ "." + PADL( ALLTRIM(STR( (I), 2 )), 2, "0" ) + "." + cYear )
NEXT
cHeader1 := OemToAnsi( CMONTH( dDate ) ) //Monate
oWndPlan:say( nCurrentRows+1, 2, cHeader1,RGB(63,63,63),16777215,planFont,.T.)
NEXT
IF (sx > 0 .AND. sx < 13) .AND. (sy > 0 .AND. sy < 38)
IF lMove = .t.
IZeile := INT((sxTemp-30)/18 ) + 1
aTemp[IZeile,1]:=10
FOR ITemp := IZeile+1 TO 12
aTemp[ITemp,1]:=0
NEXT
FOR ITemp := 1 TO 12
if aTemp[ITemp,1] > 0
if syTemp > aPlan[ITemp,39] + aPlan[ITemp,38]*18
syTemp := aPlan[ITemp,39] + aPlan[ITemp,38]*18
endif
IF 30-18+ (18*(ITemp)) >= ClickRow .AND. ;
.NOT. (30-18+ (18*(ITemp)) = ClickRow .AND. ;
ClickCol > syTemp)
FillRect( oWndPlan:hDc, { 30-18+ (18*(ITemp)),ClickCol, 30 +(18*(ITemp)), syTemp}, hBru )
IF ITemp > nStartZeile
FillRect( oWndPlan:hDc, { 30-18+ (18*(ITemp-1)),ClickCol, 30 +(18*(ITemp-1)), (30 +( 13 + 18*(aPlan[ITemp-1,40]))) }, hBru )
FillRect( oWndPlan:hDc, { 30-18+ (18*(ITemp)), 30 + 13 + (18*(aPlan[ITemp,38])), 30 +(18*(ITemp)), syTemp}, hBru )
ENDIF
else
FillRect( oWndPlan:hDc, {ClickRow,ClickCol,ClickRow+18,ClickCol+18}, hBru )
ENDIF
endif
NEXT
ENDIF
ENDIF
nCurrentRows := 12
FOR I := 1 TO 12
SelectObject( oWndPlan:hDc, hPen )
IF iZeile = 5
SelectObject( oWndPlan:hDc, hPen1 )
iZeile := 0
ENDIF
nCurrentRows := nCurrentRows + 18
dDate := CTOD( "01." + PADL( ALLTRIM(STR( i, 2 )), 2, "0" ) + "." + cYear )
nStart := DOW( dDate )
aPlan[I,38] := nStart
aPlan[I,39] := 30-18+ (18*( aDaysInMonth[i] + nStart - 1 )) //col begin of month
aPlan[I,40] := nStart + aDaysInMonth[i] //col end of month
FOR iZeile := nStart TO aDaysInMonth[i] + nStart - 1
cHeader1 := ALLTRIM(str(iZeile-nStart+1)) //Tage
if aDays[iZeile] = "So"
oWndPlan:say( nCurrentRows+3,36 + nColOffSet + (iZeile) *18, ;
cHeader1, RGB(63,63,63),RGB(125,236,175),planFont,.T.,.T.)
else
oWndPlan:say( nCurrentRows+3,36 + nColOffSet + (iZeile) *18, ;
cHeader1, RGB(63,63,63),16777215,planFont,.T., .T.)
ENDIF
NEXT
NEXT
IF (sx > 0 .AND. sx < 13) .AND. (sy > 0 .AND. sy < 38)
oWndPlan:say(sxTemp+20, syTemp-20, aPlan[sx, sy] + " # "+str(ctod(aPlan[sx, sy])-ctod(startDay)+ 1), RGB(63,63,63), RGB(125,236,175), planFont, .T. )
endif
oWndPlan:DispEnd( aInfo )
return nil
func f_LButtonUp(x,y)
IF sy > 0 // Quique
msginfo(startDay + " -- " + aPlan[sx, sy] + " Tage: " + str( ctod(aPlan[sx, sy])-ctod(startDay) +1 ))
ENDIF
lMove:=.f.
return nil
func f_MMoved(x,y)
IF sx <> (INT((x-30)/18 ) + 1) .OR. sx <> (INT( (y-50-10)/18 ) + 1 )
sx := INT((x-30)/18 ) + 1
sy := INT((y-50-10)/18 ) + 1
IF x < 30
sx := 0
x := 0
ENDIF
sxTemp := x
syTemp := 59 + sy * 18
oWndPlan:refresh()
ENDIF
return nil
func f_bLClicked(x,y)
local ITemp:=0
sx := INT((x-30)/18 ) + 1
sy := INT((y-50-10)/18 ) + 1
IF sy > 0 // Quique
startDay := aPlan[sx, sy]
nStartZeile := sx
ClickCol := INT((y - 30)/18)*18 + 18 + 7
ClickRow := (INT((x-30)/18 ))*18 + 30
FOR ITemp := 1 TO 12
aTemp[ITemp,1]:=0
NEXT
FillRect( oWndPlan:hDc, {ClickRow,ClickCol,ClickRow+18,ClickCol+18}, hBru )
oWndPlan:refresh()
lMove:=.t.
ENDIF
return nil