FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour MsgMeter() boton cancelar desactivado
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
MsgMeter() boton cancelar desactivado
Posted: Tue Dec 10, 2024 10:28 AM
Hola.
Estoy utilizando MsgMeter() y el bot贸n de Cancelar siempre me sale desactivado


He revisado la funci贸n MsgMeter() y no veo ninguna opci贸n que active/desactive el bot贸n de Cancelar
Code (fw): Select all Collapse
function MsgMeter( bAction, cMsg, cTitle )

聽 聽local oDlg, oMeter, oText, oBtn, oFont
聽 聽local lEnd := .f., lCancel := .f.
聽 聽local nVal := 0

聽 聽DEFAULT bAction := { || nil },;
聽 聽 聽 聽 聽 聽cMsg := "Processing...", cTitle := "Please, wait"

聽 聽DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8

聽 聽DEFINE DIALOG oDlg FROM 5, 5 TO 13, 45 TITLE cTitle FONT oFont
聽 聽oDlg:lTruePixel := .f.

聽 聽@ 0.2, 0.5 聽SAY oText VAR cMsg SIZE 130, 10 OF oDlg

聽 聽@ 1, 聽 0.5 聽METER oMeter VAR nVal TOTAL 10 SIZE 150, 10 OF oDlg

聽 聽@ 聽2.2, 聽10.4 聽BUTTON oBtn PROMPT "&Cancel" OF oDlg ;
聽 聽 聽 ACTION ( lEnd:= .t., lCancel:= .t. ) SIZE 32, 11

聽 聽// This block gets evaluated only the first time the DialogBox is painted !!!
聽 聽oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 lEnd := .t., oDlg:End() }

聽 聽ACTIVATE DIALOG oDlg CENTERED ;
聽 聽 聽 VALID lEnd

聽 聽oFont:End()

return lCancel
Alguna idea?

Gracias y salud!
--------

驴 Y porque no ?

驴 And why not ?
Posts: 8515
Joined: Tue Dec 20, 2005 07:36 PM
Re: MsgMeter() boton cancelar desactivado
Posted: Tue Dec 10, 2024 01:40 PM
Prueba,
Code (fw): Select all Collapse
#Include "FiveWin.ch"

#Define CLR_AMARELO 聽 nRGB( 255, 255, 000 ) //--> Amarelo Para o Fundo
#Define CLR_VERMELHO 聽nRGB( 255, 000, 000 ) //--> Vermelho Para a Letra

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

Function MsgMeter( bAction, cMsg, cTitle )

聽 聽LOCAL oDlg, oMeter, oText, oBtn, oFont
聽 聽LOCAL lEnd := .F., lCancel := .F.
聽 聽LOCAL nVal := 0
聽 聽LOCAL oBrush

聽 聽DEFAULT bAction := { || NIL },;
聽 聽 聽 聽 聽 聽cMsg := "Processamento Demorado...", 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽cTitle := "Por Favor, Espere! Processamento Demorado..."

聽 聽DEFINE FONT oFont NAME GetSysFont() SIZE 0, -9

聽 聽DEFINE BRUSH oBrush 聽 聽RESOURCE "LOGO2" //-> PEGA A BITMAP DO ARQUIVO.RES(LOGO.BMP)

聽 聽DEFINE DIALOG oDlg FROM 5, 5 TO 14, 45 TITLE cTitle FONT oFont 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 STYLE nOR( DS_MODALFRAME ) 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 BRUSH oBrush TRANSPARENT

聽 聽oDlg:lHelpIcon := .F.

聽 聽@ 0.1, 0.9 聽SAY oText VAR cMsg SIZE 150, 10 OF oDlg 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽COLORS CLR_BLACK, CLR_WHITE

聽 聽@ 1, 聽 0.5 聽METER oMeter VAR nVal TOTAL 10 SIZE 150, 10 OF oDlg 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽COLORS 聽CLR_BLACK, CLR_WHITE

聽 聽@ 聽2.2, 10.4 BUTTON oBtn PROMPT "&Saida" 聽 OF oDlg 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 ACTION ( lEnd := .T., lCancel := .T., oDlg:End() ) 聽 聽 聽 聽 聽 聽;
聽 聽 聽 聽 聽 聽 聽 聽 SIZE 32, 11 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 ;
聽 聽 聽 聽 聽 聽 聽 聽 CANCEL UPDATE

聽 聽// This block gets evaluated only the first time the DialogBox is painted !!!
聽 聽oDlg:bStart = { || Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 lEnd := .T., oDlg:End() }

聽 聽/* // SE EU QUISER COLOCAR UM .GIF no MesgMeter()
聽 聽oDlg:bStart = { || oAnimate:=TGif():New( oDlg, ".\Clip1.gif", 1,oDlg:nLeft() ),; 聽 聽 //Ponle el gif que prefieras
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 Eval( bAction, oMeter, oText, oDlg, @lEnd, oBtn ),;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 lEnd := .t., oDlg:End() }
聽 聽*/

聽 聽ACTIVATE DIALOG oDlg CENTERED ;
聽 聽 聽 聽 聽 聽 VALID( lEnd )

聽 聽oFont:End()
聽 聽oBrush:End()

Return( lCancel )

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

Static Function MsgDate( dDate, cPrompt, oGet )

聽 聽local oDlg, oFont, oCursor, dSelect
聽 聽local nRow, nCol, nMonth
聽 聽local cOldMode := Set( _SET_DATEFORMAT,;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 If( __SetCentury(), "dd/mm/yyyy", "dd/mm/yy" ) )

聽 聽DEFAULT dDate := Date(), cPrompt := "Select a date"

聽 聽nMonth 聽= Month( dDate )
聽 聽dSelect = dDate

聽 聽DEFINE FONT oFont NAME GetSysFont() SIZE 0, -8
聽 聽DEFINE CURSOR oCursor HAND

聽 聽DEFINE DIALOG oDlg SIZE 200, 190 TITLE cPrompt FONT oFont // -> 6 weeks

聽 聽@ 0, 2 SAY dDateToString( dDate ) COLOR CLR_HBLUE

聽 聽aTail( oDlg:aControls ):Cargo := "DATE"

聽 聽dDate -= Day( dDate ) - 1
聽 聽while DoW( dDate ) != 2 // Monday
聽 聽 聽 dDate --
聽 聽enddo

聽 聽@ 0.8, 0 SAY " 聽" + SubStr( CDow( dDate ), 1, 3 ) + " 聽 " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SubStr( CDow( dDate + 1 ), 1, 3 ) + " 聽 " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SubStr( CDow( dDate + 2 ), 1, 3 ) + " 聽 " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SubStr( CDow( dDate + 3 ), 1, 3 ) + " 聽 " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SubStr( CDow( dDate + 4 ), 1, 3 ) + " 聽 " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SubStr( CDow( dDate + 5 ), 1, 3 ) + " 聽 " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽SubStr( CDow( dDate + 6 ), 1, 3 ) COLOR CLR_HRED

聽 聽for nRow = 2 to 7
聽 聽 聽 for nCol = 1 to 7

聽 聽 聽 聽 聽@ nRow * 10, ( nCol * 14 ) - 12 BTNBMP ;
聽 聽 聽 聽 聽 聽 聽PROMPT Str( Day( dDate ), 2 ) SIZE 12, 10 NOBORDER ;
聽 聽 聽 聽 聽 聽 聽ACTION ( dDate := ::Cargo, oDlg:End( IDOK ) )

聽 聽 聽 聽 聽ATail( oDlg:aControls ):Cargo 聽 = dDate
聽 聽 聽 聽 聽ATail( oDlg:aControls ):oCursor = oCursor
聽 聽 聽 聽 聽ATail( oDlg:aControls ):nClrText = If( dDate == Date(), CLR_HBLUE,;
聽 聽 聽 聽 聽 聽 聽 聽 聽If( dDate == dSelect, CLR_HBLUE, If( Month( dDate ) == nMonth,;
聽 聽 聽 聽 聽 聽 聽 聽 聽CLR_BLACK, CLR_GRAY ) ) )

聽 聽 聽 聽 聽if ATail( oDlg:aControls ):Cargo == dSelect
聽 聽 聽 聽 聽 聽 ATail( oDlg:aControls ):lPressed = .t.
聽 聽 聽 聽 聽 聽 ATail( oDlg:aControls ):cToolTip = "Selected"
聽 聽 聽 聽 聽endif
聽 聽 聽 聽 聽if ATail( oDlg:aControls ):Cargo == Date()
聽 聽 聽 聽 聽 聽 ATail( oDlg:aControls ):cToolTip = "Today"
聽 聽 聽 聽 聽endif

聽 聽 聽 聽 聽dDate++
聽 聽 聽 next
聽 聽next

聽 聽ACTIVATE DIALOG oDlg CENTERED ;
聽 聽 聽 ON INIT oDlg:SetMenu( BuildMenu( oDlg, { | d | dDate := d } ) )

聽 聽if oGet != NIL
聽 聽 聽 oGet:VarPut( If( oDlg:nResult == IDOK, dDate, dSelect ) )
聽 聽 聽 oGet:Refresh()
聽 聽endif

聽 聽Set( _SET_DATEFORMAT, cOldMode )

Return If( oDlg:nResult == IDOK, dDate, dSelect )

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

Static Function MoveCalendar( oDlg, nModo )

聽 聽local dSelect := Date()
聽 聽local n
聽 聽local nFirstButton := 0
聽 聽local nLastButton 聽:= 0
聽 聽local nDate 聽 聽 聽 := 0
聽 聽local nDay, nMonth, nYear, nNewDay
聽 聽local dDate
聽 聽local nDias := 0

聽 聽for n := 1 TO Len( oDlg:aControls )
聽 聽 聽 if oDlg:aControls[ n ]:ClassName() == "TBTNBMP"
聽 聽 聽 聽 聽nFirstButton := If( nFirstButton == 0, n, nFirstButton )
聽 聽 聽 聽 聽nLastButton 聽:= n
聽 聽 聽 聽 聽if oDlg:aControls[ n ]:lPressed
聽 聽 聽 聽 聽 聽 dSelect := oDlg:aControls[ n ]:Cargo
聽 聽 聽 聽 聽 聽 oDlg:aControls[ n ]:lPressed := .F.
聽 聽 聽 聽 聽endif
聽 聽 聽 endif
聽 聽 聽 if oDlg:aControls[ n ]:Cargo != NIL .AND. ;
聽 聽 聽 聽 聽ValType( oDlg:aControls[ n ]:Cargo ) == "C" .AND. ;
聽 聽 聽 聽 聽oDlg:aControls[ n ]:Cargo == "DATE"
聽 聽 聽 聽 聽nDate := n
聽 聽 聽 endif
聽 聽next n

聽 聽if nModo == 5 // Add days
聽 聽 聽 MsgGet( "Days", "Add: ", @nDias )
聽 聽 聽 dSelect += nDias
聽 聽elseif nModo == 6
聽 聽 聽 MsgGet( "Days", "Sub: ", @nDias )
聽 聽 聽 dSelect -= nDias
聽 聽endif

聽 聽nDay 聽 := Day( dSelect )
聽 聽nMonth := Month( dSelect )
聽 聽nYear 聽:= Year( dSelect )

聽 聽do case
聽 聽 聽 case nModo == 1 // Prev month
聽 聽 聽 聽 聽nMonth := If( nMonth == 1, ( nYear --, 1 ), nMonth - 1 )
聽 聽 聽 case nModo == 2 // Next month
聽 聽 聽 聽 聽nMonth := If( nMonth == 12, ( nYear ++, 1 ), nMonth + 1 )
聽 聽 聽 聽 聽if nMonth < 12
聽 聽 聽 聽 聽 聽 聽if ( nNewDay := Day( CToD( "01/" + Str( nMonth + 1 ) + "/" + ;
聽 聽 聽 聽 聽 聽 聽 聽 Str( nYear ) ) - 1 ) ) < nDay
聽 聽 聽 聽 聽 聽 聽 聽 nDay = nNewDay
聽 聽 聽 聽 聽 聽 endif
聽 聽 聽 聽 聽endif
聽 聽 聽 case nModo == 3 // prev year
聽 聽 聽 聽 聽nYear --
聽 聽 聽 case nModo == 4 // next year
聽 聽 聽 聽 聽nYear ++
聽 聽endcase

聽 聽dSelect := CToD( Str( nDay ) + "/" + Str( nMonth ) + "/" + Str( nYear ) )

聽 聽oDlg:aControls[ nDate ]:bGet := { || dDateToString( dSelect ) }

聽 聽dDate := dSelect
聽 聽dDate -= Day( dDate ) - 1
聽 聽while DoW( dDate ) != 2 // Monday
聽 聽 聽 dDate --
聽 聽enddo

聽 聽for n := nFirstButton TO nLastButton
聽 聽 聽 oDlg:aControls[ n ]:SetText( Str( Day( dDate ), 2 ) )

聽 聽 聽 oDlg:aControls[ n ]:Cargo 聽 = dDate
聽 聽 聽 oDlg:aControls[ n ]:nClrText = If( dDate == Date(), CLR_HRED,;
聽 聽 聽 聽 聽 聽 聽 聽 聽If( dDate == dSelect, CLR_HBLUE, If( Month( dDate ) == nMonth,;
聽 聽 聽 聽 聽 聽 聽 聽 聽CLR_BLACK, CLR_GRAY ) ) )

聽 聽 聽 if oDlg:aControls[ n ]:Cargo == dSelect
聽 聽 聽 聽 聽oDlg:aControls[ n ]:lPressed = .t.
聽 聽 聽 聽 聽oDlg:aControls[ n ]:cToolTip = "Today"
聽 聽 聽 endif
聽 聽 聽 dDate++
聽 聽next n

聽 聽for n := 1 TO Len( oDlg:aControls )
聽 聽 聽 oDlg:aControls[ n ]:Refresh()
聽 聽next n

Return NIL

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

Static Function dDateToString( dDate )

聽 聽local cSay := CDoW( dDate ) + ", " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Str( Day( dDate ), 2 ) + " " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽CMonth( dDate ) + " " + ;
聽 聽 聽 聽 聽 聽 聽 聽 聽 聽Str( Year( dDate ), 4 )

Return cSay

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

Static Function BuildMenu( oDlg, bDate )

聽 聽local oMenu

聽 聽MENU oMenu
聽 聽 聽 MENUITEM "&Today" 聽 ACTION Eval( bDate, Date() ), oDlg:End( IDOK )
聽 聽 聽 MENUITEM "&Prev"
聽 聽 聽 MENU
聽 聽 聽 聽 聽MENUITEM "&Month" ACTION MoveCalendar( oDlg, 1 )
聽 聽 聽 聽 聽MENUITEM "&Year" 聽ACTION MoveCalendar( oDlg, 3 )
聽 聽 聽 ENDMENU
聽 聽 聽 MENUITEM "&Next"
聽 聽 聽 MENU
聽 聽 聽 聽 聽MENUITEM "&Month" 聽ACTION MoveCalendar( oDlg, 2 )
聽 聽 聽 聽 聽MENUITEM "&Year" 聽ACTION MoveCalendar( oDlg, 4 )
聽 聽 聽 ENDMENU
聽 聽 聽 MENUITEM "+/-"
聽 聽 聽 MENU
聽 聽 聽 聽 聽MENUITEM "&Add days" 聽ACTION MoveCalendar( oDlg, 5 )
聽 聽 聽 聽 聽MENUITEM "&Sub days" ACTION MoveCalendar( oDlg, 6 )
聽 聽 聽 ENDMENU
聽 聽 聽 MENUITEM "&Ok" 聽 ACTION oDlg:End()
聽 聽ENDMENU

Return oMenu

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

Static Function MsgGet( cTitle, cText, uVar )

聽 聽local oDlg, oFont
聽 聽local uTemp := uVar
聽 聽local lOk 聽 := .f.

聽 聽DEFAULT cText := ""

聽 聽DEFINE FONT oFont NAME GetSysFont() SIZE 0, -12

聽 聽DEFINE DIALOG oDlg SIZE 112, 52 TITLE cTitle FONT oFont

聽 聽oDlg:nStyle := nOr( DS_MODALFRAME, WS_POPUP )

聽 聽@ 聽2, 5 SAY cText OF oDlg SIZE 29, 聽8 PIXEL
聽 聽@ 12, 5 GET uTemp OF oDlg SIZE 25, 11 PIXEL RIGHT

聽 聽@ 12, 36 BUTTON "&Ok" OF oDlg SIZE 15, 10 ;
聽 聽 聽 聽 聽 聽 ACTION ( oDlg:End(), lOk := .t. ) DEFAULT PIXEL

聽 聽ACTIVATE DIALOG oDlg CENTERED

聽 聽if lOk
聽 聽 聽 uVar := uTemp
聽 聽endif

Return lOk

//-----------------------------------------------------------------------//
Regards, saludos.
Jo茫o Santos - S茫o Paulo - Brasil - Phone: +55(11)95150-7341

Continue the discussion