Ícone de telas modais

Existe alguma configuração para modificar o ícone das telas?

image

João, atualmente não é possível alterar este ícone.

Um workround seria utilizar um HWND, um identificador de janela, disponível na Win32 API.

Em c++:

#include "wtypes.h"

int main()
{
  HWND hWnd = GetForegroundWindow();
  HICON hIconSm = (HICON) LoadImage(
        NULL, "Icon.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
  SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIconSm);
}

No Elipse, no OnShow da tela modal execute o .exe compilado a partir do código acima e o adicione a mesma pasta do .dom junto com o .ico desejado.

Sub Popup_OnShow()
	Dim oShell
	Set oShell = CreateObject("WScript.Shell")

	' # Caminho p/ o executavel #
	oShell.Run "ChangeIcon.exe", 0, True	
End Sub

Link para download do exe compilado e o ico de exemplo.


image

4 Likes

@leandrobpedro Obrigado, rapaz você quebrou um galho enorme! Parabéns.

Muito bom!
Seria possivel atualizar o .exe pra que possamos passar o caminho do arquivo ico?

Ex: oShell.Run “ChangeIcon.exe -Icopath D:\pasta\icon.ico”, 0, True

Valeu!

Sim, claro, de forma bem simplificada seria algo como:

#include "wtypes.h"
#include <string>

int main(int argc, char const *argv[])
{
    if (argc < 2) {
        // argumentos insuficientes
        return 1;
    }

    std::string iconPath = argv[1];

    HWND hWnd = GetForegroundWindow();
    HICON hIconSm = (HICON) LoadImage(
            NULL, iconPath.c_str(), IMAGE_ICON, 16, 16, LR_LOADFROMFILE);
    SendMessage(hWnd, WM_SETICON, ICON_SMALL, (LPARAM) hIconSm);

    return 0;
}

No Elipse:

Sub Popup_OnShow()
	Dim oShell
	Dim sIconPath
	
	Set oShell = CreateObject("WScript.Shell")

	sIconPath = "d:\path\to\my\icon.ico"
	
	oShell.Run ".\changeicon.exe " & """" & sIconPath & """", 0, True	
End Sub

:link: changeicon.exe

1 Like

Boa tarde, Leandro.

image

Estou com este erro agora. Antes desse, deu alguns de dll faltando. Consegui achar elas no Google e coloquei no mesmo diretorio do exe (Sao elas: libgcc_s_dw2-1, libgcc_s_seh-1, libstdc+±6 e libwinpthread-1). Talvez esteja faltando outra, ou a versao delas não seja correta.

Consegue disponibiliza-las? Tem ideia do que pode ser?

Grato!

Sim, você deve deve instruir o linker a uma ligação estática.

g++.exe -static -static-libgcc -static-libstdc++

Acesse o link novamente que eu o recompilei.

1 Like

Funcionou. Muito obrigado!