Ir para conteúdo


Fábio iGames

Cadastrado: 10 Dez 2015
Offline Última atividade: Ontem, 04:27
-----

Posts que fiz

No tópico: Trabalhando com GDI+ exemplo

14 junho 2017 - 01:54

Eu fiz esse exemplo simples para mostrar um modo de trabalhar com GDI+. Eu colquei para o programa só redesenhar quando executar uma determinada função, assim evitando o consumo excessivo de memoria.

Eu upei a barra, mas não consegui upar o background (skin.png), mas vc pode colocar qualer imagem para ver o funcionamento.

 

  1.  
  2. #include <GDIPlus.au3>
  3. #include <WindowsConstants.au3>
  4. #include <Misc.au3>
  5. #include <File.au3>
  6.  
  7.  
  8. ;~ -ATENÃÃO-
  9. ;~ Coloquei uma lista de ROMS simples que mostra só a ROMS selecionada nas 10 colunas. (Motivo- manter o código pequeno para não complicar muito o exemplo)
  10.  
  11.  
  12. _GDIPlus_Startup()
  13.  
  14. Const $TAMANHO[2] = [800,600]
  15. Const $BARRA = "select.png" ;IMAGEM DA BARRA DE SELEÃÃO
  16. Const $BACKGROUND = "skin.png" ;IMAGEM DE FUNDO DO PROGRAMA
  17. Const $PATHROMS = "roms" ;ARQUIVOS ROMS - ZIP
  18. Const $ROMS = _FileListToArrayRec($PATHROMS, "*.zip", 1, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_NOPATH)
  19. MsgBox("","ERRO!", 'Indique uma pasta com arquivos ".zip"')
  20.  
  21. ;BARRA DE SELEÃÃO
  22. Local $TOP_BAR = 115
  23. Const $LEFT_BAR = 28
  24. Const $W_BAR = 321
  25. Const $H_BAR = 49
  26.  
  27. Const $ESPACO_BAR = 41
  28. Const $CONST_BAR = $TOP_BAR
  29. Const $FINAL_BAR = 484
  30.  
  31. Local $POS_ITEM = 1
  32. Const $POS_ITEM_MAX = $ROMS[0]
  33. Const $MAX_ITENS = 10
  34.  
  35. ;LISTA DE JOGOS
  36. Local $TOP_LIST = 123
  37. Const $LEFT_LIST = 28
  38. Const $W_LIST = 321
  39. Const $H_LIST = 49
  40.  
  41. Const $ESPACO_LIST = 41
  42. Const $CONST_LIST = $TOP_LIST
  43. Const $FINAL_LIST = 484
  44. ;============>
  45. Global $GUI = GUICreate("Example", $TAMANHO[0], $TAMANHO[1],-1,-1,$WS_POPUP)
  46. ;============>
  47. Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($GUI)
  48. Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($TAMANHO[0],$TAMANHO[1] , $hGraphic)
  49. Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
  50. Global $hImageBg = _GDIPlus_ImageLoadFromFile($BACKGROUND)
  51. Global $hImageTop = _GDIPlus_ImageLoadFromFile($BARRA)
  52.  
  53. ;TEXTO
  54. Global $hFormat = _GDIPlus_StringFormatCreate()
  55. Global $hBrush_Branco = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
  56. Global $hFamily = _GDIPlus_FontFamilyCreate("impact")
  57. Global $hFont = _GDIPlus_FontCreate($hFamily, 18, 0)
  58. ;LAYOUT -0/100
  59. Global $tLayout = _GDIPlus_RectFCreate(740,25)
  60.  
  61.  
  62. Redraw()
  63. Case GUIGetMsg() = -3
  64. _exit()
  65. Case _IsPressed(26)
  66. If ($TOP_BAR > $CONST_BAR and $TOP_BAR <= $FINAL_BAR) Then $TOP_BAR-=$ESPACO_BAR ;CIMA
  67. if $POS_ITEM > 1 then $POS_ITEM-=1
  68. Redraw()
  69. Case _IsPressed(28)
  70. if ($TOP_BAR >=$CONST_BAR and $TOP_BAR < $FINAL_BAR) Then $TOP_BAR+=$ESPACO_BAR ;BAIXO
  71. if $POS_ITEM < $POS_ITEM_MAX Then $POS_ITEM+=1
  72. Redraw()
  73.  
  74.  
  75. Func Redraw()
  76. ;Limpa tudo
  77. _GDIPlus_GraphicsClear($hBuffer)
  78. ;Background
  79. _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageBg, 0, 0,$TAMANHO[0], $TAMANHO[1])
  80. ;Barra
  81. _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageTop, $LEFT_BAR, $TOP_BAR,$W_BAR,$H_BAR)
  82. ;Texto
  83. _GDIPlus_StringFormatSetAlign($hFormat, 2)
  84. _GDIPlus_GraphicsDrawStringEx($hBuffer,$POS_ITEM & "/" & $POS_ITEM_MAX , $hFont , $tLayout , $hFormat, $hBrush_Branco)
  85.  
  86.  
  87. ;LAYOUT LISTA
  88. _GDIPlus_StringFormatSetAlign($hFormat, 1)
  89. For $i=1 to $MAX_ITENS
  90. $tLayout_Lista = _GDIPlus_RectFCreate($LEFT_LIST,$TOP_LIST,$W_LIST,$H_LIST)
  91. _GDIPlus_GraphicsDrawStringEx($hBuffer,$ROMS[$POS_ITEM], $hFont , $tLayout_Lista , $hFormat, $hBrush_Branco)
  92. $TOP_LIST+=$ESPACO_LIST
  93. $TOP_LIST=$CONST_LIST
  94. ;Desenha o grafico
  95. _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
  96.  
  97. Func _exit()
  98. GUIDelete($GUI)
  99. _GDIPlus_ImageDispose($hImageBg)
  100. _GDIPlus_ImageDispose($hImageTop)
  101. _GDIPlus_Shutdown()

 

 

Parabéns Pedro  :up:  , ficou muito bom , você está pegando o jeito com GDI+. 


No tópico: Interceptar parametros de uma chamada de dll

01 junho 2017 - 11:05

Olá mutleey e Pedro Pinheiro , eu uso o mesmo software que o joelson0007 recomendou no chat.

 

 DLL Export Viewer

 

Link:http://www.nirsoft.n...ort_viewer.html

 

Ai é só ver as funções e pesquisar no google como o Pedro disse que faz , eu faço a mesma coisa.  ;)


No tópico: REQUISIÇÕES / SOLICITAÇÕES

16 maio 2017 - 12:44

@luigi f

 

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.

 

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!

 

@Luigi amei essa ideia, com certeza vai ser ótimo essa organização, é por isso que foi bem merecida esse novo cargo.

 

Pode começar pelo GDi+ ai que vai ser bom D+ da conta.  


No tópico: Remapear teclas

11 maio 2017 - 03:14

Olá Belini.

 

Entenda que o ScanCode é permanente, ou seja, não é apenas uma questão de mudar e pronto, fica mudado até nova ordem.

 

É o contrário, a cada boot o SO lê o ScanCode e remapeia as teclas ali contidas, portanto para mudar 2 ou mais teclas, só colocá-las na lista do ScanCode ampliando ou modificando a lista.

 

Usando o mesmo exemplo de antes (P pelo A):
 
00 00 00 00 -> sempre zeros
00 00 00 00 -> sempre zeros
02 00 00 00 -> 2 definições (1 tecla e 1 NULL)
1E 00 18 00 -> troca letra P pela letra A (observe que é primeiro a tecla final depois a inicial)
00 00 00 00 -> sempre zeros (NULL)
 
Agora modificando para incluir mais teclas:
 
00 00 00 00 -> sempre zeros
00 00 00 00 -> sempre zeros
02 00 00 00 -> 5 definições (4 teclas e 1 NULL)
1E 00 18 00 -> troca letra P pela letra A
YY 00 XX 00 -> troca X pela Y
++ 00 11 00 -> troca 1 pelo +
GG 00 00 00 -> desativa o G
00 00 00 00 -> sempre zeros (NULL)
 

Não esqueça de modificar a 3a linha que contém a quantidade de definições no ScanCode inteiro.

 

A parte chata da brincadeira é que para remover uma tecla, por exemplo, tem que remover a linha dela MAS preservar o resto do ScanCode e ajustar a 3a linha.

 

Ok?

 

@Manimal muito bom.

 

Vai ser bem útil esse esquema nesse momento pra mim. 


No tópico: Resolução e SDL.dll

09 maio 2017 - 12:12

Por muito tempo eu sempre tive a curiosidade de colocar uma GUI em fullscreen, ai um tempo atrás eu achei o Qres (programa que altera a resolução do pc). Ai de boa. A resoluçao mudava de acordo com a GUI do programa, mas e quando o programa é fechado inesperadamente? Como fica? Ai o usuário vai ter de voltar a resolução antiga manualmente. Ai eu pensei...porque não usar uma DLL para isso?..dei uma olhada nas dlls de alguns programas e acabei encontrando a SDL.DLL. Olhando suas funcoes eu encontrei SDL_wm_toggleFullscreentoggleFullscreen. Alguem ja estudou sobre essa DLL? Queria escrever mais, mas o celular não deixa por causa da limitacao de caracteres

 

Pedro pode continuar usando o Qres de boa ai.

 

Oque você tem que fazer é usar a função: OnAutoItExitRegister e criar variáveis que pegam a resolução da tela antes do programa abrir, ai você guarda e usa essas variáveis toda vez que o programa  fechar ou sair ou fechar inesperadamente como falou , a resolução volta para oque era antes de abrir o programa.

 

Exemplo:

  1.  
  2. ; Coloca no incio do Script.
  3.  
  4. OnAutoItExitRegister("_Fechar") ; Registra um Função Para Ser Chamada Quando o Programa Fechar.
  5. Global $ResH_Atual = @DesktopWidth ; Guarda a Resolução Horizontal Antes do Programa Abrir.
  6. Global $ResV_Atual = @DesktopHeight ; Guarda a Resolução Vertical Antes do Programa Abrir.
  7.  
  8. Func _Fechar()
  9. OnAutoItExitUnRegister("_Sair") ; Desregistra um Função Que Foi Chamada Com a Função OnAutoItExitRegister.
  10. If @DesktopWidth <> $ResH_Atual Then  ==> Aqui Você Chama a FUNÇÃO Pra Chamar o Qres e Voltar Para o Que Era Antes.
  11. Exit(0)
  12. EndFunc
  13.  

Pronto , oque faltava mesmo era só a Função OnAutoItExitRegister.