ADICIONAR BUTÕES
Moderator: Gio
ADICIONAR BUTÕES
Boas,
Alguem que possa ajudar?
Algumas dúvidas...
1) Existe alguma maneira de colocar um botão por imagem,
guardando a própria imagem no programa? É que, basta apagar
o icon na localização de origem e desaparece no programa...
2) No código abaixo, como codificar os eventos dos botões:
a) "PESQUISAR": de forma a perquisar um contacto ou nome.
b) "APAGAR": Apaga um registo selecionado ou pesquisado.
c) "ALTERAR": Altera um registo.
Muito obrigado
Cumprimentos
--------------------------------------------------------------------
Gui, add, ListView, x20 y20 h120 w180, Nome|Telefone
Lv_ModifyCol(1, 100) ; Dimensão a atribuir ao tamanho da coluna 1
Lv_ModifyCol(2, 70) ; Dimensão a atribuir ao tamanho da coluna 2
Gui, add, text, x20 y220, Telefone ; Texto de campo telefone
Gui, add, Edit, x20 y240 w100 h20 vCAMPO_DE_TELEFONE ; Edit campo telefone
Gui, add, Text, x20 y160, Nome ; Texto de campo nome
Gui, Add, Edit, x20 y180 w100 h20 vCAMPO_DE_NOME ;Edit campo nome
Gui, Add, Button, x140 y180 w60 h20 gLABEL_DE_MSGBOX, Salvar ; Botão Salvar
Gui, show, w240 h300, Tela de Nome ; Tela geral
Return
LABEL_DE_MSGBOX:
Gui, submit, nohide ; Atualiza com os dados do campo
Lv_Add("", CAMPO_DE_NOME, CAMPO_DE_TELEFONE) ; Adiciona uma entrada à ListView
;msgbox % "Alterações efetuadas!"
Return
GuiClose:
ExitApp
Return
----------------------------------------------------------------
Alguem que possa ajudar?
Algumas dúvidas...
1) Existe alguma maneira de colocar um botão por imagem,
guardando a própria imagem no programa? É que, basta apagar
o icon na localização de origem e desaparece no programa...
2) No código abaixo, como codificar os eventos dos botões:
a) "PESQUISAR": de forma a perquisar um contacto ou nome.
b) "APAGAR": Apaga um registo selecionado ou pesquisado.
c) "ALTERAR": Altera um registo.
Muito obrigado
Cumprimentos
--------------------------------------------------------------------
Gui, add, ListView, x20 y20 h120 w180, Nome|Telefone
Lv_ModifyCol(1, 100) ; Dimensão a atribuir ao tamanho da coluna 1
Lv_ModifyCol(2, 70) ; Dimensão a atribuir ao tamanho da coluna 2
Gui, add, text, x20 y220, Telefone ; Texto de campo telefone
Gui, add, Edit, x20 y240 w100 h20 vCAMPO_DE_TELEFONE ; Edit campo telefone
Gui, add, Text, x20 y160, Nome ; Texto de campo nome
Gui, Add, Edit, x20 y180 w100 h20 vCAMPO_DE_NOME ;Edit campo nome
Gui, Add, Button, x140 y180 w60 h20 gLABEL_DE_MSGBOX, Salvar ; Botão Salvar
Gui, show, w240 h300, Tela de Nome ; Tela geral
Return
LABEL_DE_MSGBOX:
Gui, submit, nohide ; Atualiza com os dados do campo
Lv_Add("", CAMPO_DE_NOME, CAMPO_DE_TELEFONE) ; Adiciona uma entrada à ListView
;msgbox % "Alterações efetuadas!"
Return
GuiClose:
ExitApp
Return
----------------------------------------------------------------
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
Listview exemplos
https://autohotkey.com/boards/viewtopic.php?f=28&t=3384
https://autohotkey.com/boards/viewtopic.php?f=28&t=3384
Re: ADICIONAR BUTÕES
Bom dia Ria.
Vou dividir a primeira pergunta em duas, para facilitar a resposta.
No exemplo abaixo, os dados de um arquivo de imagem são guardados em uma string de valores hexadecimais na variável DADOS_DO_ARQUIVO. Depois, essa string é utilizada como referencia para remontar os dados binários do arquivo e finalmente, isso é utilizado para reescrever o arquivo na mesma pasta do script sempre que ele for executado.
As labels do código são somente para separar o código de criação de janela do de restauração de arquivo, elas não são necessárias.
Se quiser ser ainda mais cuidadoso, pode colocar uma rotina de leitura do arquivo após a criação, para certificar-se de que os bytes do arquivo no caminho indicado correspondem aos bytes do arquivo esperado.
Explicando um pouco o código acima:
Primeiro, utilizamos a mesma sistemática de restauração de arquivo a partir de dados que expliquei no item anterior. Só que dessa vez usei ela para 3 arquivos de imagem distintos (imagembotao, imagembotaoaceso, imagembotaopressionado).
Depois, configurei no script ações para ocorrer quando a janela criada receber algumas mensagens do windows (movimento de cursor, clique de cursor, etc). As ações envolvem trocar o ponteiro do mouse e trocar a imagem do botão, e isso ocorre conforme sejam os dados de posição do mouse ou do clique.
O "botão" que criamos, além das questões estéticas, vai simplesmente exibir uma mensagem "Você clicou no botão!" quando for pressionado. É lógico que isso é só para demonstrar onde no script você colocaria as ações que devem ocorrer quando o botão for pressionado.
O script ficou extenso é claro porque os binários dos arquivos de imagem são pesados, e por isso é preciso de muitos caracteres para representá-los em sua forma hexadecimal.
Como o programa não salva nada em arquivos, você pode fazer as rotinas baseandos apenas na listview. Pesquisar seria algo como
1. ler a listview (ControlGet, List, ...)
2. filtrar as informações (Separe as linhas usando StringSplit através de linefeed `n e as colunas através de tab `t. Depois compare as correspondentes para decidir o que excluir)
3. deletar o conteúdo da listview (a função embutida Lv_Delete() sem parâmetros deleta o conteúdo inteiro da listview)
4. reinserir as informações filtradas (Lv_Add).
Apagar é ainda mais fácil. Basta usar a função embutida Lv_Delete(). O primeiro (e único) parâmetro da função é a linha a ser deletada.
Alterar é basicamente apagar e depois inserir a nova informação. Use Lv_Delete() e depois Lv_Add().
Vou dividir a primeira pergunta em duas, para facilitar a resposta.
Existem sim. Várias na verdade. Você pode por exemplo escrever os dados do arquivo da imagem (código binário) direto em uma variável e usar isso em uma rotina de restauração do arquivo da imagem, por exemplo. Assim, não importa se o usuário alterou ou mesmo deletou o arquivo de imagem, pois toda vez que rodar o programa, ele vai restaurá-lo.1) Existe alguma maneira de... guardando a própria imagem no programa?
No exemplo abaixo, os dados de um arquivo de imagem são guardados em uma string de valores hexadecimais na variável DADOS_DO_ARQUIVO. Depois, essa string é utilizada como referencia para remontar os dados binários do arquivo e finalmente, isso é utilizado para reescrever o arquivo na mesma pasta do script sempre que ele for executado.
Code: Select all
RESTAURAR_ARQUIVO_DE_IMAGEM:
DADOS_DO_ARQUIVO := "89504E470D0A1A0A0000000D49484452000000570000005008060000006CCDE9D40000000467414D410000B18F0BFC6105000000097048597300000EC200000EC20115284A800000001974455874536F667477617265007061696E742E6E657420342E302E3137336E9F630000051249444154785EEDD64D4EDC4010866196AC58B1418AC42677C96972981C85AB708F2C922CA248480E0553EEF2D76FFB67DC9EF1D88EF44472E1EEAEFAC663B86B9AE6B0102C1EEAC0E2A10E2C1EEAC0E2A10E2CAEC1FB3FFBAF97AE591B2C5E920656839E712D585C92067109DAC3A56071093AF035684F4BC3624D3AE05A689F4BC0E25C3AC8543FBF7C1D8DD64FA1BDD784C539B4F93128B439E88C3E3A432D583C8736DC8702590A9D5FA233CD85C5A9B4C9121AFE52A81FA2B3CD81C529B43942C35E0BF5A774C67361710C6D88D0706B41FD2A9D792A2C0ED126140DB356D47FA4B34F81C53E7AB8A201D68EE6883483B1B0D8470F8EA8F15B41F3449AC318582CD1031D357BAB683EA3598C8145A28745D4E42DA3198D6632048B4A0F89A8B95B47733ACDA60F16951EE0A8B1ADA0799DE65382C5483776D4D0D6D0DC46332AC1A2D34D1D35B25534BFD1AC08169D6EE8A8892DA30C342B8245A39B393A7CEB2807A399292C1ADDC8D0C17B417968668A8BB289A343F782F2309A5DC445D9C0D0816BF4E7E57D84DF9FFE7DB7DA73F3F7F5AE79FBF19CDD3B15E5A2D9455C940D0C1DB63ADF1FDA60D567D0F3502E9A5D941764B1A3C3D6E6D78FFBA6797D6C7ED9750CFAE509EF9F8A72319AA1CB0BB2D0D0417B45F968862E2FC8424387441F4F4CF80A260FCD1FB8FFC3B7C7E60DD674DF8D4FCD3FB8A7EBBEF9FB2DEC7B7AC7FACF07DFB5A3FA48281FCDD0E5055968E89028FE12C9E9F043F7BFF3AFF6A870E503D4B0DABD72E3FB48281FCDD0752F6491891B97B44DC666C23BAFF314F4BC0BE337809E9CF69C9E77A8DFF3F6F2700A39FF703FCCE883728A39BAEE852C30BA31C170C353971A0C5FD9C213959EA6FC95321CAE9F6981A6B3F280E6F54139C51C5DF7421698B8690986DB3E19E1C9095F597A224C7A6A7A5E27A570FDCC531FED5E1AE0CC3E28A798A3EB5EC80213372D499FB292C6C250C5BF3BE94339190AD77FDE06D69E57B70FCA29E6E8BA17B2C0C44D4BCAE17ECA875D22DCF84AF05AE1D57093E1CAD72F857E7A6F85A1AABF16DA300A626F33FBA09C628EAE7B210B4CDCB4A4146E1AC21B0C7F5AE9BD1FFA7FD1F4859B3EC8B2F494CEEB83728A39BAEE852C3071D39252B869E0F41B373D11F9531303A2AF6B39DC1456BE2E0419D6CDE983728A39BAEE852C30BA3189CD906EF3E1A928C1776A39DC1454FE679349FDC59F9FDF07E5147374DD0B59606873159F82AEFC7DD5BFA67CBF29855BAAB7C2FB589FC473FAA09C628E2E2FC8224307EC15E5A319BABC200B0D1DB257948F66E8F2822C3474C85E513E9AA1CB0BB2D0D1417B43B918CDD07151161B3A6C6F2817CD2EE2A26C60E8B0BDA15C34BB888BB281A303F782F2309A5D8445A39B183A742F280FCD4C61D1E8468E0EDE3ACAC168660A8B4E3773D4C09651069A15C1A2D30D1D35B05534BFD1AC081623DDD451235B43731BCDA8048B916E1C51435B41F33ACDA8048B4A378FA8B12DA0598D66D3078B440F71D4D8ADA3398D6632048B257A98A3066F15CDE7348F21582CD1C314357B4B6826A7598C81C53E7AA8A2A6D78EE6883483B1B038440F5734C05A51FF91CE3E0516C7D026080DB316D4AFD299A7C2E214DA10A1E1AE85FA233AE739B03895365642C35E0AF54374B639B0780E6DB20F0DBF143ABF44679A0B8B7368C3432890B9E89C3E3A432D589C4B9B9F8A022BA1F55368EF3561B1161D644DB4D72560B1361DEC9AB4B7256171493AEC25680F9782C54BD2206AD033AE058BD7A661F5D1B56B82C5431D583CD481C5431D583CD481C5430DCDDD7FF2957802F31AA04F0000000049454E44AE426082"
VarSetCapacity(BINARIO_DO_ARQUIVO, StrLen(DADOS_DO_ARQUIVO) / 2, 0)
Loop % StrLen(DADOS_DO_ARQUIVO) / 2
{
NumPut("0x" . SubStr(DADOS_DO_ARQUIVO, A_Index * 2 - 1, 2), BINARIO_DO_ARQUIVO, A_Index -1, "UChar")
}
HandleToFile := DllCall("CreateFile", Str,A_ScriptDir . "/ImagemBotao.png", Uint, 0xC0000000, Uint, 3, Ptr, 0, Uint, 2, Uint, 0, Ptr, 0, Ptr) ; Cria um arquivo, e guarda uma referência a ele do tipo handle.
Result := DllCall("WriteFile", "Uint", HandleToFile, "Uint", &BINARIO_DO_ARQUIVO, "Uint", StrLen(DADOS_DO_ARQUIVO) / 2, "Uint", "NULL", "Int", "NULL") ; Escreve no arquivo criado.
DllCall("CloseHandle", "Uint", HandleToFile) ; Deleta a referência ao arquivo.
CRIAR_JANELA:
Gui, add, text, x20 y20 w360 Center, A imagem abaixo NÃO é um botão ainda (Ver o outro exemplo)
Gui, add, picture, BackGroundTrans x156 y50 Center, %A_ScriptDir%/ImagemBotao.png
gui, show, w400 h300, Exemplo de Imagem que se restaura
Se quiser ser ainda mais cuidadoso, pode colocar uma rotina de leitura do arquivo após a criação, para certificar-se de que os bytes do arquivo no caminho indicado correspondem aos bytes do arquivo esperado.
Sim. Existem também várias maneiras. Eis algums exemplos:1) Existe alguma maneira de colocar um botão por imagem
- 1. Você pode configurar um controle do tipo imagem para que se comporte como um botão.
- 2. Você pode usar a classe ImageButton do usuário just me
Code: Select all
Message_Monitor()
RESTAURAR_ARQUIVOS_DE_IMAGEM:
DADOS_DO_ARQUIVO := "89504E470D0A1A0A0000000D49484452000000570000005008060000006CCDE9D40000000467414D410000B18F0BFC6105000000097048597300000EC200000EC20115284A800000001974455874536F667477617265007061696E742E6E657420342E302E3137336E9F630000051249444154785EEDD64D4EDC4010866196AC58B1418AC42677C96972981C85AB708F2C922CA248480E0553EEF2D76FFB67DC9EF1D88EF44472E1EEAEFAC663B86B9AE6B0102C1EEAC0E2A10E2C1EEAC0E2A10E2CAEC1FB3FFBAF97AE591B2C5E920656839E712D585C92067109DAC3A56071093AF035684F4BC3624D3AE05A689F4BC0E25C3AC8543FBF7C1D8DD64FA1BDD784C539B4F93128B439E88C3E3A432D583C8736DC8702590A9D5FA233CD85C5A9B4C9121AFE52A81FA2B3CD81C529B43942C35E0BF5A774C67361710C6D88D0706B41FD2A9D792A2C0ED126140DB356D47FA4B34F81C53E7AB8A201D68EE6883483B1B0D8470F8EA8F15B41F3449AC318582CD1031D357BAB683EA3598C8145A28745D4E42DA3198D6632048B4A0F89A8B95B47733ACDA60F16951EE0A8B1ADA0799DE65382C5483776D4D0D6D0DC46332AC1A2D34D1D35B25534BFD1AC08169D6EE8A8892DA30C342B8245A39B393A7CEB2807A399292C1ADDC8D0C17B417968668A8BB289A343F782F2309A5DC445D9C0D0816BF4E7E57D84DF9FFE7DB7DA73F3F7F5AE79FBF19CDD3B15E5A2D9455C940D0C1DB63ADF1FDA60D567D0F3502E9A5D941764B1A3C3D6E6D78FFBA6797D6C7ED9750CFAE509EF9F8A72319AA1CB0BB2D0D0417B45F968862E2FC8424387441F4F4CF80A260FCD1FB8FFC3B7C7E60DD674DF8D4FCD3FB8A7EBBEF9FB2DEC7B7AC7FACF07DFB5A3FA48281FCDD0E5055968E89028FE12C9E9F043F7BFF3AFF6A870E503D4B0DABD72E3FB48281FCDD0752F6491891B97B44DC666C23BAFF314F4BC0BE337809E9CF69C9E77A8DFF3F6F2700A39FF703FCCE883728A39BAEE852C30BA31C170C353971A0C5FD9C213959EA6FC95321CAE9F6981A6B3F280E6F54139C51C5DF7421698B8690986DB3E19E1C9095F597A224C7A6A7A5E27A570FDCC531FED5E1AE0CC3E28A798A3EB5EC80213372D499FB292C6C250C5BF3BE94339190AD77FDE06D69E57B70FCA29E6E8BA17B2C0C44D4BCAE17ECA875D22DCF84AF05AE1D57093E1CAD72F857E7A6F85A1AABF16DA300A626F33FBA09C628EAE7B210B4CDCB4A4146E1AC21B0C7F5AE9BD1FFA7FD1F4859B3EC8B2F494CEEB83728A39BAEE852C3071D39252B869E0F41B373D11F9531303A2AF6B39DC1456BE2E0419D6CDE983728A39BAEE852C30BA3189CD906EF3E1A928C1776A39DC1454FE679349FDC59F9FDF07E5147374DD0B59606873159F82AEFC7DD5BFA67CBF29855BAAB7C2FB589FC473FAA09C628E2E2FC8224307EC15E5A319BABC200B0D1DB257948F66E8F2822C3474C85E513E9AA1CB0BB2D0D1417B43B918CDD07151161B3A6C6F2817CD2EE2A26C60E8B0BDA15C34BB888BB281A303F782F2309A5D8445A39B183A742F280FCD4C61D1E8468E0EDE3ACAC168660A8B4E3773D4C09651069A15C1A2D30D1D35B05534BFD1AC081623DDD451235B43731BCDA8048B916E1C51435B41F33ACDA8048B4A378FA8B12DA0598D66D3078B440F71D4D8ADA3398D6632048B257A98A3066F15CDE7348F21582CD1C314357B4B6826A7598C81C53E7AA8A2A6D78EE6883483B1B038440F5734C05A51FF91CE3E0516C7D026080DB316D4AFD299A7C2E214DA10A1E1AE85FA233AE739B03895365642C35E0AF54374B639B0780E6DB20F0DBF143ABF44679A0B8B7368C3432890B9E89C3E3A432D589C4B9B9F8A022BA1F55368EF3561B1161D644DB4D72560B1361DEC9AB4B7256171493AEC25680F9782C54BD2206AD033AE058BD7A661F5D1B56B82C5431D583CD481C5431D583CD481C5430DCDDD7FF2957802F31AA04F0000000049454E44AE426082"
VarSetCapacity(BINARIO_DO_ARQUIVO, StrLen(DADOS_DO_ARQUIVO) / 2, 0)
Loop % StrLen(DADOS_DO_ARQUIVO) / 2
{
NumPut("0x" . SubStr(DADOS_DO_ARQUIVO, A_Index * 2 - 1, 2), BINARIO_DO_ARQUIVO, A_Index -1, "UChar")
}
HandleToFile := DllCall("CreateFile", Str,A_ScriptDir . "/ImagemBotao.png", Uint, 0xC0000000, Uint, 3, Ptr, 0, Uint, 2, Uint, 0, Ptr, 0, Ptr) ; Cria um arquivo, e guarda uma referência a ele do tipo handle.
Result := DllCall("WriteFile", "Uint", HandleToFile, "Uint", &BINARIO_DO_ARQUIVO, "Uint", StrLen(DADOS_DO_ARQUIVO) / 2, "Uint", "NULL", "Int", "NULL") ; Escreve no arquivo criado.
DllCall("CloseHandle", "Uint", HandleToFile) ; Deleta a referência ao arquivo.
DADOS_DO_ARQUIVO_BOTAO_ACESO := "89504E470D0A1A0A0000000D49484452000000570000005008060000006CCDE9D40000000467414D410000B18F0BFC6105000000097048597300000EC100000EC101B8916BED0000001974455874536F667477617265007061696E742E6E657420342E302E3137336E9F630000082249444154785EEDDBCB6B5D551406F0685FA1D1D847ECD3A6E9431DF9404114073AB282E0488482203A12A482A8883A10144110850A4E8A223855848038A81351D181A250ACF84F24695E4DD3A6D99EB59375CF3ADFF9F6B9E7B1CFBDB778859F7057CEDE7BED2FE7EEDC36A723CEB9A196D0E2501CB43814072D0EC5418B4371D0E22048FE93FF15C2318386167B09038B01D7E8175A6C1306D10BD843AFD0621B70C3FD803DB58D1663C20D0E0AECB30DB4D8146EA4AA993B4E96C6C65781BDC7448B4D60F365B0D09A606B14C13DC4428B7560C34558206D61EB87E09E9AA2C5AAB0C910B6F95E61FD30B8B72668B10A6C8E619BED17D61FC23DD6458B6560430CDBDCA060FD22DC7355B4D80D3681D8660615EBDFC2BD57418B45707184CDCF3D32E92EBFBD3B57EF97CBEFEE72F34F1ECED4D83E2CCCA02C5A2C820B5BB66131FFF421B7FED74DCEFD3BE2965FDF9BFB7AAF2DBFB9C7F7223DF522605A0CC105956DD25AF968DC6F462D3EB79F5ED70B4BAF4C647AB972F6567A1DDB9FC02CCAA0450617B35893DEE409B7FAD5CECE86D62F8EE4EE985E587A391BECEAB931DF1BBB56B03D0ACCA41B5A44B888C59ACB3879DC5D9BDED1D9D8F53F6EF6E730BDB6050BA70FF86F6A27D82F7716062BD83E1566538416112EA05863CCEC3D536EEDC7AD69C03F6FF135766D4C18ECD5AF47FD379B5D8BD87E15E613428B164EAC584345E46E95BB56377AEDBBEDA5375A87FF615A3358C5F62D30A3105A5438A9628D9421E76DE62D9A9CC7DDDEA275F875363FA588B5F3DBDCECDDC7E8B5DDB0FD0BCC8AA14585132AD64459F256D54D8B954FC6E97575D1601B1E412C03CC8AA145819329B67855CBAFEECD04BCFCD61E7A5D55FEE8F9754B1A6C72CEC738DB590E023343B4287022C116AE6BE5C3DB7C00EBFF243FE07EBFD92D3C73905E57D6DC8347DDDA0FDBFC7C32AF841CF35309CB033343BC089328B6686DF219F8F3311FECD56F46DDE57776D73E1767A64EB8E5D7F6FA7964BEEBBFC40D56B03C046667F1224C20D8828D253FBD573E1EF7C15E7AFC889BB9ABE6A7873B8FFBF132CFDA9FC91666120BC90FCC33F2F5A36EE54272449C3D9A1F5711CB05B3B3781126106CB12892402F3D96049B043473A4E62707192701BF3FE6DC6CB2852458B41174332C17CCCECA1760B0628B45231FC7EA06AB92F1F39F267F12BC30E1E6E5F599F134DCE966E7B962B908CC50E50B3050B085FEAF583E98A1CA1760A0608B58F36747336FC1D4B85B24D77BA726DC1A19933D1B0FBA55724DD6A85B3965E6DD3C63F5EB5DCFDA527DA4583E98A1CA1760A0608B588BD3C950D2E006DC7CB7EB13FAD62E152E7C0331ACCE5C79E5FB48B17C3043957D0183849D38A4D3A46DC69C7999BBA0E02CB4EF0076E774D6293843F59AB5E9F1CD90F3DF5CAF411F2C279BA3CABE800102276668B8E6AE4B1B346FD9C01D95DE4DF923A57BB8BAA6049AAE950FA8591F2C279BA3CABE8001C24E1A42C3EDDC19E6CE316F59764788F4AE29384E42E1EA9A9B7D74E6C2001BF6C172B239AAEC0B1820ECA421E9771941636653C1CF9DEC9BB2A95BB8FAF54E609DF5E2F6C172B239AAEC0B1820ECA421E17037E437DB46B8F648D05AE068B821C385B75F1AFAE6B9653615FD58E88411607B6BD807CBC9E6A8B22F6080B0938684C24D37A10D9A8F5678AD57FC83A628DCF41B1996DEA5CDFA6039D91C55F6050C1076D29050B8E986D39FB8E91D91BF6B6C40ECED1A0E370D2B3FCE0469C635E983E5647354D9173040E0C48C6D86C9366FEE8A107AA686C34D83CA7F6C12697FF6EBF5FB6039D91C55F6050C106C7264EF82ACFC79151C335F7CBD08851BAA7798F318EF44DE7B711F2C279BA3CA176090600BC4347BEF949B7B20B9BB8FD5FC9B311957776C452C1FCC50E50B3050B04562997B68D25DF9EC16B7F4D2ED6EEEE1C924A40A7F612E7F4D79E2B81FB7F8C23E377B7FFBCF42B07C3043952FC040C11689417E15B3F6D356FF9088FC9A7DE9CC840F8B5D4BC9DFE13E71D82DBFB1C78F976713DA7ED884E58319AA7C01062AB65013F20B45FD4DEDFADF23EEDAF7DB7D8D5D5B64F6BE291FEAF5DFB66CCCF3ED8ED61E3661B908CC50F1220C166CB1BAFCE34DE7B7757E052ECF195C7AF408BDB68CF9A70EB9F50BE9B30AAB5F143F685717CB05B3B3781126106CB13A58B0319E7C5C7C7E7F674E21BFBA67D735C172C1EC2C5E8409145BB092E4ED6A9F788C15ACD2879B55CC07AE591E02B3B36851E024822D5A5A12AC9C8D9D602F8EB885670FF06B1B90C7A36CC0B11EB8667960668816054EA4D8C25D251FAF72C19E8E1FAC270F9B447EE09AE5203033448B0A2753AC8120D9ECB9B1CE66859C8FF4DA58E0F869FAC035CB00B3626851E1848A35409160E5DF26D06B23F33F38233C70CDF62F302B86162D9C54B146109E7FBD0A56F9A71E1B3C70CDF62D30A3105AB470628B35A4563ED8788A515D7E6F17BDAE6DFE79DD1A0F5CB3FD2ACC288416114E6EB1C6E41FD2D9602568765DAFD479E09AED556036456891C145146BCC3EDD1DFBC9F1BAF4816BB98B175FDC47AF516C9F0233E98616437031C51A9480FD3FA46BE18FA175F97F9A9AFC51997D4DB1FD29CCA31B5A0CC1C5106BF646C2F6A4308B3268B1082E8A58D3838EEDC3C20CCAA2C56E7071C43630A858FF16EEBD0A5A2C039B60D8660605EB17E19EABA2C52AB021866DAE5F587F0CEEB30E5AAC0A1B0B619BED15D60F837B6B8216EBC0268BB0CDB785AD1F827B6A8A169BC086BB618134C5D629827B8885169BC2E6AB628185B0F15560EF31D1622CB8914182BDB6811663C38DF513F6D6265A6C136EB617B0875EA1C55EC22062C035FA8516FB0DC32A826307092D0EC5418B4371D0E2501CB43814072D0EC5E046FE03CC0CF56CF1DCBD380000000049454E44AE426082"
VarSetCapacity(BINARIO_DO_ARQUIVO_BOTAO_ACESO, StrLen(DADOS_DO_ARQUIVO_BOTAO_ACESO) / 2, 0)
Loop % StrLen(DADOS_DO_ARQUIVO_BOTAO_ACESO) / 2
{
NumPut("0x" . SubStr(DADOS_DO_ARQUIVO_BOTAO_ACESO, A_Index * 2 - 1, 2), BINARIO_DO_ARQUIVO_BOTAO_ACESO, A_Index -1, "UChar")
}
HandleToFile := DllCall("CreateFile", Str,A_ScriptDir . "/ImagemBotaoAceso.png", Uint, 0xC0000000, Uint, 3, Ptr, 0, Uint, 2, Uint, 0, Ptr, 0, Ptr) ; Cria um arquivo, e guarda uma referência a ele do tipo handle.
Result := DllCall("WriteFile", "Uint", HandleToFile, "Uint", &BINARIO_DO_ARQUIVO_BOTAO_ACESO, "Uint", StrLen(DADOS_DO_ARQUIVO_BOTAO_ACESO) / 2, "Uint", "NULL", "Int", "NULL") ; Escreve no arquivo criado.
DllCall("CloseHandle", "Uint", HandleToFile) ; Deleta a referência ao arquivo.
DADOS_DO_ARQUIVO_BOTAO_PRESSIONADO := "89504E470D0A1A0A0000000D49484452000000570000005008060000006CCDE9D40000000467414D410000B18F0BFC6105000000097048597300000EC100000EC101B8916BED0000001974455874536F667477617265007061696E742E6E657420342E302E3137336E9F63000014FF49444154785EED9D097456C515C747129240484848202B0471DFF75D1454D0AA48F5504BF7D6D3A3566B7BBAEFB6B655BBB877B3ADAD756D553697AAB5D65A5BB55A4545AB62B182A2028A065104ADDEDEDFBC7793F93EE6255F42421260CEB9E790EFCDDCB9F7FFDDF9DF3BF3DEF7707DD936DB6C332F83060D72454545AEB8B8D80D1E3CD8959494B8D2D252575656E6860C19E2860E1DEACACBCB7384CFB8461FFA3286B1E840173A4DFF46D54240010470006AD8B061AEB2B2D2555555B9112346B8DADA5A3772E448376AD4282F7575755EEC6FAED187BE8C612C3AD0854E7487406FB0CDA2C80025E2884000011C80AAAFAF778D8D8D6EF4E8D1AEA5A5C58D1D3BD68D1B37CE6DB1C5165EB6DC724B2FF637D7E8435FC630161DE84227BA9983B90C68B3638368386251CAD265391BA0441F808C1933C66DBEF9E61EB86DB6D9C66DBFFDF66EC71D77743BEFBCB3DB65975DDCAEBBEEEA76DB6D37B7FBEEBB7BE1DF7CC635FAD097318C4507BAD0896EE630A0991B1B067C345B8418A844104B9765DCD0D0E09D27F20064871D76F02001DC5E7BEDE5F6D9671FB7FFFEFBBB030F3CD08D1F3FDE1D7CF0C15E264C98E0C5FEE61A7DE8CB18C6A2035DE8443773301773323736608B816C760E9816824AB4E0104BB5A9A9C92FE3ADB6DACA471A91B7E79E7BBA7DF7DDD7830470871E7AA89B3C79326AA43339FAE8A3DD91471EE98E38E2083F86B1E840173AD1CD1CCCC59CCC8D0DD8824D6124F77B803190E546C626A9B01489161C62A912492C61A28B4823F2B445815B170170C09E3871A29F83B99893B9B1015BB009DBB0115BB1B9DF524518AD646C788EA548B2D97AEBADDD4E3BEDE4F6D8630FBA4601E94D99346992A791FDF6DBCFDB802DD8846DD888ADD8DC2FA3D880252B13092C3BB237C905EE236AB4451D5F9F4234431B808C4DD8868DD88ACDD88E0FFD06608C301AA8AEAEF6A510DCB6EDB6DB7ABED31675B4AFE5A0830EF274818DD88ACDD88E0F46137D0A301C45FD48F6656951FA909DB5451D2A54BE33B452BE3B74B87C5FE5CCF2E172767995971FA4627F732D36BE2B72C0010778AA208AB11D1FF0059FF00D1FD77B0B81ADA9A971CDCDCD7E89698B3AD1919C3E240113B000EFC7C3AAE4DC61D572BECA851523E422959FE4099F718D3EF4650C63BB033851BCF7DE7B7B2EC6077CC1A73E013804968C0B67698B1A1E932F950D936F0CA9F0110A183F545000E8021580FB79458D5C5C5923BF52F97565AD5CA2F29BE1B9C2675CA30F7D19C35874A00B9D5D059AF20D9A20D9E113BEAD57808D63BB03EC1715D4AFA7A09EA58E136D441EA0FCC2839900F7BBE123E572952BAB46CA5555A3E46A95DFE7099F718D3EF4650C63D1812E74A29B39982B664F4C4876ECFEF201EE750E366029BE8D0AB4458D0CE573A5E5F2D5B20ABFFC89A61F695411613F53007EA94000CA65299800774DF528B9AEBA4E66AACC52993DA25EE6E4099F718D3EF4650C63D1812E74A29B39988B390B8D64767C06B051043EF71AC028A544B1AA405BD4B0504E2D1D2A5F4829004E8513CF53477F9A82FA5B0580A8230AAF4D8102B41B546E1AD1207FAC69909B556E51B9D54B632AC9675CA30F7D19C35874A00B9DE8660EE6624EE6C6066C89D99B2F50043B3B361C5645F44A9906E7708CC7B6515BD418934F960C91D31458B8F55B1AAD64FD1FAB632421F891A8C271228DA89B95020A5080F62705F0CFB58DF217953B6A9BE4AF2A77E6099F718D3EF4650C63D1812E74A29B39988B39991B1BB0059BB02D667F289C537002C76603DFC1A047F9976F0A52AFA8A8E0CFA8112609B0E5F26505161A80EF4830440E7C0837C29544179176A30A110838B7A760FE6D6493DCA5F28F91CD72B7CA3DC8A866B93715FECD675CA30F7D19C35874A00B9DE8660EE6624EE6C6066CC1266CC3C6981FA1B06D66CBCC59321880458F44AFD1019C03B96B8B1A8084C07E5B9316B52849854C4E76BF5CF9F00FEA244B97E80280DB1408A28F68FC7B0A1800DE376AB4DCAFF22F950790BAD1F260DD182FFC9BCFB8461FFA3286B1E840173AD1CD1CCCC59CCC8D0DD8824DD8868DD81AF32794EDB6DBCE9FAE810158F4083D144207D38B4BE5849232F9B452413EB0646E788F4463D10A47125D1E548D3800211A0109C00070AECA432A0FAB3CA232AFAE2547F88C6BF4A12F63188B0E7479905537733017735A14630B36615B0830B6C7FC43384326C1C1BF3D420F7C3364480E35B44527453E3EB84C4E516029B55866F9C0B224E1BFEBD3688523E14C0FAA0A80108980046080F7687D8B3CA6F26F95C75379A27EAC17FB9B6BF4A12F63188B0E747990553773301773323736600B36E5038CEDF810F3116193C12E0E7A009375AA1EF86638C8D0169D0CF988027BB2D2C1E7D5A86F6A5540B9435666D919B033D419962609074E841F59C2FF5400883600211201C9C07C52419CDF90C853A9FC2715FBDBAED3D7C04607BAD0896EE6602EE6646E6CC0166C3280B1159BB11D1F627E9A400FD4BF6C91C1A65BD1CB37D25912FBC0E052CFB39F559EFD9A1AF53DCDC0E7A891D49664678B589CA17C6289927C8828B892A54CB419A844A58109880B1A3697A755FE6BD2984AFA37D7E8638033161D0632BA9983B99893B9B1015BB0C922185BB119DBF1015F62FE9A503D70C8D3EDE4D659D4BEAFB8C4D301B52C5CC5AE8B429D9D11DBD22B94D78C0A88160396C413462BCBDA400D017D46414416AA2C6A1C1715AE59BF10680319DD611433B7018C4D4611D88ACDD88E0FF8D211FF726783E4D6ADE835AED51655FEDEE2C1F2218DDA933C1D94EB524A78969D10053B3B24764CECA462C09284E6A9E344184B9AA80318A23104F45995E702599C4AF8197D42A0D1812E74A29B39988B3963006323B66233B6E303BEE013BEC5FC47C2E8ED12F7F24D900DB545151FAF51FB098D5A360A6C6B594AD48D70D7A5BAC428DC29E229E84924F01D19DC8065C9C29116AD16A90B53B0DA806C1A27CFA7F242D31639629FD3C700672C3A2C922D8A998B390D606CC1266CC3466CC5666CC7077CC1277CC3C71806C6BDECDC0AAE1CF806A8E1B445954E0DA296AD2D19962D253B1F9616650EC982029E3A939A938402EF59C4B6039B449A45AA811A82F9622712826D205B24A39B390C608B606CC1266CC3466CC5666CC7077CC1277CC3C7180E089503B7EE39D829A8EEA50324AD6D2D65471415CBB48CA8A5A4610714D2013B2676509445F01EE592016B34000816AD06AA01B72495A51962D743A0D1D11EC5ED34D106B0DA802DD8846DD818D2033EE04B21D14BDDCBE13AB7870A4A6C697847954D291AEC2B8413356A3FA77CC4DEDCA2F612FDC6C9BCEC846E4AE9C078961D1589C573AC8FD8B139C086D16AA086202ECB90B08F811C4671083073323736600B3619FF622B36633B3EE08B452F3EE26B0C0FA44B892D8B122669D41EAB51FBD174C340363D43BF59CA1778CAA2960C4CA943E11ED2815505C6B1F9C0E647AA07B03991979AB78C8A5D37A019FBCA4C27AB5F72F2E63227AF7E0A8047CBD27B9CBC7C76B39FDBAA88901EB0159BB1DDA2179FF00D1FF1159F63B81835D89638B311D65955C27B346A29BFD8E67E46EB5A0EBD29BAC9AEDC0DA09C81B7D8665AD452C05367867460C92B06AC456116A02FA712BBC698A5A756CA5BAF3859B35C017E3901F88D254E56BEE0E4A513932417D203B661635BF4AAEDF8802FF8846FF888AFF81CC3056AE0C4ACD3AA21BD105572744009ECC6207B6EA570C2C42E876CCBDEDDB8363F6A298B3C1D28B096BC8C0AF2A3D50033303B13EBFFCAF965F2F643B5B21C9DA754F8085EA500BF7E4D9D9F93B93D3D44A2D7B8171FF0059FF00D1FF1159F63B8201CA873DEC0730F99E066F1ED21838A7D6DFB6105F75325C939AD5102E44F8DC88108BB1EB22F650E7C16462D75670E1D041CBB2EC09AD8B890268C8399CBF8171BB0258C5E6CC5666CC7077CC1277C336AC0677C8FE1C3C325DCADE890773BE2DBE394123EA67CCBC9D757759970D8CC8107CBE7EA138AE4B6394EEEBAD5C9BFEE7432EF5E274F3EE8E4BF8F96CBFCACA83DAC4656E9D27D4B97F0DBBA94FFF7AA93775AF5EF0B5A02D01A64F50A27F25A5CDED56BEFAE289355878700B7C8EB0F273AD1BDEADC317E85588916462FB5EFDCF155F2B8DA8ACDD88E0FF832EB04CE9F93431D7CC5677C8FE103EFF2504926EF12CE59E0528219DF728EC06D1B763156255CFB0D27B7DFE0E4EE3F3B79F02E278FDDE7E4A9879C2C7CCCC9F3F34BE4D90949E96551BBECDA24E9C08D21B08807EC915A6955A0962BB86B22A0E64AA5BCD6F66528B8936BE52DD5834E74AF79B0C6477218BD569A3D75696223B66233B6E303BEDC708D933FFC6888A7067CC5677C8FE1C3ED784ECA32EBDD2CBE1D3FA8488E54BE7D7F717248C3CD46CA93906F677CD3C91D3739B9F78A0AF9BB72173BA0073E3254163DEEE485FF38597266734A091A412757F844B39AA89D599F93C05A2F284BA351C1B9B045C105E07659797D0AE8F50D6B5D33705FD3A8E34B5A33BB5256FBE82D931593DAEB5F6CF0D4F0C961DE366C5C7071ADB7994D05F7E86E3CB558FE789D936B2F73F29BE9C9AD7F5F92A9EF6010C3A9C3A49605EE410A6E98CCD8B170B0CC01C7CFD2126CE6B79CDC79B3937F5E59A185B95509B5F2F4134E5E5CE064E959CD29258C96E5F76B16276A35A2483C4495F1A581F36E1A912BF5EF10C08EC0458C46DE692D9337262B3D6844523D400D9E7B15D8841A9A65B14629B63D775B95AF7BB139E45D7C9A718593CB7E3958CE535FF119DFC120861387E8999B892C702728B86C1E3E986E79394CE6D4284C66B34F77F2B75B9CDC77558566DE04DCB91F2D97E79ED4A85D5022CF4F4CCBAF4347C8CAA50925AC3A6F4C4ED45AE4B55E58962EF7327953B93404AF53704FABF451FF8ED2CAABFAB7AF1E22D4F0CC212364D9426CD3C83DA3D1EFD8C2928CEDF0CC938A65E6954E2EFF55915CB475B5F719DFC120861315C3F0E1C3BB06EE44AD148E5170394F3839A814D81E7237953BAB73BE9D2482FBD364365F13C4338F3A59FC64892C4AF93601B7A60DDCD74FCDAD690D5C00EA2EB8AFE975C07D5B93223A9729FF1A35B42A35E480BB4857D4D36AE72792928CED30772D3850A7DEBD6E4AA9CCBACAC915BF2E929F28B8563180410C270E7132CBB18EC09DAAE05A19C66E85FBFE3170AD52983F578DD644B1787EE2C032A5059FCC0017BEED00DCE5DD0637497E563D7870B57258093568E27C23AD1A7C528B804BBD1B823B43C19D7DB5932B01779B6AEF33BE6795637642D67570831A772D707537D306EED515726FB07978EAB78903CB170D93E74370D93D65D0C28AEED242FAA5584224A959C500B8AB1FA8D1F9D606F7D9339AD60697CDC4C9C509B89714C94F7B15DC422357C1B55B3818FCD8C1D5F28207B754961E42195627AD69E4BE35374D6839E0B6C89BF35200E7D5CA8A103C958EC0E51A8930135C9DB3D59F355031D4C99214DCC5B757CBA36B45EE48B9F16297807BD610BF0DEE35700BE6DC145CF80B70E7E747AE3AB6E49CD2045C1C3E7F4C0EB8BE5250600070CD69B9E0198071708D1254A78E4357420B504FBDBC9E82BBEABA7A6F833F983F4BBF70C0D5A4BBE0F4C61CCEBDF54C27B7CED68D8472EEA5BADAF0B55738B74BD5C25F9D3C728FEDCEB4CCF1D542C2B96D87354DA3A5F501054F1DCED940A411E7C1CD485859E01A95BCBBA27D43D10E6EFB49D9AAA515F2620AEE82866659A4F66223B66233B6E303BEDC32CBC9CCAF54B46D817BA55A28A4CE9D71627152E7DEE1E4E1BB9D3CA1E03DADCBFBB9274A64A1560BE1D6975A939AF3A573CB7C0D9ABB3B4B9251085C2859E0B651C29C8636603DB83A0FE0BE788A6E5C145C4EC8969FD4BE05E6F8F1F1EF94785BB119DBF1E1CE9B8B65CEAEC9D1233EE2EB3AD7B959C78D9DEDD03845E2249FDD0DBB1CBF434B0FC8730F6DDA4FC3C263C6FCA48684E01522E1D8306A9983B9D6DAA1A94DD86607E7E10E0D5FF24FC66C8716C3A7D363473EE8EED9028F6B72932F3C6EE44620CF0D70F26FB775F24FC4C2A3468BB610A418883109C7981E8B5AE6C83F19B3B3056CC3466C0D8F1DF1059FEC8EC43A9F2DD0B2C0EDEC54CC0ECAB9934A422031D87D334E9EB2CE7263D19B0F30120314C9EFD7066C46D4464FC5D4C63099E1437860DE23A762B48EEE9F6D3ACFCD3E2C2FE83C9770A694D0B696828170272204D6E8202B6A7BEA4E04CF2F147427820B03FA1E5A3A3EA403E6602EE664EE3EBB8746CBE25D6420DCFD8D016B74C0DCDDBDFB1BC30329F8EE2F0DCEC87A006FD3730BB9C2AF2EBBF4DC02614D21AC2DAA709A46EFC6F6C44D0C07A4CB4FDCD081F0A666D31655BAE959B1E4573E5D7E568C46786F7ACAB1E3A8EDD6538E34BE01321F19505B54F9C6F07C6ECC6F845F5776FBF95C5A4789CD64437EB23CE6AFC93A3D594EE39B80A43B8A5E6463FB4D043F595DE7DF44D02C7AF986B44527DB987ECDC3ABB57AE4D73C34E35E7E73C5A98FB6E8A41BD2EFD062FE99F4E8EFD0687C336443F6CEDAA2939A0CF45F50C67C32E9F15F50D2F866A8E1D8DE75F6DB5F6420FEF637E64728BCFC0D3AE8F1DFFED25062C9AD237A301948BF5A8FD91F0A6F70EAB55FAD5B0BE98153206D516342E10C94BD3987CDFDED7D0B317BF38557B2F4FAFB1668460FF6A610B887B768688B1A164A7F7A5348CCBE98F02A96F5F6A6101A4AC990708EBDE30692D71635305FA009CA1D0A757642D496384E54B14322D11069EC98883A80EAA977DCC4EC89C961871DE6DF6ABA5EDF7163CD00E6B00272A7E6EB0AC0083B20F86E7DBC9D29367F96F016D33E7B3B9335380752CF079865A42D6A789610C9DC4A21C11061804226871FB91BC0B694EC0E70A1F019D7E8435FC630B62B516AC25B4B7963699FBF57CC5A08B05104B79829B4B5459D2854BAF246BCD8F8AEC8E1871FEEFAD51BF1AC8500B31DB477397242DF57AF732D548E3AEA28FF32E37EF92E476BC6C1564570A011BE85943A515BD4C1BE10DE16CDAB5EFBFD5B48AD6104250A0719DCF288BD3F9744C1BB6BB5459DEE4D39EEB8E39C813AA0DE9F6BCD00E6DE3D871A2C2D0AEFFC373FE3186F61E66DCC24126D5140D645A64F9FEEA64D9BE6A64E9DEAE718D06F7EB686517094D1049140C6A508CF7A6739599A880284638E39C61D7BECB1A88A821613803CFEF8E33D988C45C706F7CEF2B085514CF1CDB691658743705B216FDBE70DFA80C4729E32658A072D143EDBA8DEB61F368C0D4126FBE210D1C252E48489EC4C24C17D9BFE9F886E340C67B98591CC5284E7B82D4DE983F32C55920B8010692C614022F2D8316DFA1F4E3A6816213846FD485626820C68962AA5108090BD49362C63228F532904E010FB9B6BF4A12F63188B0E7419A0CCC15CCC39E023B590867316CD38CD311E49858C0D202C5DC061190314D187709E8AD8DF5CA30F7D19C35874A00B9D0668DF44A973FF072EE9BC87558CB9B50000000049454E44AE426082"
VarSetCapacity(BINARIO_DO_ARQUIVO_BOTAO_PRESSIONADO, StrLen(DADOS_DO_ARQUIVO_BOTAO_PRESSIONADO) / 2, 0)
Loop % StrLen(DADOS_DO_ARQUIVO_BOTAO_PRESSIONADO) / 2
{
NumPut("0x" . SubStr(DADOS_DO_ARQUIVO_BOTAO_PRESSIONADO, A_Index * 2 - 1, 2), BINARIO_DO_ARQUIVO_BOTAO_PRESSIONADO, A_Index -1, "UChar")
}
HandleToFile := DllCall("CreateFile", Str,A_ScriptDir . "/ImagemBotaoPressionado.png", Uint, 0xC0000000, Uint, 3, Ptr, 0, Uint, 2, Uint, 0, Ptr, 0, Ptr) ; Cria um arquivo, e guarda uma referência a ele do tipo handle.
Result := DllCall("WriteFile", "Uint", HandleToFile, "Uint", &BINARIO_DO_ARQUIVO_BOTAO_PRESSIONADO, "Uint", StrLen(DADOS_DO_ARQUIVO_BOTAO_PRESSIONADO) / 2, "Uint", "NULL", "Int", "NULL") ; Escreve no arquivo criado.
DllCall("CloseHandle", "Uint", HandleToFile) ; Deleta a referência ao arquivo.
CRIAR_JANELA:
Gui, add, text, x20 y20 w360 Center, A imagem abaixo SIM é um botão
Gui, add, picture, BackGroundTrans x156 y50 Center, %A_ScriptDir%/ImagemBotao.png
gui, show, w400 h300, Exemplo de Botão Imagem
WinHwnd := WinExist()
HandCursor := DllCall("LoadCursor", "Uint", WinHwnd, "Uint", 32649)
Return
Message_Monitor()
{
OnMessage(0x200, "CheckCursor")
OnMessage(0x201, "CheckClick")
}
Return
CheckCursor(WParam, LParam, Msg)
{
Global
MouseGetPos, Xcoord, YCoord
If (A_Gui = 1 AND XCoord >= 156 AND XCoord <= 243 AND YCoord >= 70 AND YCoord <= 150)
{
DllCall("SetCursor", "Uint", HandCursor)
If (Botao_Aceso = 1)
{
Return
}
GuiControl,, Static2, %A_ScriptDir%/ImagemBotaoAceso.png
Botao_Aceso := 1
}
else
{
If (Botao_Aceso)
{
GuiControl,, Static2, %A_ScriptDir%/ImagemBotao.png
Botao_Aceso := 0
}
}
}
Return
CheckClick(WParam, LParam, Msg)
{
Global
Gui +OwnDialogs
MouseGetPos, Xcoord, YCoord
If (A_Gui = 1 AND XCoord >= 156 AND XCoord <= 243 AND YCoord >= 70 AND YCoord <= 150)
{
GuiControl,, Static2, %A_ScriptDir%/ImagemBotaoPressionado.png
Msgbox % "Você clicou no botão!"
GuiControl,, Static2, %A_ScriptDir%/ImagemBotao.png
}
}
Return
Primeiro, utilizamos a mesma sistemática de restauração de arquivo a partir de dados que expliquei no item anterior. Só que dessa vez usei ela para 3 arquivos de imagem distintos (imagembotao, imagembotaoaceso, imagembotaopressionado).
Depois, configurei no script ações para ocorrer quando a janela criada receber algumas mensagens do windows (movimento de cursor, clique de cursor, etc). As ações envolvem trocar o ponteiro do mouse e trocar a imagem do botão, e isso ocorre conforme sejam os dados de posição do mouse ou do clique.
O "botão" que criamos, além das questões estéticas, vai simplesmente exibir uma mensagem "Você clicou no botão!" quando for pressionado. É lógico que isso é só para demonstrar onde no script você colocaria as ações que devem ocorrer quando o botão for pressionado.
O script ficou extenso é claro porque os binários dos arquivos de imagem são pesados, e por isso é preciso de muitos caracteres para representá-los em sua forma hexadecimal.
Você deve primeiro adicionar os botões que deseja (PESQUISAR, APAGAR, ALTERAR). Depois, deve escrever as labels de cada ação e configurá-las como g-labels dos botões correspondentes.2) No código abaixo, como codificar os eventos dos botões:
a) "PESQUISAR": de forma a perquisar um contacto ou nome.
b) "APAGAR": Apaga um registo selecionado ou pesquisado.
c) "ALTERAR": Altera um registo.
Como o programa não salva nada em arquivos, você pode fazer as rotinas baseandos apenas na listview. Pesquisar seria algo como
1. ler a listview (ControlGet, List, ...)
2. filtrar as informações (Separe as linhas usando StringSplit através de linefeed `n e as colunas através de tab `t. Depois compare as correspondentes para decidir o que excluir)
3. deletar o conteúdo da listview (a função embutida Lv_Delete() sem parâmetros deleta o conteúdo inteiro da listview)
4. reinserir as informações filtradas (Lv_Add).
Apagar é ainda mais fácil. Basta usar a função embutida Lv_Delete(). O primeiro (e único) parâmetro da função é a linha a ser deletada.
Alterar é basicamente apagar e depois inserir a nova informação. Use Lv_Delete() e depois Lv_Add().
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: ADICIONAR BUTÕES
obrigado, Gio
outro pequeno exemplo
outro pequeno exemplo
Code: Select all
;Picture =C:\windows\web\screen\img100.jpg
Picture =C:\windows\web\wallpaper\theme1\img1.jpg
Gui,2: Add, Picture, gImageButton, %Picture%
Gui,2: Show
Return
2GuiClose:
ExitApp
ImageButton:
msgbox, 262208, ,You clicked on %A_ThisLabel%, 1
Return
Code: Select all
Gui,2:color,black
p1 =%a_windir%\web\screen\img100.jpg
p2 =%a_windir%\web\wallpaper\theme1\img1.jpg
ifexist,%p1%
Gui,2: Add, Picture,x10 y10 w200 h120 gP1, %P1%
ifexist,%p2%
Gui,2: Add, Picture,x230 y10 w200 h120 gP2, %P2%
Gui,2: Show , x10 y10 w570 h150 ,TEST
Return
2GuiClose:
ExitApp
p1:
msgbox, 262208, ,You clicked on %A_ThisLabel%, 1
Return
p2:
msgbox, 262208, ,You clicked on %A_ThisLabel%, 1
Return
Re: ADICIONAR BUTÕES
Obrigado pessoal
Peço desculpa em ter questionado e estar ausente à posteriori mas não tive outro remédio, motivos de saúde de um familiar.
Quanto à questão e as respostas, especialmente a segunda parte (Botões Adicionar, Apagar, Pesquisar), isso ainda é código muito complexo para mim, preciso algo mais simples para compreender
Tenho de ver se consigo no meio do código subtrair algo mais simples mesmo
Aliás, na verdade eu ainda estou à procura da metodologia para tornar a aprendizagem mais rápida e simples… :S
Tá agredecido
Abraço
Peço desculpa em ter questionado e estar ausente à posteriori mas não tive outro remédio, motivos de saúde de um familiar.
Quanto à questão e as respostas, especialmente a segunda parte (Botões Adicionar, Apagar, Pesquisar), isso ainda é código muito complexo para mim, preciso algo mais simples para compreender
Tenho de ver se consigo no meio do código subtrair algo mais simples mesmo
Aliás, na verdade eu ainda estou à procura da metodologia para tornar a aprendizagem mais rápida e simples… :S
Tá agredecido
Abraço
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
boa tarde Ria
Listview exemplo
Listview exemplo
Code: Select all
;- Listview example
;-------------------------------------
;- ALTERAR MODIFY = rightclick on row
;- ADD new
;- APAGAR DELETE selected multiple rows with button
;- APAGAR DELETE one row with rightclick
;- PESQUISAR SEARCH
;- modified = 20180925/1
;- created = 20180925
#warn
setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\PT_adress.txt
MainWindowTitle=ListView_Test1
transform,T,chr,09 ;- TAB
Gui,1:default
gosub,testfile
Gui, add, ListView, x20 y20 h120 w180 gLVa vLV1 +altsubmit , Nome|Telefone
Lv_ModifyCol(1, 100) ; Dimensão a atribuir ao tamanho da coluna 1
Lv_ModifyCol(2, 70) ; Dimensão a atribuir ao tamanho da coluna 2
gosub,fill
Gui, add, text, x20 y200, Telefone ; Texto de campo telefone
Gui, add, Edit, x20 y220 w100 h20 vFONE ; Edit campo telefone
Gui, add, Text, x20 y160, Nome ; Texto de campo nome
Gui, Add, Edit, x20 y180 w100 h20 vNOME ; Edit campo nome
Gui, Add, Button,x140 y180 w60 h20 gAdd , Salvar ; Botão Salvar
Gui, Add, Button,x20 y260 w210 h20 gRecyclex, Recycle selected rows ;-Botão Apagar
Gui, Add, Text, x20 y295 ,SEARCH=
Gui, Add, Edit, x20 y320 w210 h22 gFind vSrc, ;-Pesquisar
Gui, show, w240 h380, Tela de Nome ; Tela geral
Menu, CMenu, Add, Recycle, menuDo
Menu, CMenu, Add, Rename , menuDo
Return
Add:
Gui, submit, nohide ; Atualiza com os dados do campo
Fileappend,%nome%`;%fone%`r`n,%f1%
gosub,fill
sleep,1000
GuiControl,1:,fone,
GuiControl,1:,nome,
Return
GuiClose:
ExitApp
;----------------------------------------
;-------------- Fill Listview -----------
Fill:
Gui,1:default
gui,1:listview,LV1
LV_Delete()
loop,read,%F1%
{
LR=%A_loopReadLine%
if LR=
continue
C1 =
C2 =
stringsplit,C,LR,`;,
LV_Add("", c1,c2)
}
LV_ModifyCol(1, "Sort CaseLocale") ; or "Sort CaseLocale"
LV_Modify(LV_GetCount(), "Vis") ;scrolls down
return
;----------------------------------------
;----------- Listview click on row -------
LVa:
Gui,1:Submit,nohide
if A_GuiEvent = Normal
{
LV_GetText(C1,A_EventInfo,1)
LV_GetText(C2,A_EventInfo,2)
cx=%c1%;%c2%
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
}
if A_GuiEvent = Rightclick
{
LV_GetText(C1,A_EventInfo,1)
LV_GetText(C2,A_EventInfo,2)
cx=%c1%;%c2%
RN:=LV_GetNext("C")
RF:=LV_GetNext("F")
GC:=LV_GetCount()
goto,menux
}
return
;----------------------------
;------------- MENU when rightclick on row ----------
menux:
MouseGetPos, musX, musY
Menu, CMenu, Show, %musX%,%musY%
return
menudo:
If (A_ThisMenuItem = "Recycle")
gosub,Recyclex2
If (A_ThisMenuItem = "Rename")
gosub,Renamex
return
;-------------------------------
Recyclex2:
Gui,1:default
gui,1:listview,LV1
if RF=0
return
LV_GetText(C1, RF, 1)
LV_GetText(C2, RF, 2)
CT=%c1%;%c2%
msgbox, 262180,DELETE ,Want you really delete %C1% ?
IfMsgBox,No
Return
LV_Delete(RF)
FileRead,AA,%F1%
Filedelete,%F1%
StringReplace,BB,AA,%ct%`r`n,,
FileAppend,%BB%,%F1%
return
;--------------- DELETE multiple selected rows --------------
Recyclex:
C1 =
RF = 0
RFL =
Loop
{
RF:=LV_GetNext(RF)
if RF=0
break
RFL = %RF%|%RFL%
LV_GetText(C1_Temp, RF, 1)
C1 = %C1%`n%C1_Temp%
}
if C1 !=
{
msgbox, 262180,DELETE ,Want you really delete %C1% ?
IfMsgBox,No
Return
Else
{
Loop, parse, RFL, |
LV_Delete(A_LoopField)
filedelete,%F1%
Loop % LV_GetCount()
{
BX1=
BX2=
LV_GetText(BX1,A_INDEX,1)
LV_GetText(BX2,A_INDEX,2)
fileappend,%BX1%`;%BX2%`r`n,%F1%
}
}
C1=
C2=
}
return
;--------------- modify ----------------
renamex:
Gui,1:submit,nohide
Gui,3:Font, S12 CBlack , Lucida Console
Gui,3:Add,Text , x1 y5 w80 , NAME
Gui,3:Add,Edit , x80 y5 w500 h27 vA31, %C1%
Gui,3:Add,Text , x1 y40 w80 , Telefon
Gui,3:Add,Edit , x80 y40 w500 h27 vA32, %C2%
Gui,3:Add, Button, x550 y80 w40 h27, OK
Gui,3:Show, x2 y385 w600 h120, ADRESS
GuiControl,3:Focus,A31
send,^{end}
return
;--------
3GuiClose:
3GuiEscape:
Gui, 3:Destroy
return
3ButtonOK:
Gui,3:submit
if A31=
{
Gui,3: Destroy
return
}
FileRead, FileContent, %f1%
FileDelete, %f1%
StringReplace, FileContent, FileContent, %C1%`;%C2%, %A31%`;%A32%
FileAppend, %FileContent%, %f1%
GoSub,fill
Gui,3:destroy
return
;----------------------------------------------------------
;------------------- SEARCH -------------------------------
Find:
Gui,1: Submit, Nohide
Gui,1:listview, LV1
checkempty:
if (src="")
{
settimer,checkempty,off
goto,fill
return
}
settimer,checkempty,1000
LV_Delete()
loop,read,%f1%
{
LR=%A_loopReadLine%
if SRC<>
{
if LR contains %src%
{
stringsplit,C,A_LoopReadLine,`;
LV_Add("",C1,C2)
}
}
else
continue
}
LV_Modify(LV_GetCount(), "Vis")
if (SRC="")
goto,Fill
return
;------------------------------------------------------
;--------------- create testfile --------------------------
testfile:
ifnotexist,%f1%
{
e1=
(Ltrim Join`r`n
Maria do Ceu;0211914498
Miguel Vaquinhas;0218868209
Rodrigues Fernanda;0218234567
)
Fileappend,%e1%`r`n,%f1%
e1=
}
return
;============ END script ====================================
Re: ADICIONAR BUTÕES
Bom dia Ria.
O principal segredo para tornar a programação mais simples é dividir as tarefas grandes (abstratas) em tarefas menores, e focar nas tarefas menores apenas uma de cada vez. Assim fica mais fácil de aprender, entender e progredir. Se você progredir um pouco que seja na implementação de uma rotina pequena a cada vez, verá sem dúvida que chegará cada vez mais perto de concluir um projeto grande.
Tendo dito isto, vou te dar um passo a seguir, e quando tiver bem afinado com ele, prosseguimos, pois do contrário como disse, ficará bem complexo de tratar o assunto.
Primeiro passo: adicionando os botões Adicionar, Apagar e Pesquisar em uma tela.
Botões são um tipo de controle de tela, assim como campos (edit), tabelas (listview), imagens (picture) e etc. Assim, eles são criados na tela usando o comando Gui, add,, com o terceiro parâmetro button, o quarto parâmetro contendo as opções (posicionamento, g-label, v-variável, e etc) e o quinto parâmetro contendo a palavra que aparecerá no botão. Este comando completo deverá ser posicionado em uma linha anterior ao comando Gui, Show, e na dúvida sobre isso, é só colocar ele imediatamente acima da linha do comando Gui, Show.
Se você executar o código acima, verá que se abre uma tela com um botão mais ou menos no meio chamado "Adicionar".
Se eu quisesse colocar os outros dois botões, eu simplesmente repetiria a linha de inclusão do botão três vezes, mudando somente o que fosse preciso (a palavra) e lembrando sempre que todos os comandos de inclusão dos botões devem vir antes do comando Gui, Show. Assim, ficaria mais ou menos assim:
Veja no exemplo acima que modifiquei a posição y dentro do parâmetro de opções. Essa posição indica o posicionamento vertical do controle dentro da tela. O número zero seria a borda superior da tela e o número correspondente à borda inferior da janela seria o número da altura da tela (portanto, 300). Como quero colocar mais ou menos no meio, mas depois dos outros botões, eu posicionei o Y do botão Pesquisar no pixel 210. Assim, ele fica abaixo dos outros dois (150 e 180).
Por enquanto acredito que basta. Tente incrementar o exemplo acima adicionando ainda mais botões, mudando as posições e vendo o que acontece. Quando estiver 100% seguro de que entendeu a parte de adicionar os botões, poste abaixo e vamos prosseguir com a parte de linkar ações para serem executadas quando os botões forem clicados pelo usuário
A segunda parte foi uma resposta um pouco abstrata em virtude da própria pergunta. Você pediu orientações sobre como implementar três rotinas inteiras de uma só vez, então, a explicação teve de ser um pouco mais abstrata, pois são muitos comandos para descrever em um único post.Quanto à questão e as respostas, especialmente a segunda parte (Botões Adicionar, Apagar, Pesquisar), isso ainda é código muito complexo para mim, preciso algo mais simples para compreender
O principal segredo para tornar a programação mais simples é dividir as tarefas grandes (abstratas) em tarefas menores, e focar nas tarefas menores apenas uma de cada vez. Assim fica mais fácil de aprender, entender e progredir. Se você progredir um pouco que seja na implementação de uma rotina pequena a cada vez, verá sem dúvida que chegará cada vez mais perto de concluir um projeto grande.
Tendo dito isto, vou te dar um passo a seguir, e quando tiver bem afinado com ele, prosseguimos, pois do contrário como disse, ficará bem complexo de tratar o assunto.
Primeiro passo: adicionando os botões Adicionar, Apagar e Pesquisar em uma tela.
Botões são um tipo de controle de tela, assim como campos (edit), tabelas (listview), imagens (picture) e etc. Assim, eles são criados na tela usando o comando Gui, add,, com o terceiro parâmetro button, o quarto parâmetro contendo as opções (posicionamento, g-label, v-variável, e etc) e o quinto parâmetro contendo a palavra que aparecerá no botão. Este comando completo deverá ser posicionado em uma linha anterior ao comando Gui, Show, e na dúvida sobre isso, é só colocar ele imediatamente acima da linha do comando Gui, Show.
Code: Select all
Gui, add, button, x130 y150, Adicionar
Gui, show, w300 h300
Se eu quisesse colocar os outros dois botões, eu simplesmente repetiria a linha de inclusão do botão três vezes, mudando somente o que fosse preciso (a palavra) e lembrando sempre que todos os comandos de inclusão dos botões devem vir antes do comando Gui, Show. Assim, ficaria mais ou menos assim:
Code: Select all
Gui, add, button, x130 y150, Adicionar
Gui, add, button, x130 y180, Apagar
Gui, add, button, x130 y210, Pesquisar
Gui, show, w400 h300
Por enquanto acredito que basta. Tente incrementar o exemplo acima adicionando ainda mais botões, mudando as posições e vendo o que acontece. Quando estiver 100% seguro de que entendeu a parte de adicionar os botões, poste abaixo e vamos prosseguir com a parte de linkar ações para serem executadas quando os botões forem clicados pelo usuário
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: ADICIONAR BUTÕES
Bem, vocês são incriveis, o que só torna este forúm único!
Obrigado garry, mais estética menos estética era isso que pretendia saber…
1) Esses dados ficam guardados nesse mesmo programa ou em algum local (excel, etc..)?
2) Há limite de inserção de dados?
Obrigado Gio,
Você é um verdadeiro líder assim.
Sim, vemos muito código, achamos bonito, conseguimos pincelar e tornar "nosso" e à
nossa imagem mudando várias coisas, por tentativas, etc...mas aprendendo do zero tem sempre outro elan e valor...
Eu gostaria mesmo de entender o porquê das coisas, sempre fui assim em quase tudo.
Portanto, acho que os seus métodos são os mais corretos para quem pretende e precisa de aprender!
Parabéns por isso!
Essa parte de inserir botões, eu já entendo bem, acho que não tem dificuldade alguma e passa a ser apenas
umas questão de estética e coordenadas após fazer algumas vezes. Estou basicamente 100% seguro.
Penso até que após perceber esse inicio, talvez seja mais útil usar um programa de desenho
para o efeito, poupando tempo. Aí também podemos entender e aprender sobre isso.
Então, como você diz, eu, como estou a começar, tenho é dificuldade em perceber como codificar os eventos, penso que o que chama de
rotinas / sub-rotinas.
E aí, como vocês são experts, podem dizer se há manual traduzido na integra para o Português?
É válido seguir os manuais?
Bem haja malta, pela vossa disponibilidade..!
Abraços
NOTA: Qual a diferença entre "v" e "g" nos labels? Ex: "vGoogle"...
Obrigado garry, mais estética menos estética era isso que pretendia saber…
1) Esses dados ficam guardados nesse mesmo programa ou em algum local (excel, etc..)?
2) Há limite de inserção de dados?
Obrigado Gio,
Você é um verdadeiro líder assim.
Sim, vemos muito código, achamos bonito, conseguimos pincelar e tornar "nosso" e à
nossa imagem mudando várias coisas, por tentativas, etc...mas aprendendo do zero tem sempre outro elan e valor...
Eu gostaria mesmo de entender o porquê das coisas, sempre fui assim em quase tudo.
Portanto, acho que os seus métodos são os mais corretos para quem pretende e precisa de aprender!
Parabéns por isso!
Essa parte de inserir botões, eu já entendo bem, acho que não tem dificuldade alguma e passa a ser apenas
umas questão de estética e coordenadas após fazer algumas vezes. Estou basicamente 100% seguro.
Penso até que após perceber esse inicio, talvez seja mais útil usar um programa de desenho
para o efeito, poupando tempo. Aí também podemos entender e aprender sobre isso.
Então, como você diz, eu, como estou a começar, tenho é dificuldade em perceber como codificar os eventos, penso que o que chama de
rotinas / sub-rotinas.
E aí, como vocês são experts, podem dizer se há manual traduzido na integra para o Português?
É válido seguir os manuais?
Bem haja malta, pela vossa disponibilidade..!
Abraços
NOTA: Qual a diferença entre "v" e "g" nos labels? Ex: "vGoogle"...
Code: Select all
Gui Add, Button, x270 y12 w80 h23 gGoogle, &Google
Gui Add, Button, x270 y60 w80 h23 gBlocoDeNotas, &Bloco de Notas
Gui Add, Button, x270 y108 w80 h23, & ---
Gui Add, Button, x270 y156 w80 h23, & ---
Gui Add, Button, x270 y204 w80 h23, & ---
Gui Add, Button, x270 y252 w80 h23, & ---
Gui Add, Button, x270 y301 w80 h23, & ---
Gui Show, w620 h420, Window
Return
Google:
run, www.google.com
return
BlocoDeNotas:
run, notepad.exe
Return
GuiEscape:
GuiClose:
ExitApp
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
1- exemplo F1=%A_scriptdir%\PT_adress.txt ;- save adress here as script or also > C:\test\PT_adress.txt ( F1 is the variable )1) Esses dados ficam guardados nesse mesmo programa ou em algum local (excel, etc..)?
2) Há limite de inserção de dados?
2- não sabe
GUI TEST
Code: Select all
;- Listview GUI example
;-------------------------------------
#warn
setworkingdir,%a_scriptdir%
F1=%A_scriptdir%\PT_adress.txt ;- save adress here
MainWindowTitle=ListView_Test1
Gui,1:default
Gui,1: -DPIScale
Gui,1:Color,Black
Gui,1:Color,ControlColor, Black
Gui,1:Font,s12 cYellow,Lucida Console
gosub,testfile ;- create testfile F1
Gui, add, ListView, x20 y20 h550 w680 gLVa vLV1 +altsubmit backgroundGray grid , Nome|Telefone
Lv_ModifyCol(1, 400) ;- Dimensão a atribuir ao tamanho da coluna 1
Lv_ModifyCol(2, 200) ;- Dimensão a atribuir ao tamanho da coluna 2
gosub,fill ;- read testfile F1
Gui, add, Text, x10 y600 , Nome ;- Texto de campo nome
Gui, Add, Edit, x160 y600 w300 h35 vNOME ;- Edit campo nome > vNome is a Variable (v)
Gui, add, text, x10 y650 , Telefone ;- Texto de campo telefone
Gui, add, Edit, x160 y650 w300 h35 vFONE ;- Edit campo telefone
Gui, Add, Button,x540 y650 w120 h35 gAdd , Salvar ;- Botão Salvar > gADD (g) is a goto Label in this case goto > ADD:
Gui, Add, Button,x20 y740 w410 h35 gRecyclex, Recycle selected rows ;-Botão Apagar
Gui, Add, Text, x20 y795 cGray ,SEARCH=
Gui, Add, Edit, x20 y820 w410 h35 gFind vSrc , ;-Pesquisar
Gui, show,x10 y10 w720 h920, Tela de Nome ;- Tela geral
Menu, CMenu, Add, Recycle, menuDo
Menu, CMenu, Add, Rename , menuDo
Return
GuiClose:
ExitApp
;----------------------------------------
;- Botão gLabel ( empty do nothing here )
add:
recyclex:
find:
menudo:
return
;----------- Listview click on row -------
LVa:
Gui,1:Submit,nohide
if A_GuiEvent = Normal
{
LV_GetText(C1,A_EventInfo,1)
LV_GetText(C2,A_EventInfo,2)
cx=%c1%;%c2%
msgbox,%cx%
}
return
;-------------- Fill Listview -----------
Fill:
Gui,1:default
gui,1:listview,LV1
LV_Delete()
loop,read,%F1%
{
LR=%A_loopReadLine%
if LR=
continue
C1 =
C2 =
stringsplit,C,LR,`;,
LV_Add("", c1,c2)
}
LV_ModifyCol(1, "Sort CaseLocale") ;-
LV_Modify(LV_GetCount(), "Vis") ;- scrolls down
return
;----------------------------------------
;--------------- create testfile --------------------------
testfile:
ifnotexist,%f1%
{
e1=
(Ltrim Join`r`n
Maria do Ceu;0211914498
Miguel Vaquinhas;0218868209
Rodrigues Fernanda;0218234567
)
Fileappend,%e1%`r`n,%f1% ;- save a testfile to > F1=%A_scriptdir%\PT_adress.txt
e1=
}
return
;============ END script test example ===========================
Re: ADICIONAR BUTÕES
Excelente, já podemos prosseguir então.Essa parte de inserir botões, eu já entendo bem
Vejo que você já entendeu qual o passo subsequente.tenho é dificuldade em perceber como codificar os eventos, penso que o que chama de
rotinas / sub-rotinas.
(...)
NOTA: Qual a diferença entre "v" e "g" nos labels? Ex: "vGoogle"...
Uma vez adicionado o botão, precisamos configurar a ação que deverá ocorrer quando o usuário clicar nele.
Fazemos isso configurando nas opções da linha de inserção do botão (aquela que escrevemos antes) uma g-label.
Uma g-label nada mais é o do que uma configuração nas opções do botão que contém o nome da label que queremos que seja executada quando o usuário clicar no botão, precedido da letra g.
Uma label é uma sequência de linhas no script que "separamos" do restante do código através de um nome sem espaços seguido de dois pontos. Ela representa uma linha do script para a qual a execução pode "pular" em algum momento. Assim, se eu escrever uma label e codificar o nome dela na opção g-label do botão, a execução dos comandos do script vai "pular" para a linha dessa label quando o usuário clicar no botão.
Code: Select all
Gui, add, button, x120 y150 gRODAR_O_MSGBOX, Acionar
Gui, show, w300 h300
Return
RODAR_O_MSGBOX:
msgbox, 0, Aviso, Você clicou no botão Acionar!
Execute o código acima e clique no botão. Aparecerá uma caixa de texto (msgbox). Feche ela e clique de novo no botão. Aparecerá mais uma vez. Repita fechar a msgbox e clicar no botão e verá que toda vez que faz isso, é exibida uma nova msgbox. Isso ocorre porque codificamos nas opções do botão a g-label RODAR_O_MSGBOX, que é onde está a linha que exibe o msgbox. Assim, sempre que o usuário clica no botão, a execução pula para a linha que executa o msgbox.
Podemos codificar apenas uma g-label por botão, mas tendo vários botões, podemos codificar em cada um uma g-label diferente.
Code: Select all
Gui, add, button, x120 y150 gRODAR_O_MSGBOX, Acionar
Gui, add, button, x120 y180 gRODAR_O_OUTRO_MSGBOX, Acionar Outro
Gui, show, w300 h300
Return
RODAR_O_MSGBOX:
msgbox, 0, Aviso, Você clicou no botão Acionar!
Return
RODAR_O_OUTRO_MSGBOX
msgbox, 0, Aviso, Epa! clicou no outro agora !!
Return
Vejo no script abaixo que experimentamos trocar (entre elas) os nomes das labels em cada botão. Isso faz com que as mensagens de cada botão sejam trocadas também.
Code: Select all
Gui, add, button, x120 y150 gRODAR_O_MSGBOX, Acionar
Gui, add, button, x120 y180 gRODAR_O_OUTRO_MSGBOX, Acionar Outro
Gui, show, w300 h300
Return
RODAR_O_OUTRO_MSGBOX:
msgbox, 0, Aviso, Você clicou no botão Acionar!
Return
RODAR_O_MSGBOX
msgbox, 0, Aviso, Epa! clicou no outro agora !!
Return
Code: Select all
Gui, add, button, x120 y150 gGRITAR_ALGO, Acionar
Gui, add, button, x120 y180 gRODAR_OUTRO, Acionar Outro
Gui, show, w300 h300
Return
GRITAR_ALGO:
msgbox, 0, Aviso, Você clicou no botão Acionar!
Return
RODAR_OUTRO:
msgbox, 0, Aviso, Epa! clicou no outro agora !!
Return
NOTAS: Você não precisar configurar uma g-label em um botão, ou seja, pode omitir essa configuração, mas sem uma g-label, o botão não fará nada quando clicado. Além disso, se você escrever uma configuração g-label que não corresponda a uma label do script, o script não vai rodar (vai dar um aviso de erro).
Agora que já expliquei o que é uma g-label vai ser mais fácil explicar o que é uma v-variable. A v-variable é uma OUTRA configuração que podemos colocar nos controles de telas (como botões, campos, tabelas e etc) e que na verdade significa o nome de uma variável que vai receber as informações daquele controle (porém somente quando chamarmos o comando Gui, submit). É configurada também nas opções do controle respectivo e é basicamente composta do nome da variável precedido da letra v.NOTA: Qual a diferença entre "v" e "g" nos labels? Ex: "vGoogle"...
No caso de um botão, não temos muita utilidade para uma v-variable, mas no caso de um campo de texto (edit) por exemplo, a v-variável é extremamente útil, pois é configurando ela que vamos definir em qual variável será colocado aquilo que o usuário tiver escrito no campo. Neste caso, o que o usuário escreveu no campo vai ser automaticamente salvo na v-variável assim que chamarmos o comando Gui, submit.
Dessa forma, veja o exemplo abaixo:
Code: Select all
Gui, add, Edit, x120 y150 vO_QUE_ESCREVEU
Gui, add, button, x120 y180 gGRITAR_ALGO, Acionar
Gui, show, w300 h300
Return
GRITAR_ALGO:
Gui, submit, nohide
msgbox, 0, Aviso, Você escreveu %O_QUE_ESCREVEU% !
Return
Da mesma forma que com a g-label, você só pode indicar uma v-variable por controle.
No momento ainda não há. Mas temos vários tutoriais traduzidos e os fórums também existem para auxiliar os falantes de português. Além disso, você pode utilizar o Google Tradutor, para ir seguindo os passos das páginas do manual em inglês.podem dizer se há manual traduzido na integra para o Português?
Espero ter ajudado, se ainda tiver alguma dúvida, pode colocar abaixo.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: ADICIONAR BUTÕES
Muito obrigado,
Já entendi perfeitamente agora o g-label e o v-variavel.
Nos manuais (mesmo em inglês), como posso / ou a melhor forma de interpretar as coisas?
É linear?
Por exemplo, utilizando um comando aqui utilizado, e tenho de seguir à risca os parâmetros que lá estão dentro?
O que significa os parêntesis retos vermelhos que costumam ter, umas vezes integram tudo, outros só alguns parametros?
Significa que são obrigatórios os que estão dentro deles?
Agradecido
Ex:
LV_ModifyCol(ColumnNumber, Options, ColumnTitle)
Já entendi perfeitamente agora o g-label e o v-variavel.
Nos manuais (mesmo em inglês), como posso / ou a melhor forma de interpretar as coisas?
É linear?
Por exemplo, utilizando um comando aqui utilizado, e tenho de seguir à risca os parâmetros que lá estão dentro?
O que significa os parêntesis retos vermelhos que costumam ter, umas vezes integram tudo, outros só alguns parametros?
Significa que são obrigatórios os que estão dentro deles?
Agradecido
Ex:
LV_ModifyCol(ColumnNumber, Options, ColumnTitle)
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
obrigado Gio
alguns links , procurar por listview:
https://www.google.com/search?&as_filet ... ew&num=100
https://autohotkey.com/boards/viewtopic.php?t=46643 ;- Gio
https://autohotkey.com/docs_1.0/Tutoria ... guese.html
http://bsi.uniriotec.br/tcc/textos/201512Franca.pdf ;- muitos links aqui
alguns links , procurar por listview:
https://www.google.com/search?&as_filet ... ew&num=100
https://autohotkey.com/boards/viewtopic.php?t=46643 ;- Gio
https://autohotkey.com/docs_1.0/Tutoria ... guese.html
http://bsi.uniriotec.br/tcc/textos/201512Franca.pdf ;- muitos links aqui
Re: ADICIONAR BUTÕES
Nas caixas amarelas, que demonstram a sintaxe dos comandos, os parâmetros entre colchetes, ou seja, entre [ e ] simbolizam parâmetros opcionais. Isso signifca que eles podem ser omitidos nas linhas de chamamento daquele comando. Os parâmetros obrigatórios são portanto os que estão fora dos colchetes.Nos manuais (mesmo em inglês), como posso / ou a melhor forma de interpretar as coisas?
É linear?
Por exemplo, utilizando um comando aqui utilizado, e tenho de seguir à risca os parâmetros que lá estão dentro?
O que significa os parêntesis retos vermelhos que costumam ter, umas vezes integram tudo, outros só alguns parametros?
Significa que são obrigatórios os que estão dentro deles?
Uma explicação mais pormenorizada de como funcionam as caixas de sintaxe de comandos nas páginas da documentação pode ser encontrada a partir do item 6 do tutorial acessível neste link.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: ADICIONAR BUTÕES
Thanks garry,
Realmente eu preciso é de um manual
Eu já tinha verificado esses quase todos, mas parecem-me já algo simples demais.
Daí que tenha tentado pela Documentação oficial do AutoHotKey, contudo até já pensei em imprimir, mas aquilo tem as paginas codificadas e não sai igual…
Já experimentei por prints ou pelo word, mas está difícil.
E depois é tanta coisa que uma pessoa perde-se. Havia de ser um .pdf geral!
Portanto também ainda estou a tentar entender qual a metodologia a ser utilizada para aprender mais rápido e com mais bases o AHK.
Gostaria também de usar muito as funções matemáticas e expô-las em gráficos, para mim é importante.
Isso e adequar a formulas físicas e matemáticas, quem sabe um dia verificar as potencialidades do AutoHotKey em transdutores…
Realmente eu preciso é de um manual
Eu já tinha verificado esses quase todos, mas parecem-me já algo simples demais.
Daí que tenha tentado pela Documentação oficial do AutoHotKey, contudo até já pensei em imprimir, mas aquilo tem as paginas codificadas e não sai igual…
Já experimentei por prints ou pelo word, mas está difícil.
E depois é tanta coisa que uma pessoa perde-se. Havia de ser um .pdf geral!
Portanto também ainda estou a tentar entender qual a metodologia a ser utilizada para aprender mais rápido e com mais bases o AHK.
Gostaria também de usar muito as funções matemáticas e expô-las em gráficos, para mim é importante.
Isso e adequar a formulas físicas e matemáticas, quem sabe um dia verificar as potencialidades do AutoHotKey em transdutores…
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
neste link.Nas caixas amarelas, que demonstram a sintaxe dos comandos, os parâmetros entre colchetes, ou seja, entre [ e ] simbolizam parâmetros opcionais. Isso signifca que eles podem ser omitidos nas linhas de chamamento daquele comando. Os parâmetros obrigatórios são portanto os que estão fora dos colchetes.
Uma explicação mais pormenorizada de como funcionam as caixas de sintaxe de comandos nas páginas da documentação pode ser encontrada a partir do item 6 do tutorial acessível
Obrigado Gio,
Nada como eu ler melhor toda a documentação que por aqui existe.
Abraço
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
aprender você pode usar também
command list :
https://autohotkey.com/docs/commands/
google search for ahk-files > query=listbox etc ...
https://www.google.com/search?&as_filet ... ox&num=100
Autohotkey help :
command list :
https://autohotkey.com/docs/commands/
google search for ahk-files > query=listbox etc ...
https://www.google.com/search?&as_filet ... ox&num=100
Autohotkey help :
Code: Select all
run,%a_programfiles%\AutoHotkey\AutoHotkey.chm
Last edited by garry on 28 Sep 2018, 14:13, edited 1 time in total.
Re: ADICIONAR BUTÕES
Obrigado garry,
Esse https://autohotkey.com/docs/commands/ tem todos os comandos do AutoHotKey???
Uma ultima questão por agora:
É possível colorir botões?
Tipo alterar a cor de um botão só por si, em vez de cinza coloca-lo a vermelho/outra cor?
Thanks
Esse https://autohotkey.com/docs/commands/ tem todos os comandos do AutoHotKey???
Uma ultima questão por agora:
É possível colorir botões?
Tipo alterar a cor de um botão só por si, em vez de cinza coloca-lo a vermelho/outra cor?
Thanks
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Re: ADICIONAR BUTÕES
As opções padrão do controle tipo botão não permite mudança de cor, mas é possível criar um arquivo de imagem com a textura vermelha (no paint ou qualquer algum outro programa editor de imagens) e depois usá-lo para colocar a imagem no controle do tipo botão.
O usuário Just Me fez uma classe que facilita este tipo de trabalho. Você pode encontrá-la no link abaixo:
https://autohotkey.com/boards/viewtopic.php?f=6&t=1103
Tem também um site de terceiros que facilita bastante a criação de imagens de botões:
https://dabuttonfactory.com/
Outra opção é usar um controle do tipo imagem que simule um botão, conforme exemplificado nos posts acima.
O usuário Just Me fez uma classe que facilita este tipo de trabalho. Você pode encontrá-la no link abaixo:
https://autohotkey.com/boards/viewtopic.php?f=6&t=1103
Tem também um site de terceiros que facilita bastante a criação de imagens de botões:
https://dabuttonfactory.com/
Outra opção é usar um controle do tipo imagem que simule um botão, conforme exemplificado nos posts acima.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
Archmage Gray - A fantasy shooter game fully coded in AutoHotkey
Re: ADICIONAR BUTÕES
obrigado Gio
Também pode usar a imagem para o botão
Também pode usar a imagem para o botão
Code: Select all
;- 3 Color Buttons & Edit & Send To Notepad
;Gui +AlwaysOnTop
;Gui, +E0x08000000 ;WS_EX_NOACTIVATE = 0x08000000
i=0
Gui, Font, S10 C000000 , Tahoma
Gui, Show, x5 y5 h160 w310,Button_Test
Gui, Font, S09 cFF0000 , Tahoma
Gui, Add, Tab, x-2 y0 w313 h153 , Page1
Gui, Font, S16 c000000 , Tahoma
Gui,Add,Progress, x10 y110 w30 h30 Disabled BackgroundRed
Gui,Add,Text, xp yp wp hp cYellow BackgroundTrans Center 0x200 vBB1 gB1,1
Gui,Add,Progress, x100 y110 w30 h30 Disabled BackgroundGray
Gui,Add,Text, xp yp wp hp cBlack BackgroundTrans Center 0x200 vBB2 gB2,2
Gui,Add,Progress, x200 y110 w100 h30 Disabled BackgroundGreen
Gui,Add,Text, xp yp wp hp cBlack BackgroundTrans Center 0x200 vBB3 gB3,NotePad
Gui, Font, S12 , Lucida Console
Gui,add,edit, x10 y30 h70 w250 vED1 cGray
return
GuiClose:
ExitApp
B1:
gui,submit,nohide
GuiControl,1:,ED1,
;msgbox, 262208,BUTTON_TEST ,You selected Button = %a_guicontrol%,1
e1x=
(ltrim join`n
Text1---
next Line
)
GuiControl,1:,ED1,%e1x%
return
B2:
gui,submit,nohide
GuiControl,1:,ED1,
;msgbox, 262208,BUTTON_TEST ,You selected Button = %a_guicontrol%,1
e2x=
(ltrim join`n
Text2---
next Line
)
GuiControl,1:,ED1,%e2x%
return
B3:
gui,submit,nohide
GuiControl,1:,ED1,
pr=notepad
sc=ahk_class Notepad
i++
IfWinNotExist,%sc%
{
Run, %pr%,,,pid1
WinWait,%SC%
WinMove,%sc%,, 5, 290, 910, 700
}
IfWinNotActive ,%SC%,,WinActivate,%SC%
WinWaitActive,%SC%
text3=%i%_abcde`r`nFGHI`r`n
ControlSetText,Edit1,%text3%,%sc%
GuiControl,1:,ED1,%text3%
return
;=========================================================================
Re: ADICIONAR BUTÕES
Muito obrigado Gio e garry
Hora de estudar e aprender…
Abraço
Algo disponham
Hora de estudar e aprender…
Abraço
Algo disponham
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…!
Return to “Ajuda e Suporte Geral”
Who is online
Users browsing this forum: No registered users and 52 guests