Clipper On Line • Ver Tópico - Usando BITMAP no TAB
Mudar para estilo Clássico
Projeto HwGui - Biblioteca visual para Harbour/xHarbour
Postar uma resposta

Usando BITMAP no TAB

25 Nov 2020 13:03

Estou tentando colocar bitmaps no TAB mas eles não estão aparecendo, o que esta faltando ????

Segue o Código para ajuda, os BITMAPS estão no RESOURCE e com a cor correta.

@ 1,113 TAB oPage1 ITEMS {} SIZE 1024,456 ;
ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS;
ON CHANGE {|This| ::Consultas_tab(This, oDlg, LTRIM(str(oPage1:oBrowse1:aArray[ oPage1:oBrowse1:nCurrent, 1])), oPage1:oBrowse1:aArray[ oPage1:oBrowse1:nCurrent, 2]) };
BITMAP {"product-256-30-neg", "FOLDER-256-30-neg", "FOLDER-256-30-neg" , "PRINTER-256-30-neg"} FROM RESOURCE

Usando BITMAP no TAB

26 Nov 2020 11:59

E aceita resource ?

é repetido assim mesmo BITMAP {"product-256-30-neg", "FOLDER-256-30-neg", "FOLDER-256-30-neg" , "PRINTER-256-30-neg"}

Usando BITMAP no TAB

26 Nov 2020 22:07

asimoes escreveu:E aceita resource ?

é repetido assim mesmo BITMAP {"product-256-30-neg", "FOLDER-256-30-neg", "FOLDER-256-30-neg" , "PRINTER-256-30-neg"}


Sim o BITMAP neste caso é um ARRAY , aceita RESOURCE sim

#xcommand @ <x>,<y> TAB [ <oTab> ITEMS ] <aItems> ;
[ OF <oWnd> ] ;
[ ID <nId> ] ;
[ SIZE <width>, <height> ] ;
[ STYLE <nStyle> ] ;
[ FONT <oFont> ] ;
[ ON INIT <bInit> ] ;
[ ON SIZE <bSize> ] ;
[ ON PAINT <bDraw> ] ;
[ ON CHANGE <bChange> ] ;
[ ON CLICK <bClick> ] ;
[ ON GETFOCUS <bGetFocus> ];
[ ON LOSTFOCUS <bLostFocus>];
[ BITMAP <aBmp> [<res: FROM RESOURCE>] [ BITCOUNT <nBC> ] ] ;
=> ;
[<oTab> := ] HTab():New( <oWnd>,<nId>,<nStyle>,<x>,<y>,<width>, ;
<height>,<oFont>,<bInit>,<bSize>,<bDraw>,<aItems>,<bChange>, <aBmp>, <.res.>,<nBC>,;
<bClick>, <bGetFocus>, <bLostFocus> );
[; hwg_SetCtrlName( <oTab>,<(oTab)> )]

#xcommand BEGIN PAGE <cname> OF <oTab> ;
=> ;
<oTab>:StartPage( <cname> )

#xcommand END PAGE OF <oTab> ;
=> ;
<oTab>:EndPage()

#xcommand ENDPAGE OF <oTab> ;
=> ;
<oTab>:EndPage()

Usando BITMAP no TAB

27 Nov 2020 09:05

Nesses casos eu olharia o fonte da hwgui pra ver se está implementado essa função para bitmap, aprendi muito olhando os fontes para entender o que estava errado.

Usando BITMAP no TAB

27 Nov 2020 09:38

Fiz um teste aqui por resource não funcionou, funcionou carregando o arquivo da pasta

Código:
@ 1,113 TAB oPage1 ITEMS {"TESTE   ", "TESTE   ", "TESTE   ", "TESTE   "} SIZE 1024,456 ;
   ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS;
   BITMAP {"AVI\exclama.bmp", "ICON_OK16", "ICON_OK16" , "ICON_OK16"} //FROM RESOURCE

2020-11-27 09_35_23-Window.png

Usando BITMAP no TAB

27 Nov 2020 09:55

Tem que ser icones 32 x 32 bitmaps
2020-11-27 09_49_08-Window.png

Usando BITMAP no TAB

27 Nov 2020 11:35

A função hwg_Loadbitmap pode estar falhando na leitura do resouce

Eu ainda prefiro deixar do lado de fora da aplicação qq imagem

Usando BITMAP no TAB

27 Nov 2020 20:58

Como fica a parte

BEGIN PAGE <cname> OF <oTab>

END PAGE

mudei a forma de fazer esta parte mas não deu certo
Código:
   @ 1,113 TAB oPage1 ITEMS {'PRODUTOS', 'CONSULTA 1', 'CONSULTA 2', 'RANKING DE PRODUTOS', 'RELATÓRIOS'} SIZE 1024,456 ;
         ON SIZE ANCHOR_TOPABS + ANCHOR_LEFTABS + ANCHOR_RIGHTABS + ANCHOR_BOTTOMABS;
         ON CHANGE  {|This| ::Consultas_tab(This, oDlg, LTRIM(str(oPage1:oBrowse1:aArray[ oPage1:oBrowse1:nCurrent, 1])), oPage1:oBrowse1:aArray[ oPage1:oBrowse1:nCurrent, 2], @cProgressKey ) } ;
         BITMAP {'C:\SGCMARIADB\ICONS\product-256-30-neg.BMP'} //from RESOURCE

         oPage1:StartPage( 'PRODUTOS' )

Usando BITMAP no TAB

27 Nov 2020 21:37

O Bitmap tem que ter essa dimensão 32 x 32 pixels

Usando BITMAP no TAB

27 Nov 2020 22:38

Código:
HB_FUNC( HWG_LOADBITMAP )
{
   if( HB_ISNUM( 1 ) )
   {
      if( !HB_ISNIL( 2 ) && hb_parl( 2 ) )
         HB_RETHANDLE( LoadBitmap( NULL, MAKEINTRESOURCE( hb_parni( 1 ) ) ) );
      else
         HB_RETHANDLE( LoadBitmap( GetModuleHandle( NULL ),
                     MAKEINTRESOURCE( hb_parni( 1 ) ) ) );
   }
   else
   {
      void *hString;
      HB_RETHANDLE( LoadBitmap( GetModuleHandle( NULL ), HB_PARSTR( 1,
                        &hString, NULL ) ) );
      hb_strfree( hString );
   }
}


loadbitmap apenas carrega a imagem

Código:
HB_FUNC( HWG_LOADIMAGE )
{
   void *hString = NULL;

   HB_RETHANDLE( LoadImage( HB_ISNIL( 1 ) ? GetModuleHandle( NULL ) : ( HINSTANCE ) hb_parnl( 1 ),      // handle of the instance that contains the image
               HB_ISNUM( 2 ) ? MAKEINTRESOURCE( hb_parni( 2 ) ) : HB_PARSTR( 2, &hString, NULL ),       // name or identifier of image
               ( UINT ) hb_parni( 3 ),  // type of image
               hb_parni( 4 ),   // desired width
               hb_parni( 5 ),   // desired height
               ( UINT ) hb_parni( 6 )   // load flags
          ) );
   hb_strfree( hString );
}


LoadImage permite redimensionar

As classes hbitmap, hicon seriam as mais adequadas pra isso.

Usando BITMAP no TAB

28 Nov 2020 06:47

Quintas

Pensei também na HWG_LOADIMAGE mas vai ter que modificar a classe, tem que apresentar o problema para o Kressin

Usando BITMAP no TAB

28 Nov 2020 07:29

Consegui definir tamanho para o bitmap, mas resource não carregou

Código:
        IF lResour
            nHandleFile := HBitmap():AddResource( aImages[ i ], LR_LOADTRANSPARENT + LR_LOADMAP3DCOLORS, , 24, 24 ):handle
         ELSE
            nHandleFile := HBitmap():AddFile( aImages[ i ], LR_LOADTRANSPARENT + LR_LOADMAP3DCOLORS, , 24, 24 ):handle
         ENDIF         


Isso fica no METHOD New da classe HTab

Usando BITMAP no TAB

28 Nov 2020 07:35

2020-11-28 07_34_12-Window.png


Com a classe modificada definindo tamanho do bitmap para 24 x 24 pixel

Usando BITMAP no TAB

28 Nov 2020 08:09

Consegui carregar o bitmap do .rc tinha uma bobeira no arquivo, mas pra funcionar teve essa modificação ai em cima na classe
2020-11-28 08_20_51-Window.png

Usando BITMAP no TAB

28 Nov 2020 08:25

Modifiquei a chamada pra definir o tamanho do BMP é opcional SIZEBMP
Modifiquei o método New para incluir os tamanhos W e H

Isso pode ser uma sugestão para o Kressin
Código:
#xcommand @ <x>,<y> TAB [ <oTab> ITEMS ] <aItems> ;
             [ OF <oWnd> ]              ;
             [ ID <nId> ]               ;
             [ SIZE <width>, <height> ] ;
             [ STYLE <nStyle> ]         ;
             [ FONT <oFont> ]           ;
             [ ON INIT <bInit> ]        ;
             [ ON SIZE <bSize> ]        ;
             [ ON PAINT <bDraw> ]       ;
             [ ON CHANGE <bChange> ]    ;
             [ ON CLICK <bClick> ]      ;
             [ ON RIGHTCLICK <bRClick> ];
             [ ON GETFOCUS <bGetFocus> ];
             [ ON LOSTFOCUS <bLostFocus>];
             [ BITMAP <aBmp>  [<res: FROM RESOURCE>] [ BITCOUNT <nBC> ] ]  ;
             [ SIZEBMP <nWidthIm>, <nHeightIm> ] ;
          => ;
          [<oTab> := ] HTab():New( <oWnd>,<nId>,<nStyle>,<x>,<y>,<width>, ;
             <height>,<oFont>,<bInit>,<bSize>,<bDraw>,<aItems>,<bChange>, <aBmp>, <.res.>,<nBC>,;
             <bClick>, <bGetFocus>, <bLostFocus>, <bRClick>, <nWidthIm>, <nHeightIm> ) ;;
          [ <oTab>:name := <(oTab)> ]
Postar uma resposta