⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fform.class

📁 Gambas is a graphical development environment based on a Basic interpreter, like Visual Basic. It us
💻 CLASS
📖 第 1 页 / 共 3 页
字号:
  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 + -