Page 1 of 1

MSGRUN

Posted: Tue Jan 29, 2008 3:16 pm
by ADBLANCO
Actualmente, el MSGRUN no separa en multiples líneas el texto cuando se le coloca CRLF, y me ví forzado a modificar el fuente original de la clase.
Sería posible Implementar esta característica en el fuente original???,
Se lograría estandarizar el comportamiento de los msg.



Saludos..
Angel.

Posted: Tue Jan 29, 2008 10:01 pm
by Antonio Linares
Angel,

Puedes mostrarnos la modificación que has hecho en el código fuente ? gracias

Posted: Fri Feb 15, 2008 1:00 pm
by ADBLANCO
#include "FiveWin.ch"
#define DS_MODALFRAME 128 // 0x80

//----------------------------------------------------------------------------//

function WaitSeconds( nSecs )

local nStart := GetTickCount()

DEFAULT nSecs := 1

while GetTickCount() - nStart < ( 1000 * nSecs )
end

return nil

//----------------------------------------------------------------------------//

function MsgRun( cCaption, cTitle, bAction )

LOCAL oDlg, nWidth,aMsg:={},nArrayLeng:=0,cMsg

DEFAULT cCaption := "Espere, Por Favor...",;
bAction := { || WaitSeconds( 1 ) }

IF At( CRLF,cCaption ) != 0
DO WHILE At( CRLF,cCaption ) != 0
cMsg:=Left(cCaption,At( CRLF,cCaption )-1)
aadd(aMsg,cMsg)
nArrayLeng:=MAX(nArrayLeng,len(cMsg))
cCaption:=substr(cCaption,At( CRLF,cCaption )+1)
ENDDO
ENDIF
aadd(aMsg,cCaption)
nArrayLeng:=MAX(nArrayLeng,len(cCaption))

IF cTitle == NIL
DEFINE DIALOG oDlg ;
FROM 0,0 TO 2+LEN(aMsg) , nArrayLeng + 3 ;
STYLE nOr(WS_POPUP,DS_MODALFRAME) //nOr( DS_MODALFRAME, WS_POPUP )
ELSE
DEFINE DIALOG oDlg ;
FROM 0,0 TO 4+LEN(aMsg), Max( nArrayLeng, Len( cTitle ) ) + 4 ;
TITLE cTitle STYLE nOr(DS_MODALFRAME)
ENDIF

oDlg:lHelpIcon :=.f.
oDlg:bStart := { || Eval( bAction, oDlg ), oDlg:End(), SysRefresh() }

nWidth := oDlg:nRight - oDlg:nLeft

ACTIVATE DIALOG oDlg CENTER ;
ON PAINT PresMsg(oDlg,aMsg,nWidth)

return nil

STATIC FUNCTION PresMsg(oDlg,aMsg,nWidth)
LOCAL nAt
FOR nAt=1 to len(aMsg)
oDlg:Say( nAt, 0, xPadC( aMsg[nAt], nWidth ) )
NEXT

//----------------------------------------------------------------------------//

function MsgWait( cCaption, cTitle, nSeconds )

DEFAULT nSeconds := 4

return MsgRun( cCaption, cTitle, { || WaitSeconds( nSeconds ) } )

//----------------------------------------------------------------------------//

Function StopUntil( bBlock )

DO WHILE !Eval( bBlock )
WaitMessage()
SysRefresh()
ENDDO

Return NIL


NOTA: Aunque no es mut elegante, por lo menos trabaja

Saludos