Invertendo Textos

Introdução:
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.