SAOliveira
MetroPnel, por defecto, pone el Scroll Horizontal si el número de botones ocupa más espacio que el ancho de pantalla
MetroPnel, by default, puts the Horizontal Scroll if the number of buttons occupies more space than the screen width
Usando el ejemplo de ..\Samples\metrptst.prg
Using the example .. \ Samples \ metrptst.prg
Yo lo he conseguido modificando la clase MetroPnel de la siguiente forma:
I've gotten modifying MetroPnel class as follows:
Crear una nueva DATA
Create a new DATA
In the Paint METHOD, modify
Code: Select all
METHOD Paint() CLASS TMetroPanel
local aInfo
local oRect := ::GetCliRect()
local hScrollBrush, hThumbBrush
local nBarTotal
aInfo := ::DispBegin()
FillRect( ::hDC, oRect:aRect, ::oBrush:hBrush )
::Say( ( ::nBtnSize - ::oFont:nHeight ) / 2, ::nMetroTop, ::cTitle,,, ::oFont, .t., .t. )
if !::lMHScroll // Aqui
::nScrollRange := 0
endif
if ::nScrollRange > 0
hScrollBrush := CreateSolidBrush( ::nClrScroll )
hThumbBrush := CreateSolidBrush( ::nClrThumb )
::nThumbWidth := Int( ::nThumbSize * ( oRect:nWidth - 120 ) )
nBarTotal := oRect:nWidth - 120 - ::nThumbWidth
::nThumbPos := Int( Abs( ::nOffSet / ::nScrollRange ) * nBarTotal ) + 60
oRect:nTop := oRect:nBottom - SCRLB_HEIGHT
oRect:nHeight := SCRLB_HEIGHT
::nScrollBarTop := oRect:nTop
::nScrollRatio := ( ::nScrollRange / nBarTotal )
FillRect( ::hDC, oRect:aRect, hScrollBrush )
FillRect( ::hDC, { oRect:nTop, oRect:nLeft + ::nThumbPos, oRect:nBottom, ;
oRect:nLeft + ::nThumbPos + ::nThumbWidth }, hThumbBrush )
DeleteObject( hScrollBrush )
DeleteObject( hThumbBrush )
MoveTo( ::hDC, oRect:nLeft + 32, oRect:nTop + 4 )
LineTo( ::hDC, oRect:nLeft + 24, oRect:nTop + 10, ::hPen )
LineTo( ::hDC, oRect:nLeft + 32, oRect:nTop + 16, ::hPen )
MoveTo( ::hDC, oRect:nRight - 32, oRect:nTop + 4 )
LineTo( ::hDC, oRect:nRight - 24, oRect:nTop + 10, ::hPen )
LineTo( ::hDC, oRect:nRight - 32, oRect:nTop + 16, ::hPen )
else
if ::lMHScroll // Aqui
::nScrollBarTop := oRect:nBottom + 2
endif
endif
.../...
and the METHOD Arrange, modify
Code: Select all
.../...
next nGroup
::nMetroWidth := nGrpRight - ::nOffSet
if ::lMHScroll // Aqui
::nScrollRange := Max(( ::nMetroWidth - ScreenWidth() ), ::nScrollRange )
::nScrollRange := Max( 0, ::nScrollRange )
endif
::nThumbSize := 1 - ( ::nScrollRange / ::nMetroWidth )
::lArranged := .t.
return Self
Instructions for use ( Using the example .. \ Samples \ metrptst.prg )
Code: Select all
function Main( cParam )
local oWnd, oBar, oMetro, oBrush
local cTitle := "Start"
SET DATE ITALIAN
SET CENTURY ON
DEFINE WINDOW oWnd TITLE cTitle STYLE nOr( WS_POPUP, WS_MAXIMIZE );
COLOR CLR_WHITE, CLR_GREEN
oMetro := MakeMetroPanel( oWnd )
oMetro:lMHScroll := .F. // Aqui
.../....