brink@ero Posted October 15, 2006 at 12:11 AM Report #57352 Posted October 15, 2006 at 12:11 AM Bem eu sei que já devia ter feito isto à bastante tempo, enfim... Eu fiz estes programas em cima do joelho como um desenrasco para facilitar a conversão, nunca preocupei-me com o design (como referido no tópico). Para criar o programa, verificava os textos com caracteres incorrectos e encontrava a relação do entre o caracter incorrecto e o correcto. Nunca tive o trabalho em aprofundar mais. Até agora ainda não encontrei falhas nem foi reportado falhas na conversão. Eu sei que esta tabela não está completa, mas para cada nova situação, mais um case 😛 O principal motor de tradução é: ' char ASCII Simbolo Equivalente ' à - 195 -> Não tem símbolo equivalente, o char depois deste indica o char correcto: ' ³ - 179 -> ó ' ´ - 180 -> ô ' © - 169 -> é ' § - 167 -> ç ' £ - 163 -> ã ' ¡ - 161 -> á ' º - 186 -> ú ' - 173 -> í ' µ - 181 -> õ ' ª - 170 -> ê ' ¢ - 162 -> â ' ? - 63 -> Á ' ‰ - 137 -> É ' ¨ - 168 -> è ' ¼ - 188 -> u (devido a este exemplo: conseqüências) ' ‡ - 135 -> Ç ' ƒ - 131 -> à '  - 194 -> Não tem símbolo equivalente, o char depois deste indica o char correcto: ' º - 186 -> º (não faz nada, é o único exemplo conhecido) ' â - 226 -+ ' € - 128 -+ ' œ - 156 -+ ' “actionsâ€? -+> [actions] For i = 0 To (Text1.Length - 1) If Asc(Text1.Chars(i)) = 195 Then i = i + 1 Select Case Asc(Text1.Chars(i)) Case 179 auxiliar = "ó"c Case 180 auxiliar = "ô"c Case 169 auxiliar = "é"c Case 167 auxiliar = "ç"c Case 163 auxiliar = "ã"c Case 161 auxiliar = "á"c Case 186 auxiliar = "ú"c Case 173 auxiliar = "í"c Case 181 auxiliar = "õ"c Case 170 auxiliar = "ê"c Case 162 auxiliar = "â"c Case 63 auxiliar = "Á"c Case 137 auxiliar = "É"c Case 168 auxiliar = "è"c Case 188 auxiliar = "u"c Case 135 auxiliar = "Ç"c Case 131 auxiliar = "Ã"c Case Else auxiliar = Text1.Chars(i) End Select ElseIf Asc(Text1.Chars(i)) = 194 Then i = i + 1 auxiliar = Text1.Chars(i) ElseIf Asc(Text1.Chars(i)) = 226 Then If (Asc(Text1.Chars(i + 1)) = 128 And Asc(Text1.Chars(i + 2)) = 63) Then i = i + 2 auxiliar = "]"c ElseIf (Asc(Text1.Chars(i + 1)) = 128 And Asc(Text1.Chars(i + 2)) = 156) Then i = i + 2 auxiliar = "["c End If Else auxiliar = Text1.Chars(i) End If Text2 = Text2 + auxiliar Next Na versão 1.00 (Beta) Tem o seguinte código: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Text1, Text2 As String Dim i, n_char As Integer Dim auxiliar As Char Text1 = Me.TextBox1.Text Me.TextBox1.Text = "" 'TRADUÇÃO Me.TextBox1.Text = Text2 'Me.Label1.Text = Text2 End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Me.TextBox1.Text = "" End Sub Na versão 2.00 Já não foi necessário colar o texto numa textbox: Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Text1, Text2 As String Dim i, n_char As Integer Dim auxiliar As Char 'copiar o texto que está na área de transferência para uma string Text1 = Clipboard.GetDataObject().GetData(DataFormats.Text) 'TRADUÇÃO 'copiar a string para a área de transferência Clipboard.SetDataObject(Text2) 'Me.Label1.Text = Text2 End Sub Na versão 1.00 CTR (beta) Numa tentativa de autonomia, criei um programa que fizesse a conversão na página com o máxima rapidez possível: Declare Function keybd_event Lib "user32" Alias "keybd_event" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long) As Long Private Declare Function GetKeyState Lib "user32" (ByVal vKey As Long) As Integer 'Sites que pesquisei: 'http://www.codeproject.com/useritems/screen.asp 'http://vbnet.mvps.org/index.html?code/bitmap/printscreenapi.htm 'http://www.codeguru.com/vb/gen/vb_system/keyboard/article.php/c4835/ 'http://www.developerfusion.co.uk/show/274/ Dim flag As Boolean = False Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick Dim lKey As Integer Dim Text1, Text2 As String Dim i, n_char As Integer Dim auxiliar As Char 'Ctrl press? lKey = GetKeyState(&H11) If ((lKey And &H8000) And flag) Then keybd_event(&H11, 0, &H2, 0) ' Ctrl Release 'Ctr-a keybd_event(&H11, 0, 0, 0) 'Ctrl Press keybd_event(65, 0, 0, 0) '‘a’ Press keybd_event(65, 0, &H2, 0) '‘a’ Release keybd_event(&H11, 0, &H2, 0) ' Ctrl Release 'Ctr-c keybd_event(&H11, 0, 0, 0) 'Ctrl Press keybd_event(67, 0, 0, 0) '‘c’ Press keybd_event(67, 0, &H2, 0) '‘c’ Release keybd_event(&H11, 0, &H2, 0) ' Ctrl Release 'Copia para uma string o que está na área de transferência Text1 = Clipboard.GetDataObject().GetData(DataFormats.Text) 'TRADUÇÃO 'Copia a string para a ârea de transferência Clipboard.SetDataObject(Text2) 'Ctr-v keybd_event(&H11, 0, 0, 0) 'Ctrl Press keybd_event(86, 0, 0, 0) '‘v’ Press keybd_event(86, 0, &H2, 0) '‘v’ Release keybd_event(&H11, 0, &H2, 0) ' Ctrl Release End If End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If ("Activar" = Me.Button1.Text) Then flag = True Me.Button1.Text = "Desactivar" Else flag = False Me.Button1.Text = "Activar" End If End Sub Agora quem quiser fazer o seu programa à sua maneira, tem aqui todo o meu desenvolvimento. O que podem tambem desenvolver algo melhor noutra linguagem. Mais informações -> PM Cumpr. bk@ero 😄
Hipnoted Posted October 15, 2006 at 12:24 AM Report #57354 Posted October 15, 2006 at 12:24 AM Boa... 😄 Isto são programas simples mas é sempre bom ver o código... "Nunca discutas com um idiota. Eles arrastam-te até ao seu nível e depois ganham-te em experiência"
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now