Página 2 de 3
Cor de fundo do ICON
Enviado: 08 Dez 2020 17:41
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
Cor de fundo do ICON
Enviado: 08 Dez 2020 20:41
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
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
Icone com fundo preto com o valor original 0xFF000000UL
Cor de fundo do ICON
Enviado: 08 Dez 2020 21:00
por asimoes
Para icone branco tem que usar o valor original, talvez tenha que ser um parâmetro da function
Cor de fundo do ICON
Enviado: 08 Dez 2020 21:12
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
Cor de fundo do ICON
Enviado: 09 Dez 2020 00:55
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.
Cor de fundo do ICON
Enviado: 09 Dez 2020 08:36
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.
Cor de fundo do ICON
Enviado: 09 Dez 2020 10:56
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
Cor de fundo do ICON
Enviado: 09 Dez 2020 12:55
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.
Cor de fundo do ICON
Enviado: 09 Dez 2020 21:02
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.
Cor de fundo do ICON
Enviado: 10 Dez 2020 09:32
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
Cor de fundo do ICON
Enviado: 10 Dez 2020 11:22
por JoséQuintas
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
Cor de fundo do ICON
Enviado: 10 Dez 2020 11:22
por Claudio Soto
Si BT sólo funciona en Windows porque uriliza el API de Windows para manipular los mapas de bits.
Cor de fundo do ICON
Enviado: 10 Dez 2020 11:45
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)
Cor de fundo do ICON
Enviado: 10 Dez 2020 12:34
por JoséQuintas
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.
Cor de fundo do ICON
Enviado: 10 Dez 2020 13:06
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.