Ir para conteúdo


Luigi

Cadastrado: 20 Ago 2011
Offline Última atividade: Jun 02 2017 05:04
-----

Tópicos que criei

REQUISIÇÕES / SOLICITAÇÕES

15 maio 2017 - 07:59

Eu tenho ideia de mover esse tópico mais tarde para um espaço único, como se fosse um outro sub fórum.

A ideia é simples: se você quer ver um artigo, um post, sobre um determinado tema relacionado ao AutoIt, deixe a sua solicitação abaixo:

 

 

Por exemplo:

 

Gostaria de uma explicação de GDI+.

Talvez alguém com vontade de fazer um post (ou vídeo) legal sobre o tema, aproveite a dúvida de alguém e crie o post.

 

Gostaria de pedir uma aula de PA e PG no AutoIt.

E por que não? As vezes o aluno não entende a matemática da forma tradicional, porque não dar um empurrãozinho com o AutoIt?

 

Logicamente, vou cuidar pessoalmente dessa categoria, vou editá-la para ficar da melhor forma possível, mantendo os créditos dos colaboradores/autores, mas principalmente com a ideia principal de organizar e facilitar o acesso ao conhecimento.

 

Outra coisa, eu não vou fazer tudo sozinho. Fulano pede, Beltrano cria, eu organizo (ou os outros Admins/Mods organizam também), não é um trabalho do exercito de um homem só, a proposta é trabalho comunitário.

 

A ideia num futuro próximo, seria fazer um compilado em um arquivo HELP, um trabalho colaborativo, com um pedaço do conhecimento de cada um.

 

Então, se você tem um pedido, uma requisição ou solicitação de conhecimento, manifeste-se!


Jogo de mancala

07 maio 2017 - 11:09

Senhores,

 

Segue jogo de Mancala em AutoIt.

Falta desenvolver o código para verificar o ganhador.

Em desenvolvimento.


Espanta cachorro

07 fevereiro 2017 - 11:34

A intenção deste tópico é reproduzir o "espanta cachorro" do Newton C. Braga com uma pequena adaptação para o Arduino.

 

Problema:
Tenho uma vizinha, que possui duas cadelas: a LadyGaga e a TeteEspindola.
A LadyGaga é quieta... Não tem iniciativa alguma para latir.
A maldita da TeteEspindola, late toda a vez que a língua toca o céu da boca.
O latido dela é alto, chato, irritante...

E cansei pedir educadamente que a dona tivesse uma atitude mais efetiva.
Não posso mentir, melhorou. Mas quando ela sai de casa, ela deixa a Lady e a Tete soltas... Então começa o inferno sonoro!
A TeteEspindola começa a latir freneticamente por qualquer coisa, e então alguns minutos depois, a LadyGaga vai na onda!
 

Passei algumas noites vendo depoimentos de internautas no YouTube sobre o problema, alguns são engraçados, outros dão medo...

 

Então depois de ver como os internautas lidam com o problema, achei uma solução que vale a pena ser testada.
Nos estados unidos, existe um equipamento similar para esta função, que é vendido nas lojas, logicamente, o valor é super acessível.
No Brasil, é um verdadeiro assalto o valor do equipamento.

Então resolvi levar adiante esta ideia, com o apoio moral do @Antoni-ag.

 

Mas porque usar o Arduino?

Para este microcontrolador ter a capacidade de emitir (ligar o circuito) somente quando há excesso de barulho, evitando assim que o "espanta cachorro" fique ligado permanentemente e que não seja necessário uma interação humana para acionar.

 

Interessante também, seria criar um log de quantas vezes houve o latido, e quantas vezes foi acionado o "espanta cachorro".

Isso seria útil para descobrir qual frequência é mais "útil" na tentativa de fazer o cachorro se assustar.

Acredito, que nem todas as frequências tenham o mesmo efeito em cachorros diferentes.

 

Pendências:

  • Encontrar um twitter no mercado nacional de custo acessível
  • Verificar se é possível o Arduino controlar o tipo de frequência que o circuito irá gerar.

 

A quem interessar possa:
Gosto de bicho, e me preocupo em realizar este experimento de forma que não maltrate o animal.
Mas tudo tem limite, e há pessoas que tem cachorro que são verdadeiros folgados e preguiçosos, que não se preocupam nem um pouco com o ouvido do vizinho (ou o nariz).


formas de entrada de dados

06 janeiro 2017 - 11:13

Olá,

 

Faz tempo que desejo criar uma forma mais fácil de criar uma GUI (Graphic User Interface ou apenas "Janela") no AutoIt.

No AutoIt, quando você quer criar um formulário de entrada de dados, é tudo muito manual, e o que pretendo é tentar achar uma forma de facilitar a criação de um formulário para entrada ou edição de dados, e para isso, preciso saber as formas de entrada de dados mais utilizadas, eu listei estas:

  • GUICtrlCreateButton
  • GUICtrlCreateCheckbox
  • GUICtrlCreateCombo
  • GUICtrlCreateDate
  • GUICtrlCreateEdit
  • GUICtrlCreateInput
  • GUICtrlCreateLabel
  • GUICtrlCreateRadio
  • GUICtrlCreateSlider

 

Com as funções acima, acredito que com a combinação das funções acima, seja possível fazer criar quase a maioria dos formulários.

Peço uma ajuda nesse sentido.

 

Há mais alguma função que estou esquecendo?


Menu de contexto

11 dezembro 2016 - 10:08

Bom dia!

 

Existe um conjunto de UDF muito interessante: as funções de menu de contexto ou ContextMenu.

 

Sugiro quanto lhe sobrar um tempo, abra exemplo por exemplo no HELP do AutoIt e dê um olhada, há exemplos muito sugestivos.

 

Tá, mas o que é um menu de contexto?

 

No meu entendimento, menu de contexto, é aquela caixinha com opções para clicar, que se abre com o botão direito do mouse.

 

Veja este exemplo:

 

https://www.autoitsc...CreatePopup.htm

 

[Módulo 1]

  1.  
  2. #include <GUIConstantsEx.au3>
  3. #include <GuiMenu.au3>
  4. #include <WinAPI.au3>
  5. #include <WindowsConstants.au3>
  6.  
  7. Global Enum $e_idOpen = 1000, $e_idSave, $e_idInfo
  8.  
  9. Func Example()
  10.     ; Create GUI
  11. ; aqui ele cria uma GUI ([G]raphic [U]ser [I]nterface) bem básica (e nem precisa mais do que isso)
  12.     GUICreate("Menu", 400, 300)
  13.     GUISetState(@SW_SHOW)
  14.  
  15.     ; Register message handlers
  16. ; preste a atenção nestes comandos "GUIRegisterMsg"
  17.  
  18. ; o que é um GuiRegisterMsg?
  19. ; bem, vou aproveitar a explicação de outras linguagens
  20. ; é um "listner"
  21. ; hein? cuma? isso é di cume?
  22. ; carma jovem gafanhoto, dá um olhadinha aqui:
  23. ; https://www.google.com.br/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=o%20que%20%C3%A9%20um%20listner
  24. ; 
  25. ; entendeu? Nâo? eu também demorei pra entender, sugiro ir ali no link e ler mais uma vez ^^
  26. ; mas então, você informa que toda a vez que aconteça uma ação do tipo $WM_CONTEXTMENU ele
  27. ; chama a função "WM_CONTEXTMENU"
  28.     GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
  29.  
  30. ; as funções  de $WM_COMMAND são muito legais! eu falo mais sobre elas em outro post
  31. GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
  32.  
  33.     ; Loop until the user exits.
  34. ; aqui está o loop para manter a janela ativa
  35.     Do
  36.     Until GUIGetMsg() = $GUI_EVENT_CLOSE
  37. EndFunc   ;==>Example
  38.  
  39. ; Handle WM_COMMAND messages
  40. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  41.     #forceref $hWnd, $iMsg, $lParam
  42.     Switch $wParam
  43.         Case $e_idOpen
  44.             _WinAPI_ShowMsg("Open")
  45.         Case $e_idSave
  46.             _WinAPI_ShowMsg("Save")
  47.         Case $e_idInfo
  48.             _WinAPI_ShowMsg("Info")
  49.     EndSwitch
  50. EndFunc   ;==>WM_COMMAND
  51.  
  52. ; Toda a vez que você clica dentro da janela do AutoIt com botão direito, um evento de $WM_COMMAND é acionado,
  53. ; e a função "WM_COMMAND" é chamada
  54. ; neste momento eu não tenho conhecimento para dar uma boa explicação sobre os parâmetros $hWnd, $iMsg, $wParam, $lParam
  55. ; então não vou me aprofundar sobre estas variáveis
  56. ; Mas o que acontece neste momento, é que ele cria um menu popup
  57. ; e popula este menu popup com as funções Open, Save e Info
  58. ; exibe o menu para você
  59. ; e finalmente, destroi o menu
  60.  
  61. ; [ATENÇÃO]
  62. ; um elemento _GUICtrlMenu_InsertMenuItem é um elemento de mesma função que um GuiCtrlCreateButton
  63. ; pois afinal, você clica nele para executar uma função
  64.  
  65. ; vamos falar diferente, quando você clica no menu de contexto $e_idOpen, você criou um listner $WM_COMMAND
  66. ; que toda vez que for acionado, chamará a função "WM_COMMAND"
  67.  
  68. ; chegando no "WM_COMMAND", ele vai fazer um Switch com o $wParam para identificar qual dos parâmetros ($e_idOpen, $e_idSave, $e_idInfo) foi acionado
  69. ; encontrando o Case correto, ele executa a função
  70. Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
  71.     #forceref $hWnd, $iMsg, $lParam
  72.     Local $hMenu
  73.  
  74.     $hMenu = _GUICtrlMenu_CreatePopup()
  75.     _GUICtrlMenu_InsertMenuItem($hMenu, 0, "Open", $e_idOpen)
  76.     _GUICtrlMenu_InsertMenuItem($hMenu, 1, "Save", $e_idSave)
  77.     _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
  78.     _GUICtrlMenu_InsertMenuItem($hMenu, 3, "Info", $e_idInfo)
  79.     _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
  80.     _GUICtrlMenu_DestroyMenu($hMenu)
  81.     Return True
  82. EndFunc   ;==>WM_CONTEXTMENU
  83.  
  84. #cs
  85. Perceba que as variáveis para utilizar um menu de contexto, obrigatoriamente tem que ser globais
  86. e a primeira variável sempre começa com um valor alto
  87. Cada elemento de GUI (GuiCtrlCreateButton, GuiCtrlCreateLabel, GuiCtrlCreateTreeView, etc) que você usa, recebe um id
  88. Por isso essa opções do menu de contexto devem começar com valor alto,
  89. justamente para que não haja o mesmo id de um menu de contexto com um elemento de GUI já criado por você
  90. Global Enum $e_idOpen = 1000, $e_idSave, $e_idInfo
  91. #ce
  92.  
Parabéns jovem gafanhoto, você acaba de criar e entender o seu primeiro menu de contexto, agora vamos para o módulo 2!
 
 
[Módulo 2]
 
No primeiro exemplo, criamos apenas um menu de contexto para a Gui, mas e para outros elementos?
Com o exemplo que vou mostrar agora, é possível criar um menu de contexto para qualquer elemento.
Tá certo que não faz muito sentido criar um menu de contexto para um botão, mas faz sentido para uma TreeView ou ListView.
Mas nada te impede que você crie um menu de contexto para um botão, o conhecimento vale para ambos.
 
Vamos pegar o mesmo exemplo anterior, e observe as modificações:
  1.  
  2. #include <GUIConstantsEx.au3>
  3. #include <GuiMenu.au3>
  4. #include <WinAPI.au3>
  5. #include <WindowsConstants.au3>
  6.  
  7. Global Enum $e_GuiOpen = 1000, $e_GuiSave, $e_GuiInfo, $e_TvAdd
  8. Global $hGui, $iTreeView, $hTreeView
  9.  
  10. Example()
  11.  
  12. Func Example()
  13. ; Create GUI
  14. $hGui = GUICreate("Menu", 400, 300)
  15.  
  16. $iTreeView = GUICtrlCreateTreeView(10, 10, 120, 240)
  17. $hTreeView = GUICtrlGetHandle($iTreeView)
  18. GUISetState(@SW_SHOW)
  19.  
  20. ; Register message handlers
  21. GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
  22. GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
  23.  
  24. ; Loop until the user exits.
  25. Do
  26. Until GUIGetMsg() = $GUI_EVENT_CLOSE
  27. EndFunc   ;==>Example
  28.  
  29. ; Handle WM_COMMAND messages
  30. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  31. #forceref $hWnd, $iMsg, $lParam
  32. Switch $wParam
  33. Case $e_GuiOpen
  34. _WinAPI_ShowMsg("Gui Open")
  35. Case $e_GuiSave
  36. _WinAPI_ShowMsg("Gui Save")
  37. Case $e_GuiInfo
  38. _WinAPI_ShowMsg("Gui Info")
  39. Case $e_TvAdd
  40. _WinAPI_ShowMsg("TreeView Add")
  41. EndSwitch
  42. EndFunc   ;==>WM_COMMAND
  43.  
  44. ; Handle WM_CONTEXTMENU messages
  45. Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
  46. #forceref $hWnd, $iMsg, $lParam
  47. Local $hMenu = _GUICtrlMenu_CreatePopup()
  48.  
  49. Switch $wParam
  50. Case $hGui
  51. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "GUI Open", $e_GuiOpen)
  52. _GUICtrlMenu_InsertMenuItem($hMenu, 1, "GUI Save", $e_GuiSave)
  53. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
  54. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "GUI Info", $e_GuiInfo)
  55. Case $hTreeView
  56. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "TreeView Add", $e_TvAdd)
  57. EndSwitch
  58.  
  59. _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
  60. _GUICtrlMenu_DestroyMenu($hMenu)
  61. Return True
  62. EndFunc   ;==>WM_CONTEXTMENU
  63.  
Há algo muito importante que deve ser observado, quando você cria uma GUI, você utiliza um comando GuiCtrlCreate, e ele retorna o "handle" da janela, algo do tipo 0x00123456.
Quando você cria um elemento (Button, Label, TreeView), no momento da criação ele retorna o id do elemento, algo como 1, 2, 3, 4.
Quando você cria um _GuiCtrlTreeView_Create, _GuiCtrlTreeView_Item, ele retorna um "handle", do tipo 0x00123456.
 
Percebeu que existe GuiCtrlCreateTreeView e _GuiCtrlTreeView_Create?
Criam a mesma coisa, mas retornam coisas diferentes, um retorna id, outro retorna handle.
Por isso eu coloque no exemplo as linhas.
ConsoleWrite("$hGui[" & $hGui & "] IsPtr[" & IsPtr($hGui) & "]" & @LF)
ConsoleWrite("$iTreeView[" & $iTreeView & "] IsPtr[" & IsPtr($iTreeView) & "]" & @LF)
ConsoleWrite("$hTreeView[" & $hTreeView & "] IsPtr[" & IsPtr($hTreeView) & "]" & @LF)
Quando o IsPtr é 1(um), é um handle, quando o IsPtr é 0(zero), é um id.
 
Estou chamado a atenção neste momento, um dia você deve ter tentado trabalhar com funções mais avançadas do AutoIt, mas a função exigia um handle, mas você por desconhecimento passava um id.
Não vai funcionar mesmo.
As vezes, nem sempre, a função possui algo do tipo:
  1.  
  2. If Not IsPtr($handle) Then $handle = GuiCtrlGetHandle($handle)
 
Por esse motivo, eu criei TreeView com o $iTreeView, e na linha abaixo, eu utilizei:
  1.  
  2. $hTreeView = GUICtrlGetHandle($iTreeView)
 
Não cabe agora explicar explicar quando utilizar um id ou handle, cabe a você ler o help da função, e ver que tipo de parâmetro ela necessita para funcionar corretamente.
 
Todo esse blá, blá, blá, foi para chegar no WM_CONTEXTMENU
  1.  
  2. Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
  3. #forceref $hWnd, $iMsg, $lParam
  4. Local $hMenu = _GUICtrlMenu_CreatePopup()
  5.  
  6. Switch $wParam
  7. Case $hGui
  8. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "GUI Open", $e_GuiOpen)
  9. _GUICtrlMenu_InsertMenuItem($hMenu, 1, "GUI Save", $e_GuiSave)
  10. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
  11. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "GUI Info", $e_GuiInfo)
  12. Case $hTreeView
  13. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "TreeView Add", $e_TvAdd)
  14. EndSwitch
  15.  
  16. _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
  17. _GUICtrlMenu_DestroyMenu($hMenu)
  18. Return True
  19. EndFunc   ;==>WM_CONTEXTMENU
Eu inseri um Switch...Case no $wParam, para verificar de qual handle vem o clique, se vem da $hGui ou $hTreeView.
Poderia ser qualquer elemento, um $hButton por exemplo.
 
E para cada handle diferente, ele exibe um menu de contexto diferente.
 
Funcionou para você?
 
Sim né!
 
Que bom!
 
Tem certeza de que funcionou?
 
Você clicou em todos os botões de todos os menus de contexto para ter certeza de que funciona?
 
Ah... Tem um bugzinho aqui...
 
Onde?
 
O menu de contexto da TreeView aparece, mas quando eu clico, sabe a janelinha do "Information"? Não aparece para o TreeView, somente para a Gui.
 
Sério? "Nussa"! Que mancada!
 
Eheheheeh, eu não sei explicar, porque o menu de contexto da TreeView não chama o WM_COMMAND, como deveria funcionar com a Gui.
Ele está la, mas o $wParam da $e_TvAdd nunca é acionado.
  1.  
  2. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  3. #forceref $hWnd, $iMsg, $lParam
  4. Switch $wParam
  5. Case $e_GuiOpen
  6. _WinAPI_ShowMsg("Gui Open")
  7. Case $e_GuiSave
  8. _WinAPI_ShowMsg("Gui Save")
  9. Case $e_GuiInfo
  10. _WinAPI_ShowMsg("Gui Info")
  11. Case $e_TvAdd
  12. _WinAPI_ShowMsg("TreeView Add")
  13. EndSwitch
  14. EndFunc   ;==>WM_COMMAND
 
Mas há um "hack" que eu descobri lendo a descrição da função _GUICtrlMenu_TrackPopupMenu:
 
_GUICtrlMenu_TrackPopupMenu ( $hMenu, $hWnd [, $iX = -1 [, $iY = -1 [, $iAlignX = 1 [, $iAlignY = 1 [, $iNotify = 0 [, $iButtons = 0]]]]]] )
 
O parâmetro $iNotify, esse é o segredo!
Então eu modifiquei um pouco o WM_CONTEXTMENU, ficou assim:
  1.  
  2. Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
  3. #forceref $hWnd, $iMsg, $lParam
  4. Local $hMenu = _GUICtrlMenu_CreatePopup()
  5. Local $iNotify = 0
  6. Switch $wParam
  7. Case $hGui
  8. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "GUI Open", $e_GuiOpen)
  9. _GUICtrlMenu_InsertMenuItem($hMenu, 1, "GUI Save", $e_GuiSave)
  10. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
  11. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "GUI Info", $e_GuiInfo)
  12. _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
  13. Case $hTreeView
  14. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "TreeView Add", $e_TvAdd)
  15. $iNotify = _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam, -1, -1, 1, 1, 2)
  16. _SendMessage($hGui, 273, $iNotify, 0)
  17. EndSwitch
  18. _GUICtrlMenu_DestroyMenu($hMenu)
  19. Return True
  20. EndFunc ;==>WM_CONTEXTMENU
  21.  
  1.  
  2. $iNotify = _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam, -1, -1, 1, 1, 2)
  3. _SendMessage($hGui, 273, $iNotify, 0)
Se você observar, no case $hGui, está:
  1.  
  2. _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
E no case $hTreeView:
  1.  
  2. $iNotify = _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam, -1, -1, 1, 1, 2)
-1, -1, 1, 1 são os parâmetros default da função, e o $iNotify foi alterado de 0 para 2, pois assim a função _GUICtrlMenu_TrackPopupMenu passa a retornar valor em uma variável, eu aproveitei  mesmo nome, $iNotify
 
Na WM_CONTEXTMENU está quase pronto, e para isso eu utilizei um _SendMessage para forçar o listner WM_COMMAND
_SendMessage($hGui, 273, $iNotify, 0)
 
Você precisa mandar uma mensagem da $hGui, com o $wParam contendo o valor na $iNotify, o $lParam pode ser 0, o problema, era o $iMsg ou o 273...
 
Mano do céu! Da onde eu ia adivinhar esse valor?
 
Confesso que eu passei gelei nesse momento...
 
Mas daí, inseri uma linhazinha marota lá no WM_COMMAND
  1.  
  2. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  3. #forceref $hWnd, $iMsg, $lParam
  4. ConsoleWrite("WM_COMMAND( $hWnd=" & $hWnd & ", $iMsg=" & $iMsg & ", $wParam=" & $wParam & ", $lParam=" & $lParam & ")" & @LF)
Rodei o script, usei o menu de contexto da $hGui, e touché! $iMsg = 273.
Atualizei o WM_CONTEXTMENU, e funcionou o WM_COMMAND da TreeView.
  1.  
  2. _SendMessage($hGui, 273, $iNotify, 0)
 
Deixo claro, que talvez não seja a melhor forma acionar o WM_COMMAND, mas neste momento funciona.
 
Bem, é isso pe-pessoal! Até mais!
 

Exemplo final:

  1.  
  2. #include <GUIConstantsEx.au3>
  3. #include <GuiMenu.au3>
  4. #include <WinAPI.au3>
  5. #include <WindowsConstants.au3>
  6.  
  7.  
  8. Global Enum $e_GuiOpen = 1000, $e_GuiSave, $e_GuiInfo, $e_TvAdd
  9. Global $hGui, $iTreeView, $hTreeView
  10.  
  11.  
  12. Example()
  13.  
  14.  
  15. Func Example()
  16. ; Create GUI
  17. $hGui = GUICreate("Menu", 400, 300)
  18. ConsoleWrite("$hGui[" & $hGui & "] IsPtr[" & IsPtr($hGui) & "]" & @LF)
  19.  
  20.  
  21. $iTreeView = GUICtrlCreateTreeView(10, 10, 120, 240)
  22. ConsoleWrite("$iTreeView[" & $iTreeView & "] IsPtr[" & IsPtr($iTreeView) & "]" & @LF)
  23. $hTreeView = GUICtrlGetHandle($iTreeView)
  24. ConsoleWrite("$hTreeView[" & $hTreeView & "] IsPtr[" & IsPtr($hTreeView) & "]" & @LF)
  25. GUISetState(@SW_SHOW)
  26.  
  27.  
  28. ; Register message handlers
  29. GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
  30. GUIRegisterMsg($WM_CONTEXTMENU, "WM_CONTEXTMENU")
  31.  
  32.  
  33. ; Loop until the user exits.
  34. Do
  35. Until GUIGetMsg() = $GUI_EVENT_CLOSE
  36. EndFunc   ;==>Example
  37.  
  38.  
  39. ; Handle WM_COMMAND messages
  40. Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
  41. #forceref $hWnd, $iMsg, $lParam
  42. ConsoleWrite("WM_COMMAND( $hWnd=" & $hWnd & ", $iMsg=" & $iMsg & ", $wParam=" & $wParam & ", $lParam=" & $lParam & ")" & @LF)
  43. Switch $wParam
  44. Case $e_GuiOpen
  45. _WinAPI_ShowMsg("Gui Open")
  46. Case $e_GuiSave
  47. _WinAPI_ShowMsg("Gui Save")
  48. Case $e_GuiInfo
  49. _WinAPI_ShowMsg("Gui Info")
  50. Case $e_TvAdd
  51. _WinAPI_ShowMsg("TreeView Add")
  52. EndSwitch
  53. EndFunc   ;==>WM_COMMAND
  54.  
  55.  
  56. ; Handle WM_CONTEXTMENU messages
  57. Func WM_CONTEXTMENU($hWnd, $iMsg, $wParam, $lParam)
  58. #forceref $hWnd, $iMsg, $lParam
  59. Local $hMenu = _GUICtrlMenu_CreatePopup()
  60. Local $iNotify = 0
  61. Switch $wParam
  62. Case $hGui
  63. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "GUI Open", $e_GuiOpen)
  64. _GUICtrlMenu_InsertMenuItem($hMenu, 1, "GUI Save", $e_GuiSave)
  65. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "", 0)
  66. _GUICtrlMenu_InsertMenuItem($hMenu, 3, "GUI Info", $e_GuiInfo)
  67. _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam)
  68. Case $hTreeView
  69. _GUICtrlMenu_InsertMenuItem($hMenu, 0, "TreeView Add", $e_TvAdd)
  70. $iNotify = _GUICtrlMenu_TrackPopupMenu($hMenu, $wParam, -1, -1, 1, 1, 2)
  71. _SendMessage($hGui, 273, $iNotify, 0)
  72. EndSwitch
  73. _GUICtrlMenu_DestroyMenu($hMenu)
  74. Return True
  75. EndFunc   ;==>WM_CONTEXTMENU