Clipper On Line • Ver Tópico - Usando OOP

Usando OOP

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

 

Usando OOP

Mensagempor JoséQuintas » 22 Nov 2021 19:04

Fiz uma pequena experiência com o fonte que o Fernando postou.

PROCEDURE Main

   LOCAL oDashBoard

   oDashboard := DashBoardClass():New()
   oDashBoard:Resumo_Financeiro()

   RETURN

CREATE CLASS DashBoardClass

   VAR oServer

   METHOD New( ParamServer )   INLINE   ::oServer := ParamServer, Self
   METHOD Resumo_Financeiro(  )

   PROTECTED:

   VAR nCombo_Ano           INIT 1
   VAR aAnos                INIT {}
   VAR nVendas              INIT 0.00
   VAR nAReceber            INIT 0.00
   VAR nReceberEmAtrazo     INIT 0.00
   VAR nRecebido            INIT 0.00
   VAR nAPagar              INIT 0.00
   VAR nPagarEmAtrazo       INIT 0.00
   VAR nPago                INIT 0.00
   VAR nTotalVendas         INIT 0.00

   METHOD GRAFICO_RECEBER( oDlg )

   ENDCLASS

METHOD Resumo_Financeiro(  ) CLASS DashBoardClass

   LOCAL oDlg ;
      , oPanel1, oPanel2, oPanel3, oPanel4 ;
      , oLabel1, oLabel2, oLabel3,  oLabel4, oLabel5, oLabel6, oLabel7, oLabel8 ;
      , oAReceber, oReceberEmAtrazo, oRecebido ;
      , oOwnerbutton1 ;
      , oVendas ;
      , oAPagar, oPagarEmAtrazo, oPago ;
      , oCombo_Anos ;
      , oBrowse1 ;
      , oStatus1, oControl

   ::nCombo_Ano := Ascan(::aAnos,strzero(Year(Date()),4,0) )

   INIT DIALOG oDlg TITLE "RESUMO FINANCEIRO / DASHBOARD"  ;
      ICON HIcon():Addresource('SGC_ICON')  ;
      AT 0, 0 SIZE 1100,590 CLIPPER  NOEXIT ;
      BACKCOLOR 16777215 ;
      ON GETFOCUS { || GraphicRMChart() }

   @ 0,0 PANEL oPanel1 SIZE 1100,80
   oPanel1:Anchor := 130

   @ 2,83 SAY oLabel1 CAPTION "" SIZE 1096,30 ;
      STYLE WS_BORDER + SS_CENTER ;
      COLOR 16777215  BACKCOLOR 0 ;
      FONT HFont():Add( '',0,-19,400,,,)
   oLabel1:Anchor := 11

   @ 5,9 OWNERBUTTON oOwnerbutton1  OF oPanel1  SIZE 73,63 ;
      ON CLICK {|| oDlg:Close() } ;
      FLAT  ;
      TEXT 'Sair' COLOR 16777215  ;
      COORDINATES 0, 40, 0, 0  ;
      BITMAP HBitmap():Addresource('door-8-256-30')    ;
      COORDINATES 0, 5, 0, 0  ;
      TOOLTIP 'Sair da Rotina'

   @ 971,25 GET COMBOBOX oCombo_Anos VAR ::nCombo_Ano ;
      ITEMS ::aAnos  OF oDlg:oPanel1 ;
      SIZE 78,24 ;
      FONT HFont():Add( '',0,-19,400,,,)

   @ 5,115 PANEL oPanel2 SIZE 254,450
   oPanel2:Anchor := 3

   @ 10,5 SAY oVendas CAPTION LTRIM(Transform(::nVendas,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oVendas:Anchor := 11

   @ 10,25 SAY oLabel2 CAPTION "Total Vendas" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel2:Anchor := 11

   @ 10,55 SAY oAReceber CAPTION LTRIM(Transform(::nAReceber,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oAReceber:Anchor := 11

   @ 10,75 SAY oLabel3 CAPTION "A Receber" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel3:Anchor := 11

   @ 10,95 SAY oReceberEmAtrazo CAPTION LTRIM(Transform(::nReceberEmAtrazo,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oReceberEmAtrazo:Anchor := 11

   @ 10,115 SAY oLabel4 CAPTION "Inadimplência" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel4:Anchor := 11

   @ 10,135 SAY oRecebido CAPTION LTRIM(Transform(::nRecebido,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oRecebido:Anchor := 11

   @ 10,155 SAY oLabel5 CAPTION "Recebido" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel5:Anchor := 11

   @ 10,190 SAY oAPagar CAPTION LTRIM(Transform(::nAPagar,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oAPagar:Anchor := 11

   @ 10,210 SAY oLabel6 CAPTION "A Pagar" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel6:Anchor := 11

   @ 10,230 SAY oPagarEmAtrazo CAPTION LTRIM(Transform(::nPagarEmAtrazo,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oPagarEmAtrazo:Anchor := 11

   @ 10,250 SAY oLabel7 CAPTION "Em Atrazo" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel7:Anchor := 11

   @ 10,270 SAY oPago CAPTION LTRIM(Transform(::nPago,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-19,700,,,)
   oPago:Anchor := 11

   @ 10,290 SAY oLabel8 CAPTION "Pago" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      COLOR 16777215 BACKCOLOR 4339747 ;
      FONT HFont():Add( '',0,-10,400,,,)
   oLabel8:Anchor := 11

   FOR EACH oControl IN { oVendas, oLabel2, oAReceber, oLabel3, oReceberEmAtrazo, ;
      oLabel4, oRecebido, oLabel5, oAPagar, oLabel6, oPagarEmAtrazo, oLabel7, oPago, oLabel8 }
   NEXT

   @ 265,115 PANEL oPanel3 SIZE 397,220
   oPanel3:Anchor := 3

   @ 665,115 PANEL oPanel4 SIZE 432,220
   oPanel4:Anchor := 3

   @ 265,340 BROWSE oBrowse1 ARRAY  SIZE 832,225 STYLE WS_BORDER + WS_VSCROLL ;
      ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS

   oBrowse1:nHeadRows := 2
   oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
   oBrowse1:oFont := HFont():Add( '',0,-15,700,,,)
   oBrowse1:freeze := 2
   oBrowse1:aArray := {}

   oBrowse1:AddColumn( HColumn():New( "Mês/Ano",hwg_ColumnArBlock(),"C",9,0,.F.,1,2,,,,,,,,,,))
   oBrowse1:AddColumn( HColumn():New('Total Vendas', hwg_ColumnArBlock() ,'N',20, 2 ,.F.,1,2,'@E 999,999,999.99',,,,,,,,,))
   oBrowse1:AddColumn( HColumn():New('A Receber', hwg_ColumnArBlock() ,'N',20, 2 ,.F.,1,2,'@E 999,999,999.99',,,,,,,,,))
   oBrowse1:AddColumn( HColumn():New('Inadimplência', hwg_ColumnArBlock() ,'N',20, 2 ,.F.,1,2,'@E 999,999,999.99',,,,,,,,,))
   oBrowse1:AddColumn( HColumn():New('A Pagar', hwg_ColumnArBlock() ,'N',20, 2 ,.F.,1,2,'@E 999,999,999.99',,,,,,,,,))
   oBrowse1:AddColumn( HColumn():New('Em Atrazo', hwg_ColumnArBlock() ,'N',20, 2 ,.F.,1,2,'@E 999,999,999.99',,,,,,,,,))

   ADD STATUS oStatus1 TO oDlg PARTS 200,800
   oCombo_Anos:SetItem( Ascan(::aAnos,strzero(Year(Date()),4,0) ) )

   ACTIVATE DIALOG oDlg  CENTER

   RETURN Nil


teste.png
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando OOP

Mensagempor JoséQuintas » 22 Nov 2021 19:11

Alterei esta parte:
   @ 10,5 SAY oVendas CAPTION LTRIM(Transform(::nVendas,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,25 SAY oLabel2 CAPTION "Total Vendas" OF oPanel2 SIZE 234,16 ;
      FONT HFont():Add( '',0,-10,400,,,)

   @ 10,55 SAY oAReceber CAPTION LTRIM(Transform(::nAReceber,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,75 SAY oLabel3 CAPTION "A Receber" OF oPanel2 SIZE 234,16 ;
      FONT HFont():Add( '',0,-10,400,,,)

   @ 10,95 SAY oReceberEmAtrazo CAPTION LTRIM(Transform(::nReceberEmAtrazo,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,115 SAY oLabel4 CAPTION "Inadimplência" OF oPanel2 SIZE 234,16 ;
      FONT HFont():Add( '',0,-10,400,,,)

   @ 10,135 SAY oRecebido CAPTION LTRIM(Transform(::nRecebido,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,155 SAY oLabel5 CAPTION "Recebido" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      FONT HFont():Add( '',0,-10,400,,,)

   @ 10,190 SAY oAPagar CAPTION LTRIM(Transform(::nAPagar,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,210 SAY oLabel6 CAPTION "A Pagar" OF oPanel2 SIZE 234,16 ;
      FONT HFont():Add( '',0,-10,400,,,)

   @ 10,230 SAY oPagarEmAtrazo CAPTION LTRIM(Transform(::nPagarEmAtrazo,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,250 SAY oLabel7 CAPTION "Em Atrazo" OF oPanel2 SIZE 234,16 ;
      FONT HFont():Add( '',0,-10,400,,,)

   @ 10,270 SAY oPago CAPTION LTRIM(Transform(::nPago,"@E 99,999,999,999.99") ) OF oPanel2 SIZE 234,20 ;
      FONT HFont():Add( '',0,-19,700,,,)

   @ 10,290 SAY oLabel8 CAPTION "Pago" OF oPanel2 SIZE 234,16 ;
      STYLE SS_LEFT ;
      FONT HFont():Add( '',0,-10,400,,,)

   FOR EACH oControl IN { oVendas, oLabel2, oAReceber, oLabel3, oReceberEmAtrazo, ;
      oLabel4, oRecebido, oLabel5, oAPagar, oLabel6, oPagarEmAtrazo, oLabel7, oPago, oLabel8 }
      oControl:Anchor := 11
      oControl:SetColor( 16777215, 4339747 )
      oControl:Style := SS_LEFT
   NEXT


Os fontes não tem mesmo tamanho, senão reduziria um pouco mais.
É por isso que eu acho que deveria ser em OOP.
Poderíamos até criar um controle pré-definido, com o estilo que queremos e apenas usá-lo, economizando definição pra cada um.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando OOP

Mensagempor JoséQuintas » 22 Nov 2021 19:14

   FOR EACH oControl IN { oVendas, oLabel2, oAReceber, oLabel3, oReceberEmAtrazo, ;
      oLabel4, oRecebido, oLabel5, oAPagar, oLabel6, oPagarEmAtrazo, oLabel7, oPago, oLabel8 }
      oControl:Anchor := 11
      oControl:SetColor( 16777215, 4339747 )
      oControl:Style := SS_LEFT
   NEXT

Nessa parte, defini anchor, cores frente/fundo, e alinhamento pra todos os controles de uma vez, sem precisar fazer um por um.
Demorei pra encontrar o SetColor() no fonte de hwcwindow, que também tem tcolor e bcolor.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes

Usando OOP

Mensagempor JoséQuintas » 22 Nov 2021 19:39

Nesse FOR/EACH tem 14 controles.
14 controles x 3 linhas pra cada um = 42 linhas
42 linhas reduzidas pra 6, deixou o fonte 36 linhas mais limpo.
E facilita manutenção: basta alterar um único lugar pra alterar 14 controles de uma vez, o que poderiam ser até todas as telas do aplicativo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18015
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1206 vezes




Retornar para HwGui

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 5 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro