Cor de fundo do ICON

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cor de fundo do ICON

Mensagem por asimoes »

JoséQuintas escreveu:Tem @ x, y ICON .... mas pra ficar transparente usa @ x, y BITMAP

Resta a dúvida.... o ICO é ICO mesmo, ou é BMP salvo como ICO?
É icone mesmo, mas vou verificar e informo aqui., porque andei modificando essa classe pra carregar outros tipos de imagens
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cor de fundo do ICON

Mensagem por asimoes »

Código: Selecionar todos

@ 010,500 BITMAP oIcon ;
                SHOW          HBitMap():AddFile("AVI\exit-512 Black.ico", .T., 60, 60) ; 
                OF            oPanelx1 ;
                STRETCH       0 ;
                BACKTRANSPARENT ;
                SIZE          60, 60 
2020-12-08 20_22_39-Greenshot.png
Na lib Hwgui + Bostaurus

Código: Selecionar todos

METHOD AddFile( Name, hDC, lTranparent, nWidth, nHeight ) CLASS HBitmap
LOCAL oElemento, aBmpSize, cName := CutPath( Name ), cCurDir
   
   FOR EACH oElemento IN ::aBitmaps
      IF oElemento:Name == cName .AND. oElemento:bGray = "0" .AND. ( oElemento:nWidth = nWidth .OR. oElemento:nHeight = nHeight )
         oElemento:nCounter ++
         RETURN oElemento
      ENDIF
   NEXT

   Name := iif( ! File( Name ) .AND. File( cName ), cName, Name )
   
   IF ::lSelFile .AND. ! File( Name )
      cCurDir  := DiskName() + [:\] + CurDir()
      Name := hwg_SelectFile( "Image Files( *.jpg;*.gif;*.bmp;*.ico )", CutPath( Name ), FilePath( Name ), "Locate " + Name ) //"*.jpg;*.gif;*.bmp;*.ico"
      DirChange( cCurDir )
   ENDIF

   IF Lower( Right( Name, 4 ) ) != ".bmp" .OR. ( nWidth == Nil .AND. nHeight == Nil .AND. lTranparent == Nil )
      IF Lower( Right( Name, 4 ) ) == ".bmp"
         ::handle := hwg_OpenBitMap( Name, hDC )
      ELSE
         * A chamada do ICO, JPG, GIF, PNG, TIF OU BMP poderia até remover o if acima para carregar o BMP
         ::handle := BT_BitmapLoadFile( Name )
         IF nWidth != Nil .AND. nHeight != Nil
            ::handle := BT_BitmapCopyAndResize( ::handle, nWidth, nHeight ) 
         ENDIF   
      ENDIF
   ELSE
      IF lTranparent != Nil .AND. lTranparent
         ::handle := hwg_LoadImage( Nil, Name, IMAGE_BITMAP, nWidth, nHeight, LR_LOADFROMFILE + LR_LOADTRANSPARENT + LR_LOADMAP3DCOLORS )
      ELSE
         ::handle := hwg_LoadImage( Nil, Name, IMAGE_BITMAP, nWidth, nHeight, LR_LOADFROMFILE )
      ENDIF
   ENDIF
  
   IF Empty( ::handle )
      RETURN Nil
   ENDIF
   
   ::bGray := "0"
   
   ::name := cName
   
   aBmpSize  := hwg_GetBitmapSize( ::handle )
   
   ::nWidth  := aBmpSize[ 1 ]
   
   ::nHeight := aBmpSize[ 2 ]
   
   aAdd( ::aBitmaps, Self )

RETURN Self

Na lib

FUNCTION BT_BitmapLoadFile ( cFileName )

   LOCAL hBitmap := BT_BMP_LOADFILE ( cFileName )

RETURN hBitmap

Função C

//*************************************************************************************************
//* BT_BMP_LOADFILE (cFileBMP) ---> Return hBITMAP
//*************************************************************************************************

HB_FUNC( BT_BMP_LOADFILE )
{
   HBITMAP hBitmap;
   CHAR *  FileName;

   FileName = ( CHAR * ) hb_parc( 1 );

   // First find BMP image in resourses (.EXE file)
   hBitmap = ( HBITMAP ) LoadImage( GetModuleHandle( NULL ), FileName, IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );

   // If fail: find BMP in disk
   if( hBitmap == NULL )
      hBitmap = ( HBITMAP ) LoadImage( NULL, FileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION | LR_LOADTRANSPARENT | LR_LOADMAP3DCOLORS );

   // If fail: find JPG Image in resourses
   if( hBitmap == NULL )
      hBitmap = bt_LoadOLEPicture( FileName, "JPG" );

   // If fail: find GIF Image in resourses
   if( hBitmap == NULL )
      hBitmap = bt_LoadOLEPicture( FileName, "GIF" );

   // If fail: find PNG Image in resourses
   if( hBitmap == NULL )
      hBitmap = bt_LoadGDIPlusPicture( FileName, "PNG" );

   // If fail: find TIF Image in resourses
   if( hBitmap == NULL )
      hBitmap = bt_LoadGDIPlusPicture( FileName, "TIF" );

   // If fail: find JPG and GIF Image in disk
   if( hBitmap == NULL )
      hBitmap = bt_LoadOLEPicture( FileName, NULL );

   // If fail: find PNG and TIF Image in disk
   if( hBitmap == NULL )
      hBitmap = bt_LoadGDIPlusPicture( FileName, NULL );

   // If fail load: return zero
   if( hBitmap == NULL )
   {
      hb_retnll( 0 );
      return;
   }

//   if (bt_bmp_is_24bpp (hBitmap) == FALSE)
//       hBitmapFile = bt_bmp_convert_to_24bpp (hBitmap, BMP_DELETE_ORIGINAL_HBITMAP);   // Convert Bitmap in 24bpp

   hb_retnll( ( LONG_PTR ) hBitmap );
}

HBITMAP bt_LoadGDIPlusPicture( CHAR * FileName, CHAR * TypePictureResource )
{
   IStream *  iStream;
   HBITMAP    hBitmap;
   HGLOBAL    hGlobalAlloc;
   GpBitmap * pGpBitmap;
   ARGB       BkColor;

   if( bt_Load_GDIplus() == FALSE )
      return NULL;

   if( TypePictureResource != NULL )
      hGlobalAlloc = bt_LoadFileFromResources( FileName, TypePictureResource );
   else
      hGlobalAlloc = bt_LoadFileFromDisk( FileName );

   if( hGlobalAlloc == NULL )
      return NULL;

   iStream = NULL;
   hBitmap = NULL;
   if( CreateStreamOnHGlobal( hGlobalAlloc, FALSE, &iStream ) == S_OK )
   {
      //BkColor = 0xFF000000UL; aqui cor transparente 0x00FFFFFFUL
      BkColor = 0x00FFFFFFUL;
      GdipCreateBitmapFromStream( iStream, &pGpBitmap );
      GdipCreateHBITMAPFromBitmap( pGpBitmap, &hBitmap, BkColor );
      iStream->lpVtbl->Release( iStream );
   }

   bt_Release_GDIplus();
   GlobalFree( hGlobalAlloc );
   return hBitmap;
}
Descobri isso

* BkColor = 0xFF000000UL; original da função
BkColor = 0x00FFFFFFUL; cor transparente
2020-12-08 20_46_28-RMChart Demo.png
Icone com fundo preto com o valor original 0xFF000000UL
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cor de fundo do ICON

Mensagem por asimoes »

Para icone branco tem que usar o valor original, talvez tenha que ser um parâmetro da function
2020-12-08 20_58_27-RMChart Demo.png
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cor de fundo do ICON

Mensagem por asimoes »

Qualquer cor diferente de preto e branco não precisar fazer nada, ou criar um parâmetro na BT para tratar B/W
2020-12-08 21_11_41-Greenshot.png
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cor de fundo do ICON

Mensagem por JoséQuintas »

Ok, então vale pra ícone também.

Postei pouco tempo atrás a rotina pra ESCOLHER a cor que vai ficar transparente, ao invés de ser a tela inteira.
Provavelmente a rotina de bitmap faça uso dela, e provavelmente as cores mais usadas pra ficarem transparentes sejam branca e preta.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Cor de fundo do ICON

Mensagem por Itamar M. Lins Jr. »

Olá!
Será bom incorporar a BOSTAURUS na Hwgui, porquê fica esses exemplos com versões incompatíveis, usando 2.17 e a versão final do SVN.
Eu mesmo tenho que reler aqui esses exemplos para entender, mas dai lembro que não existe BOSTAURUS na Hwgui, oficialmente falando.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cor de fundo do ICON

Mensagem por asimoes »

Itamar M. Lins Jr. escreveu:Olá!
Será bom incorporar a BOSTAURUS na Hwgui, porquê fica esses exemplos com versões incompatíveis, usando 2.17 e a versão final do SVN.
Eu mesmo tenho que reler aqui esses exemplos para entender, mas dai lembro que não existe BOSTAURUS na Hwgui, oficialmente falando.
Não existe, mas os fontes estão disponíveis para incorporar na hwgui ou usar fora da hwgui

A Bostaurus é um recurso opcional na Minigui
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Cor de fundo do ICON

Mensagem por Itamar M. Lins Jr. »

Olá!
Eu li no grupo internacional que o Italiano Maurizio fez o porte para a Hwgui, não sei pq eles não fazem o commit.
https://groups.google.com/g/harbour-use ... w_LVzoBgAJ
Hi,
Auge & Ohr suggestion it's very fine.
Today I found the time to study BosTaurus (a very nice piece of code) and how to use it outside HMG and easily did the job.

I just added BosTaurus_C.prg, BosTaurus.ch and mgdefs.h to my project and rewrote the function:

Código: Selecionar todos

#include "bostaurus.ch"

function hbs_ScreenShot( cFileName, nImgType )

   local row       := Hb_GtInfo( HB_GTI_SETPOS_XY )[ 2 ]
   local col       := Hb_GtInfo( HB_GTI_SETPOS_XY )[ 1 ]
   local width     := Hb_GtInfo( HB_GTI_SCREENWIDTH )
   local height    := Hb_GtInfo( HB_GTI_SCREENHEIGHT )
   local maxwidth  := hb_GtInfo( HB_GTI_DESKTOPWIDTH )
   local maxheight := hb_GtInfo( HB_GTI_DESKTOPHEIGHT )
  
   /* reduce the output to the visible part of the app window */
   if col + width > maxwidth
      width := maxwidth - col
   endif
   if row + height > maxheight
      height := maxheight - row
   endif
  
   return BT_BMP_SaveFile( BT_BMP_CaptureScr( Hb_GtInfo( HB_GTI_WINHANDLE ), ;
                                              col, ;
                                              row, ;
                                              width, ;
                                              height, ;
                                              BT_BITMAP_CAPTURE_WINDOW ), ;
                           cFileName, ;
                           hb_defaultValue( nImgType, BT_FILEFORMAT_PNG ) )
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cor de fundo do ICON

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Eu li no grupo internacional que o Italiano Maurizio fez o porte para a Hwgui, não sei pq eles não fazem o commit.
Bostaurus é só Windows, deve ser por isso.
Eu peguei, se não me engano, da OOHG.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Cor de fundo do ICON

Mensagem por asimoes »

JoséQuintas escreveu:Bostaurus é só Windows, deve ser por isso.
Eu peguei, se não me engano, da OOHG.
Linux não deve funcionar
Mesmo porque a Bostaurus foi feita para funcionar originalmente na Minigui
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cor de fundo do ICON

Mensagem por JoséQuintas »

teste.png
No estilo da WVG.... kkkk
Se não deixa definir a cor de fundo na criação.... altera depois...

Código: Selecionar todos

   FOR EACH cCaption, hIcon IN acOptions, ::hIconList
      DO CASE
      CASE cCaption == "Consulta"; bCode := { || ::Consulta() }
      CASE cCaption == "Altera";   bCode := { || ::Altera() }
      CASE cCaption == "Exclui";   bCode := { || ::Exclui() }
      CASE cCaption == "Primeiro"; bCode := { || ::Primeiro() }
      CASE cCaption == "Último";   bCode := { || ::Ultimo() }
      CASE cCaption == "Seguinte"; bCode := { || ::Seguinte() }
      CASE cCaption == "Anterior"; bCode := { || ::Anterior() }
      CASE cCaption == "Sair";     bCode := { || ::Sair() }
      ENDCASE
      @ nCol, nRow ICON hIcon SHOW IconFromCaption( cCaption ) FROM RESOURCE ;
         OF ::oFrm ;
         SIZE 55, 55 ;
         ON CLICK bCode ;
         TOOLTIP cCaption
      hIcon:SetColor( 0, 0 )
      nCol += 60
      IF nCol > 540
         nCol := 1
         nRow += 60
      ENDIF
   NEXT
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Claudio Soto
Colaborador
Colaborador
Mensagens: 566
Registrado em: 27 Ago 2012 12:31
Localização: Uruguay
Contato:

Cor de fundo do ICON

Mensagem por Claudio Soto »

Si BT sólo funciona en Windows porque uriliza el API de Windows para manipular los mapas de bits.
Saludos.
Dr. Claudio Soto
(Uruguay)
http://srvet.blogspot.com
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cor de fundo do ICON

Mensagem por JoséQuintas »

JoséQuintas escreveu:Se não deixa definir a cor de fundo na criação.... altera depois...
Só comentário:
Essa é uma das complicações da API Windows.
O ícone NÃO está na janela do aplicativo, ele está em sua própria janela.
Ao deixar o ícone transparente, o que aparece é a janela do ícone, o que dá a impressão de que o ícone não ficou transparente.

Pelo mesmo motivo, aquele degradê da janela que foi postada anteriormente não aparece no ícone, porque não faz parte dele.
A complicação aqui é quando o transparente do ícone/imagem é diferente do transparente da janela do ícone/imagem.
Exemplo:
na janela do ícone a parte transparente é branca, mas no ícone a parte transparente é preta.
Como só uma cor pode ficar transparente.... se o preto virou transparente, a cor branca da janela aparece.
Então, o ícone branco tem transparência, mas a transparência ficou com o branco da janela do ícone.

O que fiz foi alterar a janela do ícone pra preto, e o ícone transparente deixa aparecer esse preto.
Convém lembrar que a HWGUI deveria ter feito isso automático, pra não precisar fazer isso em tudo que é controle, ao alterar a cor da janela.
Algo do tipo, se cor não definida, usa da mãe (parent)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cor de fundo do ICON

Mensagem por JoséQuintas »

teste.png
Uma visão rápida.

- O ícone é transparente
- A janela DO ÍCONE é vermelha
- A janela DA DIALOG é preta

É isso que muitas vezes confunde, são várias janelas.
Como na maioria das vezes a LIB faz tudo sozinha, a gente acaba esquecendo disso.
O ícone ser transparente não significa que o fundo dele vai ficar da cor da janela da dialog, e nem mesmo de um panel.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"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 do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Cor de fundo do ICON

Mensagem por JoséQuintas »

gthwgui.png
Aproveitando e voltando à janela GT.....
A tela GT é apenas a imagem de fundo.... da mesma forma que poderia ser o efeito gradiente, ou apenas uma única cor.
É o Harbour quem atualiza esse fundo ao fazer SAY/GET e outras coisas.
Pra componentes GUI, tanto faz, já que nem usam essa janela.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder