Mostrando postagens com marcador ícone. Mostrar todas as postagens
Mostrando postagens com marcador ícone. Mostrar todas as postagens

quarta-feira, 6 de setembro de 2017

Imagem de Fundo no Form

Explorando as Propriedades em instâncias da classe System.Windows.Forms.Form, vemos a possibilidade de definir uma imagem de fundo para o Form através de BackgroundImage.

Para atribuirmos a imagem a partir de um arquivo, podemos utilizar o método FromFile de System.Drawing.Image

GDI+ possui codificadores (encoders) e decodificadores (decoders) integrados, que suportam os seguintes formatos de imagem:
  • BMP
  • GIF
  • JPEG
  • PNG
  • TIFF

[void][System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
[void][System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")
[System.Windows.Forms.Application]::EnableVisualStyles() 

_Main  ### Chama a função _Main

Function _Main {
    $FormImg = New-Object System.Windows.Forms.Form 
    $FormImg.ClientSize = New-Object System.Drawing.Size(512,288) 
    $FormImg.FormBorderStyle = [System.Windows.Forms.FormBorderStyle]::Fixed3D
    $FormImg.Text = ".::. Inserindo uma imagem de fundo no Form .::."
    $FormImg.MaximizeBox = $false      #  - Desabilitar 'Maximizar' a Janela
    $FormImg.StartPosition = "CenterScreen"

    #######################
    ### Cria Imagem de Fundo a partir de um arquivo .JPG
    $FormImg.BackgroundImage = [System.Drawing.Image]::`
                            FromFile($PSScriptRoot + "\Img\Fundo.jpg")
    $FormImg.BackgroundImageLayout = "Stretch" ## ajusta-se ao tamanho do Form
                                     # None, Tile, Center, Stretch, Zoom

    #
    #$BotaoSair
    #
    $BotaoSair = New-Object System.Windows.Forms.Button
    $BotaoSair.Font = New-Object System.Drawing.Font("Microsoft Sans Serif", `
                                        10, [System.Drawing.FontStyle]::Bold)
    $BotaoSair.Text = "SAIR"

    ## Executa o código definido na variável $BotaoSair_Click
    $BotaoSair.Add_Click($BotaoSair_Click) 

    $FormImg.Controls.Add($BotaoSair)
    $BotaoSair.Size = New-Object System.Drawing.Size(80, 35)
    $BotaoSair_X = ($FormImg.ClientSize.Width / 2) - ($BotaoSair.Width / 2)
    $BotaoSair_Y = $FormImg.ClientSize.Height - 50
    $BotaoSair.Location = New-Object System.Drawing.`
                            Point($BotaoSair_X, $BotaoSair_Y)

    # Exibe o Form
    [System.Windows.Forms.Application]::Run($FormImg)

} ### End _Main

### Executado no evento de clique em $BotaoSair
$BotaoSair_Click = {
    $FormImg.Close()
}

O resultado da execução desse código é o seguinte:


No vídeo a seguir demonstra-se como codificar a imagem em Base64 e também como adicionar um ícone para o Form.

Códigos podem ser obtidos aqui.

sexta-feira, 1 de setembro de 2017

Extraindo ícones de arquivos

Obter arquivos de ícone (.ICO) a partir de arquivos com o Powershell é fácil, pois há métodos já implementados que nos ajudam com a tarefa.

Aqui vamos demonstrar um exmeplo bem simples de como extrair ícone de um arquivo executável, no caso calc.exe.

Para um script mais aprimorado e completo, sugerimos uma leitura no trabalho de MVP Chrissy Lemaire (Export-Icon from DLL and EXE using PowerShell).

O principal no script está em ExtractAssociatedIcon de System.Drawing.Icon, logo vamos precisar disso.
Add-Type -AssemblyName System.Drawing

[System.Drawing.Icon]::ExtractAssociatedIcon($Path)


O script, como dissemos, ficará muito simples, pois estamos demonstrando apenas como salvar o ícone contido no arquivo Calc.exe e gerando um arquivo denominado Calc.ico na mesma pasta do script.
Add-Type -AssemblyName System.Drawing

$Icon = [System.Drawing.Icon]::ExtractAssociatedIcon(`
"c:\Windows\System32\Calc.exe").ToBitmap().`
Save($PSScriptRoot + "\Calc.ico")


Abaixo como aparece o ícone extraído.

sábado, 26 de agosto de 2017

Criando uma MessageBox

A classe System.Windows.Forms.MessageBox possui vários métodos Show [veja aqui].

Através deles, podemos exibir uma MessageBox personalizada.

Add-Type -AssemblyName System.Windows.Forms

# Exibe a MessageBox
$resposta = [System.Windows.Forms.MessageBox]::Show( `
'Quer reiniciar o computador?', 'Exemplo de MessageBox', 'YesNo', 'Question')


Nesse exemplo, chamamos Show(texto,título,botões,ícone).

Podemos capturar em uma variável qual o botão foi pressionado e, assim, realizar determinada ação com base no valor dessa variável:

# Verifica o botão clicado
# Realiza ação, baseada no botão clicado
if ($resposta -eq 'Yes')
{
  Restart-Computer -WhatIf
}
else
{
  Write-Warning 'Não vamos reinciar o computador.'
}


Ao executarmos o script o resultado é o seguinte: