📄 ficontool.class
字号:
' Gambas class fileSTATIC PRIVATE $cColor AS NEW Integer[]STATIC PRIVATE $hTile AS PicturePRIVATE $hCurrent AS FIconEditorPRIVATE $hLast AS ToolButtonPRIVATE $hTool AS ToolButtonPRIVATE $X AS IntegerPRIVATE $Y AS IntegerPRIVATE $X2 AS IntegerPRIVATE $Y2 AS IntegerPRIVATE $iColor AS IntegerPRIVATE $iForeground AS IntegerPRIVATE $iBackground AS IntegerPRIVATE CONST COORD_HIDE AS Integer = 1048576PRIVATE $iLastCoordX AS IntegerPRIVATE $iLastCoordY AS IntegerPRIVATE $cMode AS NEW CollectionPRIVATE $iMouse AS IntegerSTATIC PUBLIC SUB _init() DIM sColor AS String FOR EACH sColor IN Split("000000,FFFFFF,0000FF,00FF00,FF0000,00FFFF,FFFF00,FF00FF,7F7F7F,BFBFBF,00007F,007F00,7F0000,007F7F,7F7F00,7F007F,3F3F3F,FF8000,43C7FF") $cColor.Add(Val("&H" & sColor & "&")) NEXTENDPUBLIC SUB _new() DIM sText AS String DIM hCtrl AS Control $cMode["flip"] = 0 $cMode["rect"] = 0 $cMode["circle"] = 0 $cMode["fill"] = 0 $cMode["select"] = 0 $cMode["move"] = 0 $hTool = btnMove '$hTool.Border = Border.Sunken $hTool.Value = TRUE $iBackground = Color.White $iForeground = Color.Black $iLastCoordX = COORD_HIDE $iLastCoordY = COORD_HIDE FOR EACH hCtrl IN ME.Children IF hCtrl.Tag THEN hCtrl.Design = TRUE NEXT $hTile = Picture["img/16/tile.png"] Config.LoadWindow(ME, "/FIconTool") btnSave.Enabled = NOT Project.ReadOnlyENDPUBLIC SUB Activate(hEditor AS FIconEditor) $hCurrent = hEditorENDPUBLIC SUB DeActivate(hEditor AS FIconEditor) IF $hCurrent <> hEditor THEN RETURN $hCurrent = NULL ME.HideENDPUBLIC SUB btnTool_MouseDown() LAST.Value = TRUE 'LAST.Border = Border.SunkenENDPRIVATE SUB ChangeMode(hImage AS ToolButton, sMode AS String, sLstPict AS String, sLstToolTip AS String) DIM iMode AS Integer DIM aLstPict AS String[] DIM aLstToolTip AS String[] aLstPict = Split(sLstPict) aLstToolTip = Split(sLstToolTip) iMode = ($cMode[sMode] + 1) MOD aLstPict.Count hImage.Picture = Picture["img/16" &/ aLstPict[iMode] & ".png"] hImage.ToolTip = aLstToolTip[iMode] $cMode[sMode] = iModeENDPUBLIC SUB btnTool_MouseUp() DIM hLast AS ToolButton DIM bCommand AS Boolean DIM bUp AS Boolean hLast = LAST bCommand = TRUE SELECT CASE hLast.Tag CASE "zoom" IF Mouse.Left THEN $hCurrent.ZoomIn ELSE IF Mouse.Right THEN $hCurrent.ZoomOut ENDIF CASE "save" $hCurrent.Save CASE "undo" $hCurrent.Undo CASE "clear" $hCurrent.Clear CASE "swap" $hCurrent.SwapColor(Mouse.Left) CASE "paste" $hCurrent.DoPaste hLast.Value = FALSE IF $hTool <> btnSelect THEN $hLast = btnSelect RevertTool ENDIF RETURN CASE "flip" IF Mouse.Left THEN $hCurrent.DoFlip ELSE ChangeMode(btnFlip, "flip", "flip-h,flip-v,rotate,rotate-back", ("Horizontal flip,Vertical flip,Rotate clockwise,Rotate counter-clockwise")) ENDIF DEFAULT bCommand = FALSE END SELECT IF bCommand THEN 'hLast.Border = Border.None hLast.Value = FALSE RETURN ENDIF 'IF Button = 1 OR hLast <> $hTool THEN 'ELSE SELECT CASE hLast.Tag CASE "rect" IF Mouse.Right THEN ChangeMode(btnRect, "rect", "square,square-f,square-fr", ("Rectangle,Filled rectangle,Filled delimited rectangle")) ENDIF CASE "circle" IF Mouse.Right THEN ChangeMode(btnCircle, "circle", "circle,circle-f,circle-fr", ("Ellipse,Filled ellipse,Filled delimited ellipse")) ENDIF CASE "fill" IF Mouse.Right THEN ChangeMode(btnFill, "fill", "fill,fill-alt", ("Flood fill,Patterned flood fill")) ENDIF CASE "select" IF Mouse.Left THEN IF hLast = $hTool THEN IF NOT $hCurrent.HasSelection() THEN $hCurrent.SelectAll ELSE $hCurrent.HideSelection ENDIF ELSE $hCurrent.HideSelection ENDIF ELSE IF Mouse.Right THEN ChangeMode(btnSelect, "select", "frame,frame-opaque", ("Select and transparent paste,Select and opaque paste")) $hCurrent.RefreshPaste ENDIF 'CASE "move" ' ' IF Button AND Mouse.Right THEN ' ChangeMode(imgMove, "move", "scroll,move",("Move,Translate")) ' ENDIF END SELECT 'ENDIF $hLast = $hTool $hTool = hLast IF $hLast THEN IF $hLast <> $hTool THEN '$hLast.Border = Border.None $hLast.Value = FALSE ENDIF ENDIF ChangeToolENDPUBLIC SUB ChangeTool() $hTool.Value = TRUE '$hTool.Border = Border.Sunken IF $hTool <> $hLast AND $hLast <> NULL THEN IF $hLast.Tag = "select" THEN $hCurrent.HideSelection ENDIF ENDIF SELECT $hTool.Tag CASE "move" SetIcon(Mouse.SizeAll) CASE "pen" SetIcon(Mouse.Arrow) CASE ELSE SetIcon(Mouse.Cross) END SELECTENDPUBLIC SUB RevertTool() '$hTool.Border = Border.None $hTool.Value = FALSE $hTool = $hLast '$hTool.Border = Border.Sunken $hTool.Value = TRUE ChangeToolENDPUBLIC SUB dwgColor_Draw() DIM X AS Integer DIM Y AS Integer DIM RX AS Integer DIM RY AS Integer DIM C AS Integer DIM CC AS Integer Draw.LineStyle = LINE.Solid FOR Y = 0 TO 4 RX = 0 FOR X = 0 TO 3 IF C < $cColor.Count THEN CC = $cColor[C] ELSE CC = -1 ENDIF INC C RedrawColor(CC, RX, RY, 25, 25) RX = RX + 24 NEXT RY = RY + 24 NEXTENDPUBLIC SUB dwgColor_MouseDown() DIM C AS Integer C = (Mouse.Y \ 24) * 4 + (Mouse.X \ 24) IF C < $cColor.Count THEN C = $cColor[C] ELSE C = -1 ENDIF IF Mouse.Left THEN $iForeground = C ELSE $iBackground = C ENDIF RefreshColorENDPRIVATE SUB RefreshColor() dwgForeground.Refresh dwgBackground.RefreshENDPUBLIC SUB SetForeground(iColor AS Integer) $iForeground = iColor RefreshColorENDPUBLIC SUB SetBackground(iColor AS Integer) $iBackground = iColor RefreshColorENDPRIVATE SUB RedrawColor(iColor AS Integer, X AS Integer, Y AS Integer, W AS Integer, H AS Integer) IF iColor >= 0 THEN Draw.FillStyle = Fill.Solid Draw.FillColor = iColor Draw.Rect(X, Y, W + 1, H + 1) ELSE IF iColor = -1 THEN Draw.FillX = X Draw.FillY = Y Draw.Tile($hTile, X, Y, W + 1, H + 1) Draw.FillStyle = Fill.None Draw.FillColor = Color.Black Draw.Rect(X, Y, W, H) ELSE Draw.FillStyle = Fill.Solid Draw.FillColor = Color.Black Draw.Rect(X, Y, W, H) Draw.FillColor = Color.White Draw.Rect(X + W \ 2, Y, W \ 2 + 1, H \ 2 + 1) Draw.Rect(X, Y + H \ 2, W \ 2 + 1, H \ 2 + 1) ENDIFENDPUBLIC SUB dwgForeground_Draw() Draw.LineStyle = LINE.None 'LINE.Solid RedrawColor($iForeground, 0, 0, dwgForeground.Width, dwgForeground.Height)ENDPUBLIC SUB dwgBackground_Draw() Draw.LineStyle = LINE.None 'LINE.Solid RedrawColor($iBackground, 0, 0, dwgBackground.Width, dwgBackground.Height)ENDPUBLIC FUNCTION GetColor(iButton AS Integer) AS Integer IF iButton = 1 THEN RETURN $iForeground ELSE RETURN $iBackground ENDIFENDPUBLIC SUB RefreshCoord(X AS Integer, Y AS Integer) IF X <> $iLastCoordX OR Y <> $iLastCoordY THEN $iLastCoordX = X $iLastCoordY = Y IF X = COORD_HIDE OR Y = COORD_HIDE THEN lblCoord.Text = "" ELSE lblCoord.Text = Subst("&1 x &2", X, Y) ENDIF ENDIFENDPUBLIC SUB HideCoord() RefreshCoord(COORD_HIDE, COORD_HIDe)ENDPUBLIC SUB dwgForeground_MouseUp() Dialog.Color = $iForeground IF Dialog.SelectColor() THEN RETURN $iForeground = Dialog.Color RefreshColorENDPUBLIC SUB dwgBackground_MouseUp() Dialog.Color = $iBackground IF Dialog.SelectColor() THEN RETURN $iBackground = Dialog.Color RefreshColorENDPUBLIC SUB imgExchange_MouseDown() SWAP $iForeground, $iBackground RefreshColorENDPUBLIC FUNCTION OtherColor(C AS Integer) AS Integer IF C = $iBackground THEN RETURN $iForeground ELSE RETURN $iBackground ENDIFENDPUBLIC FUNCTION GetMode(sFunc AS String) AS Integer RETURN $cMode[sFunc]ENDPUBLIC FUNCTION GetTool() AS String RETURN $hTool.TagENDPUBLIC SUB Form_Hide() Config.SaveWindow(ME, "/FIconTool")ENDPRIVATE SUB SetIcon(iMouse AS Integer) $iMouse = iMouse $hCurrent.Form_EnterENDPUBLIC FUNCTION GetMouse() AS Integer RETURN $iMouseEND
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -