ADICIONAR BUTÕES

Tire suas dúvidas sobre programação em AutoHotkey
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

ADICIONAR BUTÕES

11 Sep 2018, 20:49

Boas,
Alguem que possa ajudar?
Algumas dúvidas... :think:

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: :headwall:
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…! :superhappy:
User avatar
Gio
Posts: 504
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: ADICIONAR BUTÕES

12 Sep 2018, 12:13

Bom dia Ria.

Vou dividir a primeira pergunta em duas, para facilitar a resposta.
1) Existe alguma maneira de... guardando a própria imagem no programa?
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.

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
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.

:arrow: 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.
1) Existe alguma maneira de colocar um botão por imagem
Sim. Existem também várias maneiras. Eis algums exemplos: O exemplo abaixo usa o item 1 da lista (configura um controle do tipo imagem para que se comporte como um botão):

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
:arrow: 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.
2) No código abaixo, como codificar os eventos dos botões: :headwall:
a) "PESQUISAR": de forma a perquisar um contacto ou nome.
b) "APAGAR": Apaga um registo selecionado ou pesquisado.
c) "ALTERAR": Altera um registo.
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.

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 !!
garry
Posts: 1566
Joined: 22 Dec 2013, 12:50

Re: ADICIONAR BUTÕES

12 Sep 2018, 13:03

obrigado, Gio
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
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

25 Sep 2018, 10:40

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
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
garry
Posts: 1566
Joined: 22 Dec 2013, 12:50

Re: ADICIONAR BUTÕES

25 Sep 2018, 15:24

boa tarde Ria
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 ====================================
User avatar
Gio
Posts: 504
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: ADICIONAR BUTÕES

26 Sep 2018, 08:54

Bom dia Ria.
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
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.

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.

:arrow: 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 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:

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
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 :thumbup:
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

27 Sep 2018, 07:27

Bem, vocês são incriveis, o que só torna este forúm único! :beer:

Obrigado garry, mais estética menos estética era isso que pretendia saber… :bravo:

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. :superhappy:
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! :headwall:
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..! :rainbow:
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…! :superhappy:
garry
Posts: 1566
Joined: 22 Dec 2013, 12:50

Re: ADICIONAR BUTÕES

27 Sep 2018, 08:45

1) Esses dados ficam guardados nesse mesmo programa ou em algum local (excel, etc..)?
2) Há limite de inserção de dados?
1- exemplo F1=%A_scriptdir%\PT_adress.txt ;- save adress here as script or also > C:\test\PT_adress.txt ( F1 is the variable )
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 ===========================

User avatar
Gio
Posts: 504
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: ADICIONAR BUTÕES

27 Sep 2018, 11:07

Essa parte de inserir botões, eu já entendo bem
Excelente, já podemos prosseguir então.
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"...
Vejo que você já entendeu qual o passo subsequente.

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.

:arrow: 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
Se você executar o script acima, verá que cada botão exibe uma msgbox diferente. Isso ocorre porque são duas labels diferentes, e cada uma tem um comando de msgbox com uma frase diferente, e cada uma foi colocada em um botão distinto. Para separar labels do restante do código do script, determinando o fim das linhas delas, usamos o comando Return.

:arrow: 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
Se quisermos, também podemos modificar o nome das labels, mas devemos sempre manter a configuração g-label com os nomes atualizados nos botões.

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
Veja que no código acima trocamos o nome da label, que antes era "RODAR_O_MSGBOX" para "GRITAR_ALGO". Para fazer o script funcionar, tivemos então que trocar também a configuração g-label nas opções do botão Acionar, de modo que o nome seja o mesmo.

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).
NOTA: Qual a diferença entre "v" e "g" nos labels? Ex: "vGoogle"...
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.

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
Execute o código, escreva algo no campo e clique no botão. Uma msgbox aparece, com uma mensagem que contém o que você tiver escrito no campo. Isso ocorreu porque configuramos o botão para executar a g-label GRITAR_ALGO e também porque configuramos o campo para salvar o que estiver nele na variável O_QUE_ESCREVEU no momento em que chamarmos Gui, submit. Assim, nós simplesmente colocamo o Gui, Submit dentro da label GRITAR_ALGO, de modo que o conteúdo do campo é salvo na variável O_QUE_ESCREVEU logo antes do script executar o msgbox.

Da mesma forma que com a g-label, você só pode indicar uma v-variable por controle.
podem dizer se há manual traduzido na integra para o Português?
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.

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 !!
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

27 Sep 2018, 11:50

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)
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
User avatar
Gio
Posts: 504
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: ADICIONAR BUTÕES

27 Sep 2018, 15:36

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?
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 neste link.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

27 Sep 2018, 15:41

Thanks garry,
Realmente eu preciso é de um manual :D
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… :mrgreen:
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

27 Sep 2018, 15:54

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
neste link.


Obrigado Gio,
Nada como eu ler melhor toda a documentação que por aqui existe. :terms:
Abraço
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
garry
Posts: 1566
Joined: 22 Dec 2013, 12:50

Re: ADICIONAR BUTÕES

28 Sep 2018, 03:23

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 :

Code: Select all

run,%a_programfiles%\AutoHotkey\AutoHotkey.chm
Last edited by garry on 28 Sep 2018, 14:13, edited 1 time in total.
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

28 Sep 2018, 04:03

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
Podemos não voltar, mas vamos e...se fosse fácil, também não era mesmo para nós…! :superhappy:
User avatar
Gio
Posts: 504
Joined: 30 Sep 2013, 10:54
Location: Brazil

Re: ADICIONAR BUTÕES

28 Sep 2018, 09:43

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.
"What is suitable automation? Whatever saves your day for the greater matters."
Barcoder - Create QR Codes and other Barcodes using only Autohotkey !!
garry
Posts: 1566
Joined: 22 Dec 2013, 12:50

Re: ADICIONAR BUTÕES

28 Sep 2018, 10:05

obrigado Gio
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
;=========================================================================
User avatar
Ria
Posts: 23
Joined: 03 Sep 2018, 17:54

Re: ADICIONAR BUTÕES

28 Sep 2018, 17:17

Muito obrigado Gio e garry
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…! :superhappy:

Return to “Ajuda e Suporte Geral”

Who is online

Users browsing this forum: No registered users and 2 guests