But with this methos I cam move all controls into this dialog
I want NOT move the buttonbar on this dialog
it is possible ?
- Code: Select all Expand view
#Include "FiveWin.Ch"
#define BMP_H 18
#define BMP_V 18
#define TOTX 50
#define TOTY 30
#define D_WIDTH 4
#define D_HEIGHT 13
Static oScrWnd
Function Test()
Local oDlg ,nY,nX
Local aBmps := ARRAY( TOTY, TOTX )
Local aData := ARRAY( TOTY, TOTX )
Local nRow:=50
Local nCol:=0
DEFINE DIALOG oDlg from 10,5 to 70,150 Title "test"
oDlg:nStyle:= NOR( oDlg:nStyle, WS_VSCROLL )
oDlg:nStyle:= NOR( oDlg:nStyle, WS_HSCROLL )
For nY := 1 to TOTY
For nX := 1 To TOTX
@ nrow, ncol BITMAP aBmps[ nY, nX ] RESOURCE "VACIO" OF oDlg ;
SIZE BMP_H,BMP_V PIXEL
ncol:=ncol+BMP_V
Next nX
nCol := 0
nrow:=nRow+BMP_H
Next nY
Activate dialog oDlg ON INIT (crea_bar(oDlg),( oScrWnd:=TScrWnd():New(oDlg,1,300,1,500) ) )
RETURN NIL
function crea_bar(oDlg)
Local obar
DEFINE BUTTONBAR oBar OF oDlg SIZE 60, 60 2007
DEFINE BUTTON OF oBar ;
RESOURCE "attach" PROMPT "Attach" TOOLTIP "Attach"
RETURN NIL
//============================================================================
// FileName : SCROLL.PRG
// Purpose : Windows Scroll Class
// Author : Eric Yang
// Update History :
// Date Contents
// ---------- ---------------------------------------------------------------
// 1997.02.01
//
//============================================================================
#include "FiveWin.ch"
#ifndef TRUE
#define TRUE .T.
#define FALSE .F.
#endif
CLASS TScrWnd
DATA oWnd
DATA nVPos,nHPos
METHOD New( oWnd,nV1,nV2,nH1,nH2 ) CONSTRUCTOR
METHOD SetScroll( nV1,nV2,nH1,nH2 )
//-*------------------------------------------------------------
METHOD VScroll()
METHOD VScrollThumb()
METHOD VScrollTrack()
METHOD VScrollPgDown()
METHOD VScrollPgUp()
//-*-----------------------------
METHOD HScroll()
METHOD HScrollThumb()
METHOD HScrollTrack()
METHOD HScrollPgDown()
METHOD HScrollPgUp()
ENDCLASS
METHOD New( oWnd,nV1,nV2,nH1,nH2 ) CLASS TScrWnd
::nVPos := 0
::nHPos := 0
::oWnd := oWnd
::SetScroll( nV1,nV2,nH1,nH2 )
RETURN Self
METHOD SetScroll( nV1,nV2,nH1,nH2 ) CLASS TScrWnd
LOCAL aCoors1:={},aCoors2:={}
//--------------------------------------------------
//-* Vertical Scroll Bar
// ? ::oWnd:oVSCroll=NIL
if ::oWnd:oVScroll != NIL
// ? nV1,nV2
::oWnd:oVScroll:SetRange( nV1,nV2 )
::nVPos := ::oWnd:oVScroll:GetPos()
::oWnd:oVScroll:bGoDown := {|| ::VScroll() }
::oWnd:oVScroll:bGoUp := {|| ::VScroll() }
::oWnd:oVScroll:bPageUp := {|| ::VScrollPgUp() }
::oWnd:oVScroll:bPageDown := {|| ::VScrollPgDown() }
::oWnd:oVScroll:bGoTop := {|| ::VScroll() }
::oWnd:oVScroll:bGoBottom := {|| ::VScroll() }
::oWnd:oVScroll:nPgStep := 10
//::oWnd:oVScroll:lReDraw := TRUE
::oWnd:oVScroll:bPos := {|nPos| ::VScrollThumb(nPos) }
::oWnd:oVScroll:bTrack := {|nPos| ::VScrollTrack(nPos) }
endif
//--------------------------------------------------
//-* Horizontal Scroll Bar
if ::oWnd:oHScroll != NIL
::oWnd:oHScroll:SetRange( nH1,nH2 )
::nHPos := ::oWnd:oHScroll:GetPos()
::oWnd:oHScroll:bGoDown := {|| ::HScroll() }
::oWnd:oHScroll:bGoUp := {|| ::HScroll() }
::oWnd:oHScroll:bPageUp := {|| ::HScrollPgUp() }
::oWnd:oHScroll:bPageDown := {|| ::HScrollPgDown() }
::oWnd:oHScroll:bGoTop := {|| ::HScroll() }
::oWnd:oHScroll:bGoBottom := {|| ::HScroll() }
::oWnd:oHScroll:nPgStep := 10
//::oWnd:oHScroll:lReDraw := TRUE
::oWnd:oHScroll:bPos := {|nPos| ::HScrollThumb(nPos) }
::oWnd:oHScroll:bTrack := {|nPos| ::HScrollTrack(nPos) }
endif
//::oWnd:bKeyChar := {|nKey,nFlags| ScrollKey(nKey) }
//--------------------------------------------------
RETURN( NIL )
//STATIC FUNCTION ScrollKey(nKey)
//MsgInfo( "Key : "+str(nKey,10) )
//if nKey == K_ENTER
// goMainDlg:End()
// lRetVal := TRUE
//endif
//RETURN( NIL )
//=================================================================
//-* Vertical Scroll Bar
METHOD VScroll() CLASS TScrWnd
LOCAL nNewPos
if ::nVPos >= ::oWnd:oVScroll:nMin ;
.and. ::nVPos <= ::oWnd:oVScroll:nMax
nNewPos := ::oWnd:oVScroll:GetPos()
SysRefresh()
ScrollWindow( ::oWnd:hWnd, 0, ;
( ::nVPos-nNewPos )*D_HEIGHT, ;
0 , GetClientRect(::oWnd:hWnd) )
::nVPos := nNewPos
endif
RETURN( NIL )
METHOD VScrollThumb(nNewPos) CLASS TScrWnd
if ::nVPos >= ::oWnd:oVScroll:nMin ;
.and. ::nVPos <= ::oWnd:oVScroll:nMax
::oWnd:oVScroll:SetPos(nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, 0, ;
(::nVPos - nNewPos )*D_HEIGHT, ;
0 , GetClientRect(::oWnd:hWnd) )
::nVPos := nNewPos
endif
RETURN( NIL )
METHOD VScrollTrack(nNewPos) CLASS TScrWnd
if ::nVPos >= ::oWnd:oVScroll:nMin ;
.and. ::nVPos <= ::oWnd:oVScroll:nMax
::oWnd:oVScroll:SetPos(nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, 0, ;
(::nVPos - nNewPos )*D_HEIGHT, ;
0 , GetClientRect(::oWnd:hWnd) )
::nVPos := nNewPos
endif
RETURN( NIL )
METHOD VScrollPgDown() CLASS TScrWnd
LOCAL nNewPos
if ::nVPos < ::oWnd:oVScroll:nMax
nNewPos := ::nVPos + ::oWnd:oVScroll:nPgStep
nNewPos := iif(nNewPos > ::oWnd:oVScroll:nMax, ::oWnd:oVScroll:nMax, nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, 0, ;
( ::nVPos - nNewPos )*D_HEIGHT, ;
0 , GetClientRect(::oWnd:hWnd) )
::nVPos := nNewPos
endif
RETURN( NIL )
METHOD VScrollPgUp() CLASS TScrWnd
LOCAL nNewPos
if ::nVPos > ::oWnd:oVScroll:nMin
nNewPos := ::nVPos - ::oWnd:oVScroll:nPgStep
nNewPos := iif(nNewPos < ::oWnd:oVScroll:nMin,::oWnd:oVScroll:nMin,nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, 0, ;
( ::nVPos - nNewPos )*D_HEIGHT, ;
0 , GetClientRect(::oWnd:hWnd) )
::nVPos := nNewPos
endif
RETURN( NIL )
//=================================================================
//-* Horizontal Scroll Bar
METHOD HScroll() CLASS TScrWnd
LOCAL nNewPos
if ::nHPos >= ::oWnd:oHScroll:nMin ;
.and. ::nHPos <= ::oWnd:oHScroll:nMax
nNewPos := ::oWnd:oHScroll:GetPos()
SysRefresh()
ScrollWindow( ::oWnd:hWnd, ;
(::nHPos - nNewPos )*D_WIDTH,0, ;
0 , GetClientRect(::oWnd:hWnd) )
::nHPos := nNewPos
endif
RETURN( NIL )
METHOD HScrollThumb(nNewPos) CLASS TScrWnd
if ::nHPos >= ::oWnd:oHScroll:nMin ;
.and. ::nHPos <= ::oWnd:oHScroll:nMax
::oWnd:oHScroll:SetPos(nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, ;
(::nHPos - nNewPos )*D_WIDTH,0, ;
0 , GetClientRect(::oWnd:hWnd) )
::nHPos := nNewPos
endif
RETURN( NIL )
METHOD HScrollTrack(nNewPos) CLASS TScrWnd
if ::nHPos >= ::oWnd:oHScroll:nMin ;
.and. ::nHPos <= ::oWnd:oHScroll:nMax
::oWnd:oHScroll:SetPos(nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, ;
(::nHPos - nNewPos )*D_WIDTH,0, ;
0 , GetClientRect(::oWnd:hWnd) )
::nHPos := nNewPos
endif
RETURN( NIL )
METHOD HScrollPgDown() CLASS TScrWnd
LOCAL nNewPos
if ::nHPos < ::oWnd:oHScroll:nMax
nNewPos := ::nHPos + ::oWnd:oHScroll:nPgStep
nNewPos := iif(nNewPos > ::oWnd:oHScroll:nMax, ::oWnd:oHScroll:nMax, nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, ;
( ::nHPos - nNewPos )*D_WIDTH,0, ;
0 , GetClientRect(::oWnd:hWnd) )
::nHPos := nNewPos
endif
RETURN( NIL )
METHOD HScrollPgUp() CLASS TScrWnd
LOCAL nNewPos
if ::nHPos > ::oWnd:oHScroll:nMin
nNewPos := ::nHPos - ::oWnd:oHScroll:nPgStep
nNewPos := iif(nNewPos < ::oWnd:oHScroll:nMin,::oWnd:oHScroll:nMin,nNewPos)
SysRefresh()
ScrollWindow( ::oWnd:hWnd, ;
( ::nHPos - nNewPos )*D_WIDTH,0, ;
0 , GetClientRect(::oWnd:hWnd) )
::nHPos := nNewPos
endif
RETURN( NIL )
With Delphi Language I saw ( and also daniel Gill saw it) there is a class window with vertical and Horizontal scrollbar and If the user put the mpuse on center of this window can move the window as happened when you move a PDF File with Hand cursor and it is very nice
Why this method cannot create with our fwh language ?
thanks in advance