📄 fform.class
字号:
DIM W AS Integer DIM H AS Integer DIM bMoveX AS Boolean DIM bMoveY AS Boolean DIM hParent AS CControl IF NOT Mouse.Left THEN RETURN 'PRINT "Control_MouseMove Mode ="; $iMode IF Mouse.Shift THEN CControl.SetGrid(FALSE) X = Mouse.X Y = Mouse.Y IF $iMode = MODE_CREATE THEN IF LAST.Mouse <> Mouse.Cross THEN LAST.Mouse = Mouse.Cross hParent = $hCurrent $hCurrent = CreateControl($sTool, hParent) FFormStack.RefreshAll $X = $X - hParent.Control.ClientX $Y = $Y - hParent.Control.ClientY IF hParent.Kind = "ScrollView" THEN $X = $X + hParent.Control.ScrollX $Y = $Y + hParent.Control.ScrollY ENDIF $hCurrent.Move($X, $Y) $hCurrent.Resize(MIN_WIDTH, MIN_HEIGHT) $hCurrent.Control.Mouse = Mouse.Cross ENDIF W = Mouse.ScreenX - $MX IF (W < 0) THEN W = Abs(W) X = $X - W bMoveX = TRUE ELSE X = $X ENDIF H = Mouse.ScreenY - $MY IF (H < 0) THEN H = Abs(H) Y = $Y - H bMoveY = TRUE ELSE Y = $Y ENDIF IF bMoveX OR bMoveY THEN $hCurrent.Move(X, Y) IF bMoveX THEN W = W + X - $hCurrent.Control.X IF bMoveY THEN H = H + Y - $hCurrent.Control.Y ENDIF $hCurrent.Resize(Max(MIN_WIDTH, W), Max(MIN_HEIGHT, H)) ELSE IF $iMode = MODE_MOVE THEN IF LAST = $hCurrent.Control THEN LAST.Mouse = Mouse.SizeAll WITH $hCurrent iDepX = Master.Control.X iDepY = Master.Control.Y Master.Move($X + Mouse.ScreenX - $MX, $Y + Mouse.ScreenY - $MY) iDepX = Master.Control.X - iDepX iDepY = Master.Control.Y - iDepY IF iDepX <> 0 OR iDepY <> 0 THEN FOR EACH hCtrl IN Selection IF hCtrl <> Master THEN hCtrl.Move(hCtrl.Control.X + iDepX, hCtrl.Control.Y + iDepY, TRUE) ENDIF NEXT ENDIF END WITH ENDIF ELSE IF $iMode = MODE_SELECT THEN DrawRectSelect(Mouse.ScreenX - $MX, Mouse.ScreenY - $MY) ENDIF CControl.SetGrid(TRUE)ENDPUBLIC SUB Control_MouseUp() hCont AS Container hCtrl AS CControl 'PRINT "Control_MouseUp Mode ="; $iMode IF $iMode = MODE_CREATE THEN 'LAST.Mouse = Mouse.Arrow UnSelectAll IF LAST.Mouse = Mouse.Cross THEN $hCurrent.Control.Mouse = Mouse.Arrow SelectCurrent(TRUE) ENDIF FToolBox.SetTool() ELSE IF $iMode = MODE_SELECT THEN $WS = $W $HS = $H DrawRectSelect(0, 0) IF Abs($WS) > 1 AND Abs($HS) > 1 THEN IF NOT $hCurrent.IsContainer() THEN $XS = $XS + $hCurrent.Control.X $YS = $YS + $hCurrent.Control.Y $hCurrent = $hCurrent.Parent ENDIF IF Selection.Count THEN IF Master.Parent <> $hCurrent THEN UnselectAll ELSE IF (Mouse.Control) = 0 THEN UnselectAll ENDIF ENDIF SelectIn($hCurrent, $XS, $YS, $WS, $HS) ELSE IF $hCurrent.Name = Name THEN UnselectAll ELSE IF $hCurrent.Selected THEN IF Master <> $hCurrent OR Selection.Count = 1 THEN UnselectCurrent ENDIF ELSE IF Master = NULL THEN SelectCurrent(TRUE) ELSE IF $hCurrent.Parent = Master.Parent THEN SelectCurrent ELSE UnSelectAll SelectCurrent(TRUE) ENDIF ENDIF ENDIF ENDIF LAST.Mouse = Mouse.Arrow $hCurrent = NULL $iMode = MODE_NOTHING RefreshPropertyENDPUBLIC SUB Control_Menu() CreateMenu mnuForm.PopupEND' TabStripPUBLIC SUB Control_Click() IF Object.Type(LAST) = "TabStrip" THEN WITH Control[LAST.Tag] .SetProperty("Picture", .Tag[LAST.Index]) .SetProperty("Text", LAST.Text) END WITH ENDIFENDPUBLIC FUNCTION CreateControl(sClass AS String, hParent AS CControl, OPTIONAL sName AS String) AS CControl DIM hCtrl AS CControl IF Len(sName) = 0 THEN sName = GetName(sClass) IF Control.Exist(sName) THEN sName = GetName(sClass) ' If the component is not loaded, then return null IF NOT CComponent.Classes.Exist(sClass) THEN Error.Raise("Component missing") hCtrl = NEW CControl(sName, sClass, hParent, ME) Control[sName] = hCtrl IF sClass = "Menu" THEN IF hParent.Name = Name THEN Menus.Add(hCtrl) ENDIF ENDIF RETURN hCtrl 'PRINT "< CreateControl "; sNameENDPUBLIC SUB AddControl(sClass AS String) DIM hParent AS CControl IF Master THEN IF Master.IsContainer() THEN hParent = Master ELSE hParent = Master.Parent ENDIF ELSE hParent = Control[Name] ENDIF hParent = CreateControl(sClass, hParent) 'hParent.Resize(MIN_WIDTH, MIN_HEIGHT) hParent.Resize(64, 32)ENDPRIVATE SUB RemoveControl(sName AS String) 'PRINT "> RemoveControl "; sName; " "; Control[sName] Control[sName].Control.Delete Control.Remove(sName) Modify 'PRINT "< RemoveControl "; sName; " "; Control[sName]ENDPRIVATE FUNCTION GetName(sClass AS String) AS String iNum AS Integer sName AS String hCtrl AS CControl DO iNum = iNum + 1 sName = sClass & Trim(CStr(iNum)) IF NOT Control.Exist(sName) THEN EXIT LOOP RETURN sNameENDPUBLIC PROCEDURE UnSelectAll() DIM hCtrl AS CControl FOR EACH hCtrl IN Selection hCtrl.UnSelect(ME, TRUE) NEXT Selection.Clear Master = NULL SelectionChange 'RefreshPropertyENDPRIVATE PROCEDURE SelectCurrent(OPTIONAL bMaster AS Boolean) $hCurrent.Select(ME, bMaster) SelectionChangeENDPRIVATE SUB UnSelectCurrent() $hCurrent.UnSelect(ME) SelectionChange 'RefreshPropertyENDPRIVATE SUB SelectIn(hParent AS CControl, X AS Integer, Y AS Integer, W AS Integer, H AS Integer) DIM hChild AS Control DIM hCtrl AS CControl DIM bFirst AS Boolean IF W < 0 THEN X = X + W W = -W ENDIF IF H < 0 THEN Y = Y + H H = -H ENDIF 'PRINT hParent.Name; X; Y; W; H IF W < 2 OR H < 2 THEN RETURN X = X - hParent.Control.ClientX Y = Y - hParent.Control.ClientY IF hParent.Kind = "ScrollView" THEN X = X + hParent.Control.ScrollX Y = Y + hParent.Control.ScrollY ENDIF bFirst = TRUE FOR EACH hChild IN hParent.Control.Children hCtrl = Control[hChild.Tag] IF IsNull(hCtrl) THEN CONTINUE 'panel IF hChild.X >= (X + W) THEN CONTINUE IF hChild.Y >= (Y + H) THEN CONTINUE IF (hChild.X + hChild.W) < X THEN CONTINUE IF (hChild.Y + hChild.H) < Y THEN CONTINUE hCtrl.Select(ME, bFirst) $bSelChange = TRUE bFirst = FALSE NEXT IF $bSelChange THEN SelectionChange ENDIFENDPRIVATE SUB DrawRectSelect(W AS Integer, H AS Integer) DIM X AS Integer DIM Y AS Integer IF W = $W AND H = $H THEN RETURN Draw.Begin(ME) Draw.Invert = TRUE Draw.ForeColor = Color.White Draw.LineWidth = 1 Draw.LineStyle = LINE.Dash X = $MX - ME.ScreenX Y = $MY - ME.ScreenY IF $W <> 0 AND $H <> 0 THEN Draw.Rect(X, Y, $W, $H) IF W <> 0 AND H <> 0 THEN Draw.Rect(X, Y, W, H) Draw.End $W = W $H = HENDPUBLIC SUB Form_Activate() $bDoNotModify = FALSE Project.Activate(ME) 'FProperty.Show 'FToolBox.ShowENDPUBLIC SUB DeleteSelection() DIM hCtrl AS CControl DIM cCopy AS NEW Object[] DIM hParent AS CControl IF Selection.Count THEN hParent = Master.Parent FOR EACH hCtrl IN Selection cCopy.Add(hCtrl) NEXT UnSelectAll FOR EACH hCtrl IN cCopy hCtrl.Delete NEXT Modify hParent.Select(ME, TRUE) SelectionChange RefreshProperty FFormStack.RefreshAll ENDIF 'STOPENDPUBLIC SUB CopySelection() DIM hCtrl AS CControl IF Selection.Count = 0 THEN RETURN ResetSave $iSaveX = Master.GetProperty("X") $iSaveY = Master.GetProperty("Y") FOR EACH hCtrl IN Selection $iSaveX = Min($iSaveX, hCtrl.GetProperty("X")) $iSaveY = Min($iSaveY, hCtrl.GetProperty("Y")) NEXT FOR EACH hCtrl IN Selection SaveOne(hCtrl) NEXT Clipboard.Copy($sSave, FORM_CLIPBOARD_FORMAT) $iSaveX = 0 $iSaveY = 0ENDFUNCTION CanPaste() AS Boolean RETURN Clipboard.Format = FORM_CLIPBOARD_FORMATENDPUBLIC SUB PasteSelection() DIM hParent AS CControl DIM sData AS String sData = Clipboard.Paste(FORM_CLIPBOARD_FORMAT) IF NOT sData THEN RETURN IF Selection.Count = 1 THEN hParent = Master ELSE IF Selection.Count > 1 THEN hParent = Master.Parent ELSE hParent = Control[Name] ENDIF IF NOT hParent.IsContainer() THEN hParent = hParent.Parent ENDIF UnSelectAll 'PRINT Clipboard.Text $bSelectNew = TRUE FromString(sData, hParent) $bSelectNew = FALSE RefreshProperty FFormStack.RefreshAllENDPRIVATE SUB RefreshProperty(OPTIONAL bForce AS Boolean) IF $bSelChange OR bForce THEN RefreshMenu FProperty.RefreshAll $bSelChange = FALSE ENDIFENDPUBLIC SUB Modify(OPTIONAL bReset AS Boolean) DIM hEditor AS FEditor IF Project.ReadOnly THEN RETURN IF $bDoNotModify THEN RETURN IF $bModify <> bReset THEN RETURN $bModify = NOT bReset DrawTitle IF $bModify THEN hEditor = GetEditor() IF hEditor THEN hEditor.Scan = NULL ENDIFENDPUBLIC FUNCTION IsModified() AS Boolean RETURN $bModifyENDPRIVATE SUB DrawTitle() DIM sTitle AS String sTitle = File.Name(Path) IF $bModify THEN sTitle = sTitle & " [" & ("modified") & "]" ME.Title = sTitle '& " - " & Project.NameENDPUBLIC SUB mnuRaise_Click() DIM hCtrl AS CControl FOR EACH hCtrl IN Selection hCtrl.Raise NEXT FFormStack.RefreshAllENDPUBLIC SUB mnuLower_Click() DIM hCtrl AS CControl FOR EACH hCtrl IN Selection hCtrl.Lower NEXT FFormStack.RefreshAllENDPUBLIC SUB mnuArrangeHor_Click() ArrangeContainer(NULL, Arrange.Horizontal)ENDPUBLIC SUB mnuArrangeVer_Click() ArrangeContainer(NULL, Arrange.Vertical)ENDPUBLIC SUB mnuArrangeLeftRight_Click()
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -