StatusBar en Dialogo desde una clase

StatusBar en Dialogo desde una clase

Postby Compuin » Fri Jan 03, 2020 5:08 am

Hola Foro

Estoy creando una clase para manejar mis dialogos pero no logro que me agregue la Barra de Status al mismo

Code: Select all  Expand view  RUN
#Include "FiveWin.ch"

MEMVAR oAp

CLASS TEMPLATE

   DATA oDlg

   METHOD NEW()
   METHOD ACTIVATE()
   METHOD END()

ENDCLASS

METHOD NEW( cTitle, nTop, nLeft, nBottom, nRight ) CLASS TEMPLATE

   DEFINE DIALOG ::oDlg TITLE cTitle OF oAp:oWndMain;
          FROM nTop, nLeft TO nBottom, nRight PIXEL ;
          STYLE NOR( WS_POPUP, WS_VISIBLE, WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, WS_MINIMIZEBOX )

RETURN ::oDlg

METHOD ACTIVATE() CLASS TEMPLATE
   LOCAL oDlg

   ::oDlg := oDlg

   ACTIVATE DIALOG ::oDlg NOWAIT;
            ON INIT (STATUSBAR(oDlg))

RETURN NIL

METHOD END() CLASS TEMPLATE

   ::oDlg:End()

RETURN NIL

STATIC FUNCTION STATUSBAR(oDlg)
   //LOCAL oDlg

   oDlg := ::oDlg

   SET MESSAGE OF ::oDlg;
        TO "This is a status bar";

RETURN NIL
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby karinha » Fri Jan 03, 2020 2:50 pm

No me gusta usar clase, siempre prefiero Fivewin normal.

Code: Select all  Expand view  RUN

// Our first DialogBox sample and statusbar
 
#include "FiveWin.ch"
#include "ttitle.ch"
 
# define HTTPREQUEST_PROXYSETTING_PROXY  2

#IFDEF __XHARBOUR__
  #xtranslate hb_DateTime([<x,...>])          => DateTime(<x>)
  #xtranslate hb_tstostr([<x>])               => TToS(<x>)
  #xtranslate hb_stot([<x>])                  => SToT(<x>)
  #xtranslate hb_ttod([<x>])                  => TToD(<x>)
  #xtranslate hb_hour([<x>])                  => Hour(<x>)
  #xtranslate hb_minute([<x>])                => Minute(<x>)
  #xtranslate hb_sec([<x>])                   => Secs(<x>)
  #xtranslate hb_NumToHex([<x>])              => NumToHex(<x>)
  #xtranslate hb_StrFormat([<x,...>])         => StrFormat(<x>)
  #xtranslate <x>:__EnumIndex                 => hb_EnumIndex
#ENDIF
 
function Main()
 
   local obmp ,cBmp
   local oDlg, oIco
   local ofont
   local cCode:= space(180)
   local oGerar, oSaida
 
   DEFINE Font ofont NAME "Verdana" SIZE 0,14
   
   DEFINE ICON oIco FILE "fivewin.ico"
 
   DEFINE DIALOG oDlg TITLE "Gerador de Qrcode - " + FWVERSION ;
      ICON oIco SIZE 350, 440

   oDlg:lHelpIcon := .F.
 
   @ 30,24  IMAGE oBmp FILE cBmp OF oDlg size 128,128 pixel NOBORDER
     
   oBmp:lTransparent := .t.
     
   @ 160, 10 SAY OemToAnsi( "Digite o C¢digo Para Gerar: " ) ;
             size 100, 12 FONT oFont pixel OF oDlg
     
   @ 170, 10 GET cCode size 120, 12 FONT oFont pixel OF oDlg
 
   @ 190, 85 BUTTON oGerar PROMPT "&Gerar" SIZE 40, 12 OF oDlg pixel ;
             WHEN( .NOT. EMPTY( cCode ) )  FONT oFont                ;
             ACTION cargaBmp( alltrim( cCode) ,oBmp )

   oGerar:cToolTip := "Busca e Gera o Qrcode"

   @ 190,130 BUTTON oSaida PROMPT "&Saida" SIZE 40, 12 pixel OF oDlg ;
             FONT oFont                                              ;
             ACTION( LIBERA_TUDO( oDlg ) )

   oSaida:cTooltip := "Saida - Exit - Cancelar"
 
   ACTIVATE DIALOG oDlg CENTERED ;
            ON INIT  DlgBarTitle( oDlg, "  Gerador de Qrcode","" ,44 )  ;
            ON PAINT DlgStatusBar(oDlg, 68,, .t. )

   oFont:End()
   
return nil

FUNCTION LIBERA_TUDO( oDlg )

   /*
   DbCommitAll()
   DbUnLockAll()
   DbCloseAll()
   FreeResources()
   */


   Release All
   SysRefresh()

   HB_GCALL( .T. )
   CLEAR MEMORY

   PostQuitMessage( 0 )
   QUIT

RETURN NIL
 
//------------------------------------------------------------------------------
 
Function cargaBmp( cCode, oImage )
 
   local cResp
   local nZeroZeroClr
   local ogbmp := GdiBmp():new()
   local nHeight := 248
   local nWidth  := 248
   local cUrl  := "http://api.qrserver.com/v1/create-qr-code/?data="
 
   cUrl += GetSafeURL(hb_strtoutf8( cCode ) )
   cUrl += "&size=" + alltrim( str( nWidth ) )  + "x" + alltrim( str( nHeight ) )
   
   cResp := loadBmp(cUrl)
 
   if !Empty( cResp )
 
      oGbmp:hbmp := GDIPLUSIMAGELOADPNGFROMSTR( cResp,len(cResp) )
   
      oImage:hBitmap := oGBmp:GetGDIHbitmap()
      oImage:HasAlpha()
      oImage:Refresh()

      if msgYesNo( "Deseja Gravar QRCODE.PNG no Disco?")

         oGBmp:save(".\qrcode.png" )

      endif

      oGbmp:End()

   endif
 
Return nil
 
Static Function GetSafeURL(  cUrl )
 
   local cAsc
   local nChr
   local sHex
   local i
   local cGetSafeURL := ""
       
   For i = 1 To Len( cUrl )

      cASC := substr( cUrl, i, 1)
      nChr := Asc( cASC )
       
      If ( nChr > 47 .and. nChr < 58 ) .Or. ;
         ( nChr > 64 .And. nChr < 91 ) .Or. ;
         ( nChr > 96 .And. nChr < 123 )

         cGetSafeURL += cASC

      Else

         sHex :=  hb_NumtoHex( nChr )

         If Len( sHex ) = 1
            cGetSafeURL += "%0" + sHex
         Else
            cGetSafeURL += "%"  + sHex
         End If

      End If

   Next
 
Return cGetSafeURL
 
//------------------------------------------------------------------------------
 
Function loadBmp(cUrl)

   local oHttp
   local cResp := nil
 
   Try
      oHttp := CreateObject( "winhttp.winhttprequest.5.1" )
         
      oHttp:Open("GET", cUrl, .f. )
      oHttp:Send()

      cResp := oHttp:ResponseBody()
         
   Catch

      MsgStop( "Error" )

      Return cResp

   End Try
 
Return cResp
 
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
 
Function DlgStatusBar(oDlg, nHeight, nCorrec , lColor )

   Local nDlgHeight := oDlg:nHeight
   Local aColor     := { { 0.40, nRGB( 200, 200, 200 ), nRGB( 184, 184, 184 ) },;
                       { 0.60, nRGB( 184, 184, 184 ), nRGB( 150, 150, 150 ) } }

   LOCAL cMsg := "STATUSBAR: SIMPLES GENERADOR DE QRCODE"
 
   DEFAULT nHeight  := 72
   DEFAULT nCorrec  := 0
   DEFAULT lColor   := .F.
 
   nDlgHeight:= nDlgHeight+ncorrec

   IF lColor
      GradienTfill(oDlg:hDC,nDlgHeight-( nHeight-2 ),0,nDlgHeight-20,oDlg:nWidth, aColor ,.t.)
      WndBoxIn( oDlg:hDc,nDlgHeight-( nHeight-1 ),0,nDlgHeight-( nHeight ),oDlg:nWidth )
   ELSE
      WndBoxIn( oDlg:hDc,nDlgHeight -( nHeight-1 ),4,nDlgHeight-( nHeight ),oDlg:nWidth - 10 )
   endif

   SET MESSAGE OF oDlg TO cMsg NOINSET CENTERED
 
Return Nil
 
//------------------------------------------------------------------------------
 
FUNCTION DlgBarTitle( oWnd, cTitle, cBmp ,nHeight )

   LOCAL oFont
   LOCAL oTitle
   LOCAL nColText := 180
   LOCAL nRowImg  := 0
   
 
   DEFAULT cTitle  := ""
   DEFAULT nHeight := 48
 
   IF nHeight < 48
      nColText := 60
      nRowImg  := 12
      DEFINE FONT oFont NAME "Arial" size 10, 30
   ELSE
      DEFINE FONT oFont NAME "Arial" size 12, 30
   endif
 
    @ -1, -1  TITLE oTitle size oWnd:nWidth+1, nHeight+1 of oWnd SHADOWSIZE 0
   
    @  nRowImg,  10  TITLEIMG  OF oTitle BITMAP cBmp  SIZE 48, 48 REFLEX ;
          TRANSPARENT
   
    @  nRowImg-2 ,  nColText TITLETEXT OF oTitle TEXT cTitle COLOR CLR_BLACK FONT oFont
 
    oTitle:aGrdBack := { { 1, RGB( 255, 255, 255 ), RGB( 229, 233, 238 )  } }
    oTitle:nShadowIntensity = 0
    oTitle:nShadow = 0
    oTitle:nClrLine1 := nrgb(0,0,0)
    oTitle:nClrLine2 := RGB( 229, 233, 238 )

    oWnd:oTop:= oTitle
 
RETURN oTitle

// FIM DO PROGRAMA
 


Regards, saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7848
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Fri Jan 03, 2020 9:48 pm

Gracias Joao, pero no es lo que necesito

Necesito hacerlo desde una Clase
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby cnavarro » Fri Jan 03, 2020 10:14 pm

El problema es en este tipo de asignaciones que haces, que tienes varias. No entiendo que si tienes la DATA oDlg ...., asignes al parámetro esa data sin hacer un DEFAULT, por lo menos. Pero como te digo tienes varias de esas asignaciones.

STATIC FUNCTION STATUSBAR(oDlg)
//LOCAL oDlg

oDlg := ::oDlg

SET MESSAGE OF ::oDlg;
TO "This is a status bar";

RETURN NIL
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Sat Jan 04, 2020 12:57 am

cnavarro wrote:El problema es en este tipo de asignaciones que haces, que tienes varias. No entiendo que si tienes la DATA oDlg ...., asignes al parámetro esa data sin hacer un DEFAULT, por lo menos. Pero como te digo tienes varias de esas asignaciones.

STATIC FUNCTION STATUSBAR(oDlg)
//LOCAL oDlg

oDlg := ::oDlg

SET MESSAGE OF ::oDlg;
TO "This is a status bar";

RETURN NIL


Ya lo he hecho asi maestro pero aun no me funciona
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby cnavarro » Sat Jan 04, 2020 1:00 am

El metodo new ha de devolver siempre SELF, ya que es el metodo CONSTRUCTOR
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Sat Jan 04, 2020 1:14 am

Error

Error description: Error BASE/1004 No exported method: BLCLICKED
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby cnavarro » Sat Jan 04, 2020 1:37 am

Son dos temas distintos
1.- El método New ha de devolver Self, para poder utilizar las datas y metodos de la clase
2.- Cualquier data, metodo de la clase tDialog ha de ir precedida de la data de la nueva clase que se llama ::oDlg

Code: Select all  Expand view  RUN

   local oMyDlg

   oMyDlg  := Template():New( ... )

   oMyDlg:oDlg ....

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Sat Jan 04, 2020 1:44 am

cnavarro wrote:Son dos temas distintos
1.- El método New ha de devolver Self, para poder utilizar las datas y metodos de la clase
2.- Cualquier data, metodo de la clase tDialog ha de ir precedida de la data de la nueva clase que se llama ::oDlg

Code: Select all  Expand view  RUN

   local oMyDlg

   oMyDlg  := Template():New( ... )

   oMyDlg:oDlg ....

 



El ejemplo que estoy colocando funciona y creal el Dialogo, lo que no logra es agregarle la Barra de Status con el ON INIT

Code: Select all  Expand view  RUN
#Include "FiveWin.ch"

MEMVAR oAp

CLASS TEMPLATE

   DATA oDlg

   METHOD NEW()
   METHOD ACTIVATE()
   METHOD END()

ENDCLASS

METHOD NEW( cTitle, nTop, nLeft, nBottom, nRight ) CLASS TEMPLATE

   DEFINE DIALOG ::oDlg TITLE cTitle OF oAp:oWndMain;
          FROM nTop, nLeft TO nBottom, nRight PIXEL ;
          STYLE NOR( WS_POPUP, WS_VISIBLE, WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, WS_MINIMIZEBOX )

RETURN ::oDlg

METHOD ACTIVATE() CLASS TEMPLATE
   LOCAL oDlg

   ::oDlg := oDlg

   ACTIVATE DIALOG ::oDlg NOWAIT;
            ON INIT (STATUSBAR(oDlg))

RETURN NIL

METHOD END() CLASS TEMPLATE

   ::oDlg:End()

RETURN NIL

STATIC FUNCTION STATUSBAR(oDlg)
   //LOCAL oDlg

   oDlg := ::oDlg

   SET MESSAGE OF ::oDlg;
        TO "This is a status bar";

RETURN NIL
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby cnavarro » Sat Jan 04, 2020 2:01 am

Que esté creando el diálogo no significa que sea correcta su implementación
En cuanto al uso de una data ::oDlg, fuera de un método de la clase ( lo estás utilizando en una function static ), tienes que pensar que no es posible tal y como lo tienes si no lo referencias al objeto de la clase a la que pertenece, para lo cual has de instanciar el metodo New de la clase Template
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Sat Jan 04, 2020 4:47 am

cnavarro wrote:Que esté creando el diálogo no significa que sea correcta su implementación
En cuanto al uso de una data ::oDlg, fuera de un método de la clase ( lo estás utilizando en una function static ), tienes que pensar que no es posible tal y como lo tienes si no lo referencias al objeto de la clase a la que pertenece, para lo cual has de instanciar el metodo New de la clase Template


Y como puedo hacer eso maestro, porque no tengo idea de como hacerlo, de alli la razon de mi post
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby cnavarro » Sat Jan 04, 2020 5:19 pm

Aqui lo tienes

Code: Select all  Expand view  RUN

#Include "FiveWin.ch"

Static oAp
Static oTemplate

Function Main()

   oTemplate  := Template():New( "Titulo", 10, 10, 300, 300 )
   oTemplate:Activate()

Return nil


CLASS TEMPLATE

   DATA oDlg

   METHOD NEW()
   METHOD ACTIVATE()
   METHOD END()

ENDCLASS

METHOD NEW( cTitle, nTop, nLeft, nBottom, nRight ) CLASS TEMPLATE

   DEFINE DIALOG ::oDlg TITLE cTitle ; //OF oAp:oWndMain;
          FROM nTop, nLeft TO nBottom, nRight PIXEL TRUEPIXEL ;
          STYLE NOR( WS_POPUP, WS_VISIBLE, WS_CAPTION, WS_THICKFRAME, WS_SYSMENU, WS_MINIMIZEBOX )

RETURN Self

METHOD ACTIVATE() CLASS TEMPLATE

   ::oDlg:bInit  := { || StatusBar( ::oDlg ) }
   ACTIVATE DIALOG ::oDlg  //NOWAIT

RETURN NIL

METHOD END() CLASS TEMPLATE

   ::oDlg:End()

RETURN NIL

STATIC FUNCTION STATUSBAR( oDlg )

   SET MESSAGE OF oDlg;
        TO "This is a status bar";

RETURN NIL

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Sat Jan 04, 2020 5:39 pm

Gracias maestro,

Pero sigue sin agregar la barra de status
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: StatusBar en Dialogo desde una clase

Postby cnavarro » Sat Jan 04, 2020 5:44 pm

Prueba el ejemplo tal cual te lo envío, porque así funciona correctamente
Después ya veremos si tienes algún problema más

Image
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6549
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: StatusBar en Dialogo desde una clase

Postby Compuin » Sat Jan 04, 2020 5:45 pm

cnavarro wrote:Prueba el ejemplo tal cual te lo envío, porque así funciona correctamente
Después ya veremos si tienes algún problema más

Image


Ok, me pongo en ello

Muchas gracias
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: karinha and 71 guests