Page 1 of 1

Animacion de Ventamas

PostPosted: Sun Mar 26, 2017 11:12 pm
by devtuxtla
Hola Fivewinnes


Desde la version de xHarbour 0.99 he utilizado este codigo para animar aleatoriamente el inicio y final de cada ventana, sin embargo con la version de xHarbour 1.2.3. (build 20161218) y Bc7 me envia en error 9003.
Con esta version ultima de xHarbour que cambia en el llamado de esta API ?
(es una aportacion del foro)

Code: Select all  Expand view


ACTIVATE DIALOG oPD CENTERED ON INIT NW_ANIMA( oPD )  ;
                    Valid( Fade( oPD ), .T. )

*--------------------------------------------------------------*
FUNCTION NW_ANIMA( oDlg )
*--------------------------------------------------------------*
LOCAL nSel:= nRandom(6)
LOCAL cAni:= ""

IF nSel == 1
   //a) desde la esquina inferior izquierda hasta la esquina superior derecha:
   cAni:= AW_VER_NEGATIVE + AW_HOR_POSITIVE + AW_SLIDE + AW_ACTIVATE
ELSEIF nSel == 2
   //b) desde la esquina inferior derecha hasta la esquina superior izquierda:
   cAni:= AW_HOR_NEGATIVE + AW_VER_NEGATIVE + AW_SLIDE + AW_ACTIVATE
ELSEIF nSel == 3
   //c) desde la esquina superior derecha hasta la esquina inferior izquierda:
   cAni:= AW_HOR_NEGATIVE + AW_VER_POSITIVE + AW_SLIDE + AW_ACTIVATE
ELSEIF nSel == 4
   //d) Aparecer desplazandose de izquierda a derecha
   cAni:= AW_HOR_POSITIVE + AW_SLIDE + AW_ACTIVATE
ELSEIF nSel == 5
   //e) desde la esquina superior izquierda hasta la esquina inferior derecha:
   cAni:= AW_HOR_POSITIVE + AW_VER_POSITIVE + AW_SLIDE + AW_ACTIVATE
ELSEIF nSel == 6
   //f) aparecer desde el centro:
   cAni:= AW_CENTER + AW_SLIDE + AW_ACTIVATE
ELSEIF nSel == 0
   cAni:= AW_BLEND
ENDIF
 
AnimateWindow( oDlg:hWnd, 500, cAni )

oDlg:Refresh()

RETURN 0


DLL32 FUNCTION AnimateWindow( hWnd As LONG, dwTime As LONG, dwFlags As LONG ) AS LONG PASCAL ;
               from "AnimateWindow" lib "user32.DLL"


*--------------------------------------------------------------*
FUNCTION fade( oDlg, oWner )
*--------------------------------------------------------------*
LOCAL nSel:= nRandom(6)
LOCAL cAni:= AW_VER_NEGATIVE + AW_HOR_POSITIVE + AW_SLIDE + AW_HIDE

IF nSel == 1
   //a) desde la esquina inferior izquierda hasta la esquina superior derecha:
   cAni:= AW_VER_NEGATIVE + AW_HOR_POSITIVE + AW_SLIDE + AW_HIDE
ELSEIF nSel == 2
   //b) desde la esquina inferior derecha hasta la esquina superior izquierda:
   cAni:= AW_HOR_NEGATIVE + AW_VER_NEGATIVE + AW_SLIDE + AW_HIDE
ELSEIF nSel == 3
   //c) desde la esquina superior derecha hasta la esquina inferior izquierda:
   cAni:= AW_HOR_NEGATIVE + AW_VER_POSITIVE + AW_SLIDE + AW_HIDE
ELSEIF nSel == 4
   //d) Aparecer desplazandose de izquierda a derecha
   cAni:= AW_HOR_POSITIVE + AW_SLIDE + AW_HIDE
ELSEIF nSel == 5
   //e) desde la esquina superior izquierda hasta la esquina inferior derecha:
   cAni:= AW_HOR_POSITIVE + AW_VER_POSITIVE + AW_SLIDE + AW_HIDE
ELSEIF nSel == 6
   //f) aparecer desde el centro:
   cAni:= AW_CENTER + AW_SLIDE + AW_HIDE
//ELSEIF nSel == 0
//   cAni:= AW_BLEND + AW_HIDE
ENDIF

AnimateWindow( oDlg : hWnd, 500, cAni )
oDlg : Hide()
AnimateWindow( oDlg : hWnd, 500, AW_BLEND + AW_SLIDE + AW_ACTIVATE + AW_HIDE)
IF !EMPTY(oWner)
   //AnimateWindow( oDlg : hWnd, 500, AW_BLEND + AW_SLIDE + AW_ACTIVATE+AW_HIDE)
   //oWner : show()
   oWner : setcontrol()
   oWner : setfocus()
ENDIF

RETURN 0

 

Re: Animacion de Ventamas

PostPosted: Mon Mar 27, 2017 12:58 pm
by karinha
Mira se no estás usando la version de ERRSSYSW.PRG de la version antigua y cambia para la nueva. Saludos.

Re: Animacion de Ventamas

PostPosted: Mon Mar 27, 2017 3:22 pm
by karinha
Que intentas hacer, esto?

Code: Select all  Expand view

#include "fivewin.ch"

#define AW_VER_NEGATIVE        0x00000008  // animate window
#define AW_SLIDE               0x00040000  // animate window

#define AW_VER_POSITIVE  0x00000004
#define AW_BLEND 0x00080000

#define AW_HOR_NEGATIVE 0x00000002
#define AW_HOR_POSITIVE 0x00000001

#define AW_HIDE 0x00010000

static owndidc, ownd, omsgbar

function main()

   oWndIdc := NIL

   DEFINE WINDOW oWnd TITLE "Message Test - Press F3" ;
      FROM 5, 5 TO 24, 64

   DEFINE MSGBAR OMSGBAR OF OWND NOINSET

   oWnd:bKeyDown := {|nKey| IF(nKey==VK_F3,FwhMsgIDC( 'Message test'),)}

   ACTIVATE WINDOW oWnd maximized

return nil

/***************************************************************************************************/
procedure FwhMsgIDC( cMsg )

   local oSay, oFontIDC, nPos, nCol, otimer
   local nPosAux := 250
   local nColAux := 245

   Default cMsg := ''

   if oWndIdc != nil
      oWndIdc:End()
      oWndIdc := nil
      syswait(0.2)
   endif

   nPos := ownd:omsgbar:nWidth-nPosAux
   nCol := ownd:omsgbar:ntop-nColAux

   define font ofontidc name "Lucida Console" size -8,16 bold

   define window owndidc title "Message" from nCol, nPos to ( nCol+nColAux ), ( nPos+nPosAux ) pixel nominimize nomaximize color CLR_BLACK, RGB(126,192,238) of oWnd

   @ 00,-10 say osay var cMsg of owndidc center font ofontidc size 250,245 pixel

   //AnimateWindow( owndidc:hwnd,400, nor( AW_SLIDE, AW_VER_NEGATIVE ) )

   //AnimateWindow( owndidc:hwnd,400, nor( AW_SLIDE, AW_HOR_NEGATIVE ) )
   
   //AnimateWindow( owndidc:hwnd,400, nor( AW_SLIDE, AW_HOR_POSITIVE ) )
   
   AnimateWindow( owndidc:hwnd,400, nor( AW_HOR_NEGATIVE ) )

   SetWindowPos( owndidc:hwnd, -1, 0, 0, 0, 0, 3 )

   activate window owndidc on init( oTimer := FlashWndTimer( owndidc ),;
                                    owndidc:Refresh(), ;
                                    oWndIdc:move(nCol,nPos),;
                                       oWndidc:nWidth  := nPosAux,;
                                       oWndidc:nHeight := nColAux,;
                                       oWndIdc:Refresh(),;
                                    SysRefresh() );
                            valid( Keluar(),owndidc := nil,;
                                   hb_gcall( .t. ),;
                                   ofontidc:End(),;
                                   oTimer:DeActivate(),;
                                    .t. )

                                                                             
return

function Keluar()

   aRect :=  GetClientRect(oWndIdc:hwnd)
   nWidth := oWndidc:nWidth
       
   for i := 1 to aRect[3]

       oWndidc:nWidth  := nWidth
       nWidth := nWidth - i
       oWndIdc:Refresh()
       SysRefresh()
                                       
   next

return nil

/********************************************************/
FUNCTION FlashWndTimer( ohWnd, nDelay, bWhen )
   local oTimer

   DEFAULT  nDelay  := 2000
   DEFAULT  bWhen   := { || .T. }

   DEFINE TIMER oTimer INTERVAL nDelay ACTION (Flashing( ohWnd, bWhen ))
   ACTIVATE TIMER oTimer

RETURN oTimer

/********************************************************/
STATIC FUNCTION Flashing( ohWnd, bWhen )
   static nStatus := 1
   local hWnd

   hWnd := iif( ValType(ohWnd) != "O", ohWnd, ohWnd:hWnd )

   if Eval( bWhen, hWnd )
      FlashWnd( hWnd, (nStatus := iif( nStatus == 1, 0, 1 )) )
   endif

RETURN .T.

DLL32 STATIC FUNCTION FlashWnd( hWnd AS LONG, nInvert AS LONG ) AS LONG PASCAL FROM "FlashWindow" LIB "User32.dll"
DLL32 FUNCTION AnimateWindow( hWnd AS LONG, nTime AS LONG, nFlags AS LONG ) AS BOOL PASCAL LIB "user32.dll"


/*
 AW_ACTIVATE
0x00020000
Activates the window. Do not use this value with AW_HIDE.
AW_BLEND
0x00080000
Uses a fade effect. This flag can be used only if hwnd is a top-level window.
AW_CENTER
0x00000010
Makes the window appear to collapse inward if AW_HIDE is used or expand outward if the AW_HIDE is not used. The various direction flags have no effect.

AW_HIDE
0x00010000
Hides the window. By default, the window is shown.

AW_HOR_POSITIVE
0x00000001
Animates the window from left to right. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.

AW_HOR_NEGATIVE
0x00000002
Animates the window from right to left. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.

AW_SLIDE
0x00040000
Uses slide animation. By default, roll animation is used. This flag is ignored when used with AW_CENTER.

AW_VER_POSITIVE
0x00000004
Animates the window from top to bottom. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.

AW_VER_NEGATIVE
0x00000008
Animates the window from bottom to top. This flag can be used with roll or slide animation. It is ignored when used with AW_CENTER or AW_BLEND.
*/

 



Re: Animacion de Ventamas

PostPosted: Mon Mar 27, 2017 3:26 pm
by karinha

Re: Animacion de Ventamas

PostPosted: Tue Mar 28, 2017 4:49 pm
by devtuxtla
Hola karinha

Gracias por responder, pero el problema esta en la funcion DLL32 FUNCTION, TODOS los metodos utilizados de TODAS las DLL´s emiten el mismo problema.

El error aparecio en esta API de animacion de ventanas, pero se presenta al accesar cualquier metodo definido en DLL32 FUNCTION

Estoy migrando una aplicacion que habia compilado con FWH 13.08 / xHarbour 1.2.3 (Build 20141106) / Bcc 5.8

Ahora con FWH 17.02 / xHarbour 1.2.3 (Build 20170312) / Bcc 7.2 TODAS los metodos definidos con DLL32 FUNCTION emiten el mismo error

Code: Select all  Expand view
+--------------------------------------------------------------------------------+
|Error BASE/1089  Argument error: ABS Arguments: ( [ 1] = Type: P Val: 748B0000) |
|(Quit)                                                                          |
|Error BASE/1089  Argument error: ABS Arguments: ( [ 1] = Type: P Val: 748B0000) |
|                                                                                |
|Error at ...: ABS(0) in Module:                                                 |
|Called from : ANIMATEWINDOW(0) in Module: C:\SISTPAK\PRG\SISTPACK.prg            |


Saludos

Re: Animacion de Ventamas

PostPosted: Tue Mar 28, 2017 5:42 pm
by karinha
Como compilas la aplicación?

*.bat

y

*.lnk

?