Um leitor me enviou uma pergunta que acredito ser digna de um tutorial... não sabia como fazer inicialmente, mas o também administrador da MMFM e amigo meu, Matheus290, enviou-me seu source de um inversor de links.
Trata-se de inverter textos no MMF2. Por exemplo: 123456789 ficará 987654321, assim como ASD ficará DSA.
Objetos necessários:
• 1 EditBox
• 1 Rich Edit Object
• 1 Button
• 1 Counter
Os Eventos:
Serão apenas 3 eventos. O primeiro serve para ativar a inversão. O segundo, é a inversão propriamente dita. E o terceiro, para desligar a inversão quando esta acabar.
Vamos fazer a ativação da inversão.
Button clicked?
Set Counter to GetNChars( "Rich Edit Object" )
Goto character number value( "Counter" )
Set text ""
(Button) Set internal flag 0 on
Calma, vou explicar. Quando o jogador clicar no botão, as ações irão acontecer. Elas são quatro:
• Set Counter to GetNChars( "Rich Edit Object" )
Irá definir o valor do Counter para o número de caracteres do Rich Edit.
• Goto character number value( "Counter" )
Vai até o caractere representado pelo valor do Counter.
• Set text ""
Esvazia a EditBox
• (Button) Set internal flag 0 on
Liga a flag 0 do botão. A inversão ocorrerá enquanto esta flag estiver ligada.
Muito bem. Vamos, então, fazer a inversão em si.
(Button): internal flag 0 is on
Subtract 1 from Counter
Set text Edittext$( "Edit Box" )+GetText$( "Rich Edit Object", value( "Counter" ), value( "Counter" )+1)
Aqui, as ações ocorrerão se a flag 0 do botão estiver ligada. Neste caso, são apenas duas ações:
• Subtract 1 from Counter
Esta irá subtrair 1 do Counter enquanto a flag estiver ligada, ao mesmo tempo que a inversão acontece. Entendará isso melhor quando ler sobre a próxima ação.
• Set text Edittext$( "Edit Box" )+GetText$( "Rich Edit Object", value( "Counter" ), value( "Counter" )+1)
Essa ação fará com que enquanto a flag 0 estiver ligada, o texto da EditBox vá se formando, a partir de seu valor atual (para armazenar os caracteres já invertidos) somados ao caractere do Rich Edit representado pelo valor do Counter. Como o Counter está sempre sendo subtraído, o caractere adicionado vai sendo sempre menos um, conforme ele vai adicionando! Meio confuso, mas veja bem... No texto 123456789. O caractere representado pelo Counter, inicialmente é o 9. Entretanto, ao mesmo tempo que o 9 é adicionado à EditBox, o valor do Counter é subtraído em um, o que significa que o caractere representado, agora, pelo Counter é o anterior, ou seja, 8. E isso vai se repetindo até não restar nenhum caractere e o Counter chegar a 0!
A primeira parte da fórmula, Edittext$( "Edit Box" ), você encontra já de cara na EditBox, quando usa a opção Retrieve data from an object. Ela é Get Text. A segunda parte, entretanto, GetText$( "Rich Edit Object", value( "Counter" ), value( "Counter" )+1), você deve ir no Rich Edit, e em Text > Get Text. E você vai ter de configurar a opção.
O que vai aparecer é o seguinte:
GetText$( "Rich Edit Object", >First character number<, >Second character number<)
Troque >First character number< pelo valor do Counter. E troque >Second character number< pelo valor do Counter adicionado a 1. First character number representa o início do caractere, e Second character number, o fim deste caractere. Isso significa que o caractere compreendido entre estes dois intervalos, é o que será adicionado à EditBox.
Talvez seja um pouco confuso, mas procure entender, em vez de simplesmente copiar... vale a pena ;p. Mas enfim... agora, vamos ao último evento! Desativar a inversão!
(Counter) <= 0
(Button) Set internal flag 0 off.
Acho que nem tem o que explicar... se o Counter for igual ou menor que 0 (o que significa que não existem mais caracteres a serem invertidos), desligar-se-á a flag 0 do botão, o que significa que a inversão será interrompida.
--//--
Bom, é isso aí... me pergunto, ainda, em que situação eu precisaria fazer algo assim... mas pra quem precisa saber, aí está :D.
Agradeço, mais uma vez, ao Matheus290. Foi graças a ele que aprendi a fazer isso daí. Agradecimentos também ao Alves, por ter tentado dar uma mãozinha.
Flw.