Page 1 of 1
Scroll de controles - un primer prototipo
Posted: Wed Mar 01, 2006 12:02 am
by Antonio Linares
Aqui podeis descargar un ejemplo de scroll de controles:
http://hyperupload.com/download/ed4de01 ... l.zip.html
Posted: Wed Mar 01, 2006 7:41 am
by jlcapel
Antonio,
Estás que te sales!!
Saludos,
José Luis Capel
Posted: Wed Mar 01, 2006 7:56 am
by Antonio Linares
Jose Luis,
La cuestión es pensar bien donde implementarlo. Creo que se debe implementar en la clase TWindow, para que cualquier control pueda ser "scrolleable", así podremos tener paneles scrollables ó cajas de diálogo ó páginas de un folder.
Creo que por prioridad lo primero es implementar las cajas de diálogo no modales, luego los folders y finalmente dotar a TWindow de esta capacidad.
Posted: Wed Mar 01, 2006 8:02 am
by Carles
Antonio,
No te olvides la clase TPage(), q en las pocket creo q su uso va a venir muy bien.
Saludos.
C.
Posted: Wed Mar 01, 2006 8:04 am
by Antonio Linares
Carles,
Cierto
Posted: Wed Mar 01, 2006 8:08 am
by Antonio Linares
Como aún podemos tardar en tener todo listo, aquí os incluyo el código fuente del ejemplo. Ojo, hay que modificar la clase TSay como se indica y también ScrollWindow():
Code: Select all
#include "FWCE.ch"
#define GWL_STYLE (-16)
#define WS_VSCROLL 0x00200000
//----------------------------------------------------------------------------//
function Main()
local oWnd, oSay
local cName := Space( 20 ), cAddress := Space( 30 )
DEFINE WINDOW oWnd TITLE "Scroll"
@ 10, 10 SAY oSay PROMPT "" OF oWnd ;
SIZE oWnd:nWidth() - 18, oWnd:nHeight() - 40;
PIXEL BORDER COLOR "N/BG*"
@ 6, 3.8 SAY "Name:" OF oSay SIZE 40, 15
@ 7, 8 GET cName OF oSay SIZE 100, 18
@ 7.8, 2.1 SAY "Address:" OF oSay SIZE 50, 15
@ 9, 8 GET cAddress OF oSay SIZE 120, 18
SetWindowLong( oSay:hWnd, GWL_STYLE,;
nOr( GetWindowLong( oSay:hWnd, GWL_STYLE ), WS_VSCROLL ) )
ACTIVATE WINDOW oWnd
return nil
La Clase TSay (estas modificaciones, muy cambiadas, irán a TWindow):
Code: Select all
// FWPPC Class TSay (C) FiveTech Software 2005
#include "FiveWin.ch"
...
CLASS TSay FROM TControl
...
DATA nStart, nEnd
METHOD VScroll( nWParam, nLParam )
...
METHOD New( ... ) CLASS TSay
...
::nStart = 0
::nEnd = -1000
return Self
...
METHOD VScroll( nWParam, nLParam ) CLASS TSay
local nScrollCode := nLoWord( nWParam )
do case
case nScrollCode == SB_LINEUP
if ::nStart < 0
ScrollWindow( ::hWnd, 0, 10 )
::nStart += 10
endif
case nScrollCode == SB_LINEDOWN
if ::nStart > ::nEnd
ScrollWindow( ::hWnd, 0, -10 )
::nStart -= 10
endif
endcase
return 0
y finalmente ScrollWindow() queda así:
Code: Select all
BOOL ScrollWindow( HWND hWnd, int XAmount, int YAmount, CONST RECT *lpRect,
CONST RECT *lpClipRect )
{
return ScrollWindowEx( hWnd, XAmount, YAmount, lpRect, lpClipRect, NULL, NULL, SW_ERASE | SW_SCROLLCHILDREN );
}