problem with moviong objects on the tabpage

This forum is for eXpress++ general support.
Post Reply
Message
Author
Zdeno Bielik
Posts: 147
Joined: Thu Jan 28, 2010 9:24 am
Location: Nitra, Slovakia
Contact:

problem with moviong objects on the tabpage

#1 Post by Zdeno Bielik »

Hi Roger,

moving objects in single window works without problems (test1). But if some objects are on the tabpage and I click on the object I want to move, it first moves down the height of bookmarks, and then can be moved where I want to (test 2 and 3).
For a clearer demonstration I do attach a sample, it is mainly to see if the height tabs larger.

Click on Test PushButton in each dialog window for start moving...

Code: Select all


#include "dcdialog.ch"
#include "appevent.ch"
#include 'dccursor.ch'

**************
Procedure Main()
**************

Private plDesignMode := .F.

Test1()
Test2()  && +3

RETURN

*

**************
Function Test1()
**************

LOCAL GetList[0], cTest := 'test     '

@ 1, 1 DCSAY 'Test:'
@ 1,10 DCGET cTest

@ 3,  1 DCPUSHBUTTON   CAPTION 'Test A' SIZE 15,1 ACTION { || MsgBox('TestA') }

@ 3, 20 DCPUSHBUTTONXP CAPTION 'Test B' SIZE 15,1 ACTION { || MsgBox('TestB') } SHADOW 6 RADIUS 10

@ 10, 1 DCSAY 'abc'

@ 10,30 DCPUSHBUTTON   CAPTION 'Design On' SIZE 15,1 ACTION { || M->plDesignMode := .T. } ;
        TOOLTIP 'Press Ctrl+O for Design OFF'

DCREAD GUI FIT MODAL HANDLER TestHandler REFERENCE GetList ADDBUTTONS

RETURN

*

**************
Function Test2()
**************

Xtest(1)  && this is from DOC, I just added Handler...
Xtest(2)  && and here I changed height and width of tabs

RETURN

*

***************
PROCEDURE Xtest(_nVersion)
***************

LOCAL oTabPage1, oTabPage2, oTabPage3, cDesc := Space(30),;
      aType := {'Star-Trek','Hollywood','Sports','Other'},;
      cType := Space(15), dDateOrig := Date(), dDateAcqu := Date(),;
      nOrigPrice := 0, nApprValue := 0, cMemo := '', ;
      GetList := {}

/* ---- Tab Page #1 ---- */

If ( _nVersion == 1 )

   @  0,0 DCTABPAGE oTabPage1 CAPTION 'Collection' ;
      SIZE 72,15 ;
      PREOFFSET 0 POSTOFFSET 85
Else

   @  0,0 DCTABPAGE oTabPage1 CAPTION 'Collection' ;
      SIZE 72,15 ;
      TABHEIGHT 50 TABWIDTH 15 ANGLE 30

EndIf



@  3,2  DCSAY "Description" GET cDesc SAYRIGHT PARENT oTabPage1

@  5,10  DCSAY "Type" PARENT oTabPage1 SAYSIZE 8

@  6,10 DCCOMBOBOX cType LIST aType SIZE 12,6 PARENT oTabPage1


/* ---- Tab Page #2 ---- */

@  0,0 DCTABPAGE oTabPage2 CAPTION 'Financial' ;
   RELATIVE oTabPage1

@  4,2 DCSAY "  Original Date" GET dDateOrig  PICT '99/99/9999' ;
   PARENT oTabPage2 SAYRIGHT

@  6,2 DCSAY "  Acquired Date" GET dDateAcqu  PICT '99/99/9999' ;
   PARENT oTabPage2 SAYRIGHT

@  8,2 DCSAY " Acquired Price" GET nOrigPrice PICT '9999.99'  ;
   PARENT oTabPage2 SAYRIGHT

@ 10,2 DCSAY "Appraised Value" GET nApprValue PICT '9999.99'  ;
   PARENT oTabPage2 SAYRIGHT

/* ---- Tab Page #3 ---- */

@  0,0 DCTABPAGE oTabPage3 CAPTION 'Memo' ;
   RELATIVE oTabPage2

@  5,2 DCMULTILINE cMemo PARENT oTabPage3 SIZE 65,8 ;
   FONT "10.Courier.Bold"



@ 17,30 DCPUSHBUTTON   CAPTION 'Design On' SIZE 15,1 ACTION { || M->plDesignMode := .T. } ;
        TOOLTIP 'Press Ctrl+O for Design OFF'    && Added by Zdeno


DCREAD GUI ;
   TITLE 'Tab-Page Demo' ;
   FIT ;
   ADDBUTTONS ;
   HANDLER TestHandler REFERENCE GetList    && Added by Zdeno

RETURN

*

*******************************
/*Static*/ FUNCTION TestHandler( nEvent, mp1, mp2, oXbp, oDialog, GetList, aApp )
*******************************

Local nWidth, nHeight
Local aCoords := {}

STATIC nCursor := POINTER_ARROW_1, nDragMode := 0

If ( nEvent == xbeP_Keyboard )

   If ( mp1 == xbeK_CTRL_O )
          M->plDesignMode := .F.
          nCursor         := POINTER_ARROW_1
          nDragMode       := 0
          DC_SetPointerTree( oDialog, nil, nCursor, 1 )
          DC_GetRefresh( GetList )
          RETURN DCGUI_IGNORE
   EndIf

Else

   If M->plDesignMode

       If ( nEvent == xbeM_Motion )

          nWidth := oXbp:CurrentSize()[1]
          nHeight := oXbp:CurrentSize()[2]
          IF oXbp == oDialog .OR. oXbp == oDialog:drawingArea .OR. Upper(oXbp:ClassName()) == 'XBPTABPAGE'
             nCursor := POINTER_ARROW_1
          ELSEIF mp1[1] >= nWidth - 5 .AND. mp1[2] >= nHeight - 5
             nDragMode := DCGUI_DRAG_RIGHT_TOP
             nCursor := POINTER_SIZE1_1
          ELSEIF mp1[1] >= nWidth - 5 .AND. mp1[2] <= 5
             nDragMode := DCGUI_DRAG_RIGHT_BOTTOM
             nCursor := POINTER_SIZE2_1
          ELSEIF mp1[1] <= 5 .AND. mp1[2] >= nHeight - 5
             nDragMode := DCGUI_DRAG_LEFT_TOP
             nCursor := POINTER_SIZE2_1
          ELSEIF mp1[1] <= 5 .AND. mp1[2] <= 5
             nDragMode := DCGUI_DRAG_LEFT_BOTTOM
             nCursor := POINTER_SIZE1_1
          ELSEIF mp1[1] <= 5
             nDragMode := DCGUI_DRAG_LEFT
             nCursor := POINTER_SIZE3_1
          ELSEIF mp1[1] >= nWidth - 5
             nDragMode := DCGUI_DRAG_RIGHT
             nCursor := POINTER_SIZE3_1
          ELSEIF mp1[2] <= 5
             nDragMode := DCGUI_DRAG_BOTTOM
             nCursor := POINTER_SIZE4_1
          ELSEIF mp1[2] >= nHeight - 5
             nDragMode := DCGUI_DRAG_TOP
             nCursor := POINTER_SIZE4_1
          ELSE
             nDragMode := DCGUI_DRAG_ENTIRE_OBJECT
             nCursor := POINTER_MOVE_1
          ENDIF
          IF IsMethod(oXbp,'SetPointer')
             oXbp:SetPointer( nil, nCursor, 1 )
          ENDIF

          RETURN DCGUI_IGNORE

       ELSEIF ( nEvent == xbeM_LbDown )

          aCoords := DC_MoveObject( oXbp, mp1, nDragMode, nCursor, { .F. } )

          RETURN DCGUI_IGNORE

       EndIf
   EndIf
EndIf

RETURN DCGUI_NONE

*

* EOF


Post Reply