Scroll de controles - un primer prototipo

Post Reply
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Scroll de controles - un primer prototipo

Post by Antonio Linares »

Aqui podeis descargar un ejemplo de scroll de controles:
http://hyperupload.com/download/ed4de01 ... l.zip.html

Image
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
jlcapel
Posts: 229
Joined: Wed Oct 12, 2005 5:32 pm
Location: Valencia - España
Contact:

Post by jlcapel »

Antonio,

Estás que te sales!!

Saludos,
José Luis Capel :D
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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.
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Carles
Posts: 937
Joined: Fri Feb 10, 2006 2:34 pm
Location: Barcelona
Contact:

Post by Carles »

Antonio,

No te olvides la clase TPage(), q en las pocket creo q su uso va a venir muy bien.

Saludos.
C.
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post by Antonio Linares »

Carles,

Cierto :)
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
Posts: 37481
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Post 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 );
}
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply