PUBLIC goForm
goForm = CREATEOBJECT("Pentacle")
goForm.Show()
DEFINE CLASS Pentacle AS FORM
Caption = "Pentacle: 双击保存"
Width = 340
Height = 340
AllowOutput = .F.
TempFile = ""
PROCEDURE Init
= SYS(602, 0)
SET CLASSLIB TO HOME() + "FFC\_GDIPLUS.VCX" ADDITIVE
ENDPROC
PROCEDURE Paint
LOCAL loGraphics
loGraphics = CREATEOBJECT("GpGraphics")
loGraphics.CreateFromHWND(THIS.HWnd)
THIS.DrawPentacle(loGraphics, 170, 140, 130, 0)
THIS.DrawString(loGraphics, "红星闪闪放光彩", 0, 260, 320, 60)
ENDPROC
PROCEDURE DblClick
LOCAL lcFileName
lcFileName = PUTFILE("", "temp", "jpg")
IF EMPTY(lcFileName) = .T.
RETURN
ENDIF
THIS.SavePicture(lcFileName)
IF FILE((THIS.TempFile)) = .T.
DELETE FILE (THIS.TempFile)
ENDIF
THIS.Paint()
ENDPROC
PROCEDURE Destroy
= SYS(602, 1)
ENDPROC
PROCEDURE DrawPentacle
LPARAMETERS toGraphics, tnX, tnY, tnR, tnA
LOCAL loPen, loBrush, loBrush2, lnR, laArray[11, 2], lnA, lnX, lnY, ;
laPoints[3, 2]
loPen = CREATEOBJECT("GpPen", CREATEOBJECT("GpColor", 255, 0, 0))
loBrush = CREATEOBJECT("GpSolidBrush", CREATEOBJECT("GpColor", 255, 0, 0))
loBrush2 = CREATEOBJECT("GpSolidBrush", ;
CREATEOBJECT("GpColor", 255, 120, 120))
tnA = tnA - 90
lnR = SIN(DTOR(18))*tnR/SIN(DTOR(126))
FOR i = 1 TO 5
lnA = tnA + 72*i
lnX = tnR*COS(DTOR(lnA)) + tnX
lnY = tnR*SIN(DTOR(lnA)) + tnY
laArray[i*2 - 1, 1] = lnX
laArray[i*2 - 1, 2] = lnY
lnA = tnA + 36 + 72*i
lnX = lnR*COS(DTOR(lnA)) + tnX
lnY = lnR*SIN(DTOR(lnA)) + tnY
laArray[i*2, 1] = lnX
laArray[i*2, 2] = lnY
ENDFOR
laArray[11, 1] = tnX
laArray[11, 2] = tnY
FOR i = 1 TO 11
FOR j = 1 TO 11
IF ABS(i - j) = 1 OR ABS(i - j) = 9 OR INLIST(11, i, j) = .T.
toGraphics.DrawLine(loPen, laArray[i, 1], laArray[i, 2], ;
laArray[j, 1], laArray[j, 2])
ENDIF
ENDFOR
ENDFOR
FOR i = 1 TO 5
laPoints[1, 1] = laArray[i*2 - 1, 1]
laPoints[1, 2] = laArray[i*2 - 1, 2]
laPoints[2, 1] = laArray[i*2, 1]
laPoints[2, 2] = laArray[i*2, 2]
laPoints[3, 1] = laArray[11, 1]
laPoints[3, 2] = laArray[11, 2]
toGraphics.FillPolygon(loBrush, @laPoints, 1, 1)
laPoints[1, 1] = laArray[i*2, 1]
laPoints[1, 2] = laArray[i*2, 2]
laPoints[2, 1] = laArray[IIF(i = 5, 1, i*2 + 1), 1]
laPoints[2, 2] = laArray[IIF(i = 5, 1, i*2 + 1), 2]
laPoints[3, 1] = laArray[11, 1]
laPoints[3, 2] = laArray[11, 2]
toGraphics.FillPolygon(loBrush2, @laPoints, 1, 1)
ENDFOR
ENDPROC
PROCEDURE DrawString
LPARAMETERS toGraphics, tcString, tnLeft, tnTop, tnWidth, tnHeight
LOCAL loBounds, loBrush, loFont, loStringFormat
tcString = STRCONV(tcString, 5) + CHR(0)
loBounds = CREATEOBJECT("GpRectangle", tnLeft, tnTop, tnWidth, tnHeight)
loBrush = CREATEOBJECT("GpSolidBrush")
loBrush.Create()
loFont = CREATEOBJECT("GpFont")
loFont.Create("楷体_GB2312", 32, 3, 2)
loStringFormat = CREATEOBJECT("GpStringFormat")
loStringFormat.Create()
loStringFormat.FormatFlags = 4096
loStringFormat.Alignment = 1
loStringFormat.LineAlignment = 1
loStringFormat.Trimming = 1
loBounds.X = loBounds.X + 3
loBounds.Y = loBounds.Y + 3
loBrush.BrushColor = CREATEOBJECT("GpColor", 120, 120, 120)
toGraphics.DrawStringW(tcString, loFont, loBounds, loStringFormat, loBrush)
loBounds.X = loBounds.X - 3
loBounds.Y = loBounds.Y - 3
loBrush.BrushColor = CREATEOBJECT("GpColor", 255, 255, 0)
toGraphics.DrawStringW(tcString, loFont, loBounds, loStringFormat, loBrush)
ENDPROC
PROCEDURE SavePicture
LPARAMETERS tcFileName
LOCAL lcTempFile, lcData, loImage, loForm, loGraphics
lcTempFile = ADDBS(SYS(2023)) + SUBSTR(SYS(2015), 3, 10) + ".BMP"
lcData = [424D3A0000000000000036000000280000000100000001000000010018] + ;
[000000000004000000C40E0000C40E00000000000000000000FFFFFF00]
= STRTOFILE(STRCONV(lcData, 16), lcTempFile)
loImage = CREATEOBJECT("GpImage")
loImage.CreateFromFile(lcTempFile)
loImage = loImage.GetThumbnailImage(THIS.Width, THIS.Height)
loGraphics = CREATEOBJECT("GpGraphics")
loGraphics.CreateFromImage(loImage)
THIS.DrawPentacle(loGraphics, 170, 140, 130, 0)
THIS.DrawString(loGraphics, "红星闪闪放光彩", 0, 260, 320, 60)
loImage.SaveToFile(tcFileName, "image/jpeg", "quality=100")
THIS.TempFile = lcTempFile
ENDPROC
ENDDEFINE