AddFile x AddResource comportamento diferente
Moderador: Moderadores
AddFile x AddResource comportamento diferente
Pessoal,
Tenho um icone que tem o tamanho 32 x 32 px, quero usar esse icone em uma tela com a dimensão 16 x 16 px
Usando
HIcon():AddFile("AVI\ICON011.ICO", 16, 16) não funciona, fica com o tamanho original
Agora se colocar esse icone no RESOURCE.RC e usar, funciona a resolução:
HIcon():AddResource("ICON_MSG", 16, 16)
Tenho um icone que tem o tamanho 32 x 32 px, quero usar esse icone em uma tela com a dimensão 16 x 16 px
Usando
HIcon():AddFile("AVI\ICON011.ICO", 16, 16) não funciona, fica com o tamanho original
Agora se colocar esse icone no RESOURCE.RC e usar, funciona a resolução:
HIcon():AddResource("ICON_MSG", 16, 16)
►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)
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
AddFile x AddResource comportamento diferente
Dá uma olhada no fonte, se ele usa a API passando os parâmetros de tamanho.
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/
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/
AddFile x AddResource comportamento diferente
Sim passa.JoséQuintas escreveu:Dá uma olhada no fonte, se ele usa a API passando os parâmetros de tamanho.
Esses são os métodos da classe HIcon, os dois métodos usam hwg_LoadImage( 0, Name, IMAGE_ICON, nWidth, nHeight, nFlags ), a diferença é que AddResource o nFlags é 0 (zero)
Código: Selecionar todos
METHOD AddResource( name, nWidth, nHeight, nFlags, lOEM ) CLASS HIcon
LOCAL lPreDefined := .F. , oElemento, aIconSize
IF nWidth == Nil
nWidth := 0
ENDIF
IF nHeight == Nil
nHeight := 0
ENDIF
IF nFlags == Nil
nFlags := 0
ENDIF
IF lOEM == Nil
lOEM := .F.
ENDIF
IF ValType( Name ) == "N"
Name := LTrim( Str( Name ) )
lPreDefined := .T.
ENDIF
FOR EACH oElemento IN ::aIcons
IF oElemento:name == Name
oElemento:nCounter ++
RETURN oElemento
ENDIF
NEXT
// ::classname:= "HICON"
IF lOEM // LR_SHARED is required for OEM images
::handle := hwg_LoadImage( 0, Val( Name ), IMAGE_ICON, nWidth, nHeight, Hwg_bitor( nFlags, LR_SHARED ) )
ELSE
::handle := hwg_LoadImage( Nil, iif( lPreDefined, Val( Name ), Name ), IMAGE_ICON, nWidth, nHeight, nFlags )
ENDIF
::Name := Name
aIconSize := hwg_GetIconSize( ::handle )
::nWidth := aIconSize[ 1 ]
::nHeight := aIconSize[ 2 ]
aAdd( ::aIcons, Self )
RETURN Self
METHOD AddFile( Name, nWidth, nHeight, nFlags ) CLASS HIcon
LOCAL oElemento, aIconSize, cName := CutPath( Name ), cCurDir, nHandleFile, aTamIcon, nIconW, nIconH
LOCAL nWidthIcon, nHeightIcon, lPreDefined := .F.
IF nFlags = Nil
nFlags := LR_LOADFROMFILE + LR_SHARED + LR_LOADTRANSPARENT + LR_LOADMAP3DCOLORS
ENDIF
FOR EACH oElemento IN ::aIcons
IF oElemento:Name == cName
oElemento:nCounter ++
RETURN oElemento
ENDIF
NEXT
// ::classname:= "HICON"
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
::handle := hwg_LoadImage( 0, Name, IMAGE_ICON, nWidth, nHeight, nFlags )
::Name := cName
aIconSize := hwg_GetIconSize( ::handle )
::nWidth := aIconSize[ 1 ]
::nHeight := aIconSize[ 2 ]
aAdd( ::aIcons, Self )
RETURN Self
Código: Selecionar todos
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 );
}
►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)
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)
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
AddFile x AddResource comportamento diferente
E no addfile?
Lembrando que LoadImage() é só pra tipos padrão.
Lembrando que LoadImage() é só pra tipos padrão.
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/
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/
- JoséQuintas
- Administrador

- Mensagens: 20267
- Registrado em: 26 Fev 2007 11:59
- Localização: São Paulo-SP
AddFile x AddResource comportamento diferente
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/
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/
AddFile x AddResource comportamento diferente
Já tinha olhado isso nessa páginaJoséQuintas escreveu:Acho que tem a ver com flags.
O que diferencia um método do outro é isso
método AddResource
nFlags := 0
método AddFile
nFlags := LR_LOADFROMFILE + LR_SHARED + LR_LOADTRANSPARENT + LR_LOADMAP3DCOLORS
Se colocar nFlags := 0 em AddFile os icones não aparecem, isso só funciona com AddResource, agora com AddResource funciona se definir o tamanho que eu quiser, o problema é que acarreta é inchar o .exe
►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)
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)
AddFile x AddResource comportamento diferente
Exemplicando o uso:
oIcon := HIcon():AddResource("ICON_MSG", 16, 16) //funciona
oIcon := HIcon():AddFile("AVI\ICON011.ICO", 16, 16) //não funciona, mantém o tamanho original
oIcon := HIcon():AddResource("ICON_MSG", 16, 16) //funciona
oIcon := HIcon():AddFile("AVI\ICON011.ICO", 16, 16) //não funciona, mantém o tamanho original
►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)
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)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
AddFile x AddResource comportamento diferente
Ola!
Estou tentando entender mais, esses processos.
Tem .PNG, .SVG(agora), .ICO ...
Mas eu tenho que converter para .BMP senão não mostra no PANEL(via resource), no arquivo .RC importa .PNG mas não mostra, via:
Pq agora os novos ICONES vem todos com extensão .SVG
Saudações,
Itamar M. Lins Jr.
Estou tentando entender mais, esses processos.
Tem .PNG, .SVG(agora), .ICO ...
Mas eu tenho que converter para .BMP senão não mostra no PANEL(via resource), no arquivo .RC importa .PNG mas não mostra, via:
Qual é o mais indicado para trabalhar no caso ?BITMAP oPagar64 FROM RESOURCE
Pq agora os novos ICONES vem todos com extensão .SVG
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
AddFile x AddResource comportamento diferente
A questão é carregar o .ICO, .BMP quando precisar ou colocar isso no .RC, qual o custo disso? inflar o .exe mas não tem o problema de não existir o icone ou colocar esses icones em uma pasta para o .exe mostrar.Itamar M. Lins Jr. escreveu:Qual é o mais indicado para trabalhar no caso ?
Quanto aos novos formatos a minigui e hwgui mais recente conseguem usar png, svg etc em botões, janela, panel etc?
►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)
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)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
AddFile x AddResource comportamento diferente
Ola!
Com .JPG funciona.
Alias preciso refazer os testes...
Agora vem .svg com 256 de resolução, dai usamos do tamanho que precisar( menor) até o limite... Assim entendo.
Mas na Hwgui tenho que testar isso. Não sei.
Qualquer tema do KDE vem em .SGV, nem o win10 reconhece, só o chrome!
Saudações,
Itamar M. Lins Jr.
Com .JPG funciona.
Alias preciso refazer os testes...
Agora vem .svg com 256 de resolução, dai usamos do tamanho que precisar( menor) até o limite... Assim entendo.
Mas na Hwgui tenho que testar isso. Não sei.
Qualquer tema do KDE vem em .SGV, nem o win10 reconhece, só o chrome!
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
AddFile x AddResource comportamento diferente
Offtopic:
Consegui criar uma função em C HWG_GRAYLOADICON com escala cinza, útil para botões ficarem cinza, quando estão disable.
Consegui criar uma função em C HWG_GRAYLOADICON com escala cinza, útil para botões ficarem cinza, quando estão disable.
►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)
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)
AddFile x AddResource comportamento diferente
O código da função é esse, se o Alexander Kressin quiser tá ai.
Código: Selecionar todos
HB_FUNC( HWG_GRAYLOADICON )
{
void *hString = NULL;
COLORREF palette[256];
for(int i = 0; i < 256; i++)
{
palette[i] = RGB(255-i, 255-i, 255-i);
}
HICON myIcon = (HICON)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
);
HICON grayIcon = CreateGrayscaleIcon(myIcon,palette);
HB_RETHANDLE( grayIcon ) ;
hb_strfree( hString );
}
Código: Selecionar todos
#ifndef _CREATEGRAYSCALEICON_H
#define _CREATEGRAYSCALEICON_H
COLORREF defaultGrayPalette[256];
BOOL bGrayPaletteSet = FALSE;
HICON CreateGrayscaleIcon( HICON hIcon, COLORREF* pPalette )
{
if (hIcon == NULL)
{
return NULL;
}
HDC hdc = GetDC(NULL);
HICON hGrayIcon = NULL;
ICONINFO icInfo = { 0 };
ICONINFO icGrayInfo = { 0 };
LPDWORD lpBits = NULL;
LPBYTE lpBitsPtr = NULL;
SIZE sz;
DWORD c1 = 0;
BITMAPINFO bmpInfo = { 0 };
bmpInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
if (GetIconInfo(hIcon, &icInfo))
{
if (GetDIBits(hdc, icInfo.hbmColor, 0, 0, NULL, &bmpInfo, DIB_RGB_COLORS) != 0)
{
bmpInfo.bmiHeader.biCompression = BI_RGB;
sz.cx = bmpInfo.bmiHeader.biWidth;
sz.cy = bmpInfo.bmiHeader.biHeight;
c1 = sz.cx * sz.cy;
lpBits = (LPDWORD)GlobalAlloc(GMEM_FIXED, (c1) * 4);
if (lpBits && GetDIBits(hdc, icInfo.hbmColor, 0, sz.cy, lpBits, &bmpInfo, DIB_RGB_COLORS) != 0)
{
lpBitsPtr = (LPBYTE)lpBits;
UINT off = 0;
for (UINT i = 0; i < c1; i++)
{
off = (UINT)( 255 - (( lpBitsPtr[0] + lpBitsPtr[1] + lpBitsPtr[2] ) / 3) );
if (lpBitsPtr[3] != 0 || off != 255)
{
if (off == 0)
{
off = 1;
}
lpBits[i] = pPalette[off] | ( lpBitsPtr[3] << 24 );
}
lpBitsPtr += 4;
}
icGrayInfo.hbmColor = CreateCompatibleBitmap(hdc, sz.cx, sz.cy);
if (icGrayInfo.hbmColor != NULL)
{
SetDIBits(hdc, icGrayInfo.hbmColor, 0, sz.cy, lpBits, &bmpInfo, DIB_RGB_COLORS);
icGrayInfo.hbmMask = icInfo.hbmMask;
icGrayInfo.fIcon = TRUE;
hGrayIcon = CreateIconIndirect(&icGrayInfo);
DeleteObject(icGrayInfo.hbmColor);
}
GlobalFree(lpBits);
lpBits = NULL;
}
}
DeleteObject(icInfo.hbmColor);
DeleteObject(icInfo.hbmMask);
}
ReleaseDC(NULL,hdc);
return hGrayIcon;
}
HICON CreateGrayscaleIcon1( HICON hIcon )
{
if (hIcon == NULL)
{
return NULL;
}
if (!bGrayPaletteSet)
{
for(int i = 0; i < 256; i++)
{
defaultGrayPalette[i] = RGB(255-i, 255-i, 255-i);
}
bGrayPaletteSet = TRUE;
}
return CreateGrayscaleIcon(hIcon, defaultGrayPalette);
}
#endif
►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)
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)
AddFile x AddResource comportamento diferente
Resolvido.
Era isso que estava impedindo usar tamanhos diferentes no método AddFile da classe HIcon
Código original:
Código modificado:
Era isso que estava impedindo usar tamanhos diferentes no método AddFile da classe HIcon
Código original:
Código: Selecionar todos
FOR EACH oElemento IN ::aIcons
IF oElemento:Name == cName
oElemento:nCounter ++
RETURN oElemento
ENDIF
NEXT
Código: Selecionar todos
FOR EACH oElemento IN ::aIcons
IF oElemento:Name == cName .AND. ( oElemento:nWidth = nWidth .OR. oElemento:nHeight = nHeight )
oElemento:nCounter ++
RETURN oElemento
ENDIF
NEXT
►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)
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)
AddFile x AddResource comportamento diferente
►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)
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)
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7928
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
AddFile x AddResource comportamento diferente
Ola!
Qual é o arquivo ?
Saudações,
Itamar M. Lins Jr.
Qual é o arquivo ?
Não achei no SVN essas linhas, nem arquivo.Era isso que estava impedindo usar tamanhos diferentes no método AddFile da classe HIcon
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
