elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Ayuda con mi funcion de colores RTF
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con mi funcion de colores RTF  (Leído 2,083 veces)
GhostRaider

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Ayuda con mi funcion de colores RTF
« en: 8 Enero 2013, 18:17 pm »

Buenas amigos les cuento que estoy haciendo una funcion RTF de colores todo funciona bien colores cursiva etcc, pero lo unico que la funcion es lenta convierte los colores demasiado lento para lo que yo quiero aver si alguien que entienda el tema se le ocurre alguna idea de hacerlo mas rapido les dejo el source a continuacion.

CODIGO:

Código:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Tag_Maker_Multiline_Example
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void text1_TextChanged(object sender, EventArgs e)
        {
            //Variables para el armar el archivo
            string start = "{" + "\\rtf1" + "\\ansi" + "\\ansicpg1252" + "\\deff0" + "\\deflang3082" + "{" + "\\fonttbl" + "{" + "\\f0" + "\\fnil" + "\\fcharset0 Arial Unicode MS" + ";" + "}" + "}";
            string start2 = "\\viewkind4" + "\\uc1" + "\\pard" + "\\f0" + "\\fs17";
            string ctbl = "{\\colortbl ;\\red0\\green0\\blue0;\\red128\\green0\\blue0;\\red0\\green128\\blue0;\\red255\\green128\\blue0;\\red0\\green0\\blue128;\\red128\\green0\\blue128;\\red0\\green128\\blue128;\\red128\\green128\\blue128;\\red192\\green192\\blue192;\\red255\\green0\\blue0;\\red0\\green255\\blue0;\\red255\\green255\\blue0;\\red0\\green0\\blue255;\\red255\\green0\\blue255;\\red0\\green255\\blue255;\\red255\\green255\\blue255;}";
            string end = "\\par" + "\n" + "}" + "\n" + "\0";
            
            //Variables auxiliares
            string str;
            string txt = null;
            string txt2 = null;

            int index;

            //Almacemanos el texto de "text1" en una variable con un código de color de Ares equivalente al rojo.
            //De esta forma, cuando se reeplacen los códigos y si no se ha añadido ningún color...
            //se verá el texto en rojo (el mismo color por defecto en ares).
            string aux = "304" + text1.Text;

            //Almacenamos el texto en rtf1.Text
            rtf1.Text = aux;

            //Almacenamos el código rtf resultante en una variable (aún sin los códigos reemplazados)
            str = rtf1.Rtf;

            //En el ejemplo de tag_maker de una sóla línea, iría a continuación directamente el código de reemplazo.
            //Pero en lugar de ello colocarémos un bucle que repetirá el proceso varias veces...
            //Tomará línea por línea y reemplazará los códigos de colores independientemente en cada una de ellas,
            //añandiendo al final de cada una y junto a un salto de línea, los códigos para quitar estilos y colores
            //de manera que no interfieran con la siguiente.
            
            while (true)
            {
                //Se busca un salto de línea para comprobar si el texto es multilínea
                index = str.IndexOf("\n");

                //Si no se encuentra el salto.. entonces se reemplazan los códigos, se almacena en una variable
                //y se sale del bucle.
                if (index == -1)
                {
                    txt2 = txt2 + colorDec(str); break;
                }

                //Si se llega a esta parte.. es porque hay un salto de linea y el bucle no ha sido detenido.
                //Se extrae la primer línea, se almacena en una variable y se remueve de la original.
                txt = str.Substring(0, index);
                str = str.Remove(0, index + 1);

                //Se almacena la línea en una variable junto a las demás y se le añaden los códigos extra al final.
                //Nota: En lugar del código para quitar color de fuente, agrego uno para aplicar el rojo (\\cf10).
                txt2 = txt2 + colorDec(txt) + "\\b0 \\ul0 \\i0 \\cf10 \\highlight0 \n";
            }

            //Luego de finalizado el bucle, toca armar el archivo completo con los códigos ya reemplazados.

            //Remuevo restos de códigos de estilo que puedan causar una visualización erronea
            txt2 = txt2.Replace("lang3082\\ul\\", "lang3082\\");
            txt2 = txt2.Replace("lang3082\\b\\", "lang3082\\");
            txt2 = txt2.Replace("lang3082\\i\\", "lang3082\\");

            //Remuevo restos de códigos de color que puedan causar una visualización erronea
            for (int i = 1; i <= 15; i++)
            {
                txt2 = txt2.Replace("pard\\highlight" + Convert.ToString(i), "pard");
                txt2 = txt2.Replace("pard\\cf1\\highlight" + Convert.ToString(i), "pard");
            }

            rtf1.Clear();
            rtf1.Rtf = start + ctbl + start2 + txt2 + end;

        }

        //Función de reemplazo de códigos de color. Retorna un string con los códigos reemplazados.
        public string colorDec(string rtf)
        {
            int index = 0;

            //Reemplazo de códigos de color.
            rtf = rtf.Replace("\\\'02300", "\\cf16 ");
            rtf = rtf.Replace("\\\'02301", "\\cf1 ");
            rtf = rtf.Replace("\\\'02305", "\\cf2 ");
            rtf = rtf.Replace("\\\'02303", "\\cf3 ");
            rtf = rtf.Replace("\\\'02307", "\\cf4 ");
            rtf = rtf.Replace("\\\'02302", "\\cf5 ");
            rtf = rtf.Replace("\\\'02306", "\\cf6 ");
            rtf = rtf.Replace("\\\'02310", "\\cf7 ");
            rtf = rtf.Replace("\\\'02314", "\\cf8 ");
            rtf = rtf.Replace("\\\'02315", "\\cf9 ");
            rtf = rtf.Replace("\\\'02304", "\\cf10 ");
            rtf = rtf.Replace("\\\'02309", "\\cf11 ");
            rtf = rtf.Replace("\\\'02308", "\\cf12 ");
            rtf = rtf.Replace("\\\'02312", "\\cf13 ");
            rtf = rtf.Replace("\\\'02313", "\\cf14 ");
            rtf = rtf.Replace("\\\'02311", "\\cf15 ");
            rtf = rtf.Replace("\\\'02500", "\\highlight0 ");
            rtf = rtf.Replace("\\\'02501", "\\highlight1 ");
            rtf = rtf.Replace("\\\'02505", "\\highlight2 ");
            rtf = rtf.Replace("\\\'02503", "\\highlight3 ");
            rtf = rtf.Replace("\\\'02507", "\\highlight4 ");
            rtf = rtf.Replace("\\\'02502", "\\highlight5 ");
            rtf = rtf.Replace("\\\'02506", "\\highlight6 ");
            rtf = rtf.Replace("\\\'02510", "\\highlight7 ");
            rtf = rtf.Replace("\\\'02514", "\\highlight8 ");
            rtf = rtf.Replace("\\\'02515", "\\highlight9 ");
            rtf = rtf.Replace("\\\'02504", "\\highlight10 ");
            rtf = rtf.Replace("\\\'02509", "\\highlight11 ");
            rtf = rtf.Replace("\\\'02508", "\\highlight12 ");
            rtf = rtf.Replace("\\\'02512", "\\highlight13 ");
            rtf = rtf.Replace("\\\'02513", "\\highlight14 ");
            rtf = rtf.Replace("\\\'02511", "\\highlight15 ");

            //Reemplazo de código - Negrita    
            do
            {
                try
                {
                    index = rtf.IndexOf("\\\'026");
                    rtf = rtf.Remove(index, 5);
                    rtf = rtf.Insert(index, "\\b ");

                    index = rtf.IndexOf("\\\'026");
                    rtf = rtf.Remove(index, 5);
                    rtf = rtf.Insert(index, "\\b0 ");
                }
                catch { }
            } while (index > -1);


            //Reemplazo de código - Subrayado    
            do
            {
                try
                {
                    index = rtf.IndexOf("\\\'027");
                    rtf = rtf.Remove(index, 5);
                    rtf = rtf.Insert(index, "\\ul ");

                    index = rtf.IndexOf("\\\'027");
                    rtf = rtf.Remove(index, 5);
                    rtf = rtf.Insert(index, "\\ul0 ");
                }
                catch { }
            } while (index > -1);


            //Reemplazo de código - Cursiva    
            do
            {
                try
                {
                    index = rtf.IndexOf("\\\'029");
                    rtf = rtf.Remove(index, 5);
                    rtf = rtf.Insert(index, "\\i ");

                    index = rtf.IndexOf("\\\'029");
                    rtf = rtf.Remove(index, 5);
                    rtf = rtf.Insert(index, "\\i0 ");
                }
                catch { }
            } while (index > -1);

            return rtf;

        }

        private void rtf1_TextChanged(object sender, EventArgs e)
        {

        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        /*La diferencia a destacar, con respecto al ejemplo de una sóla línea, es únicamente el
         bucle que he añadido, que se encarga de tomar línea por línea y hacer el reemplazo de códigos
         independiente en cada una de ellas.
          
         _-_-_-_- Diferencias de menor importancia:
         * Otra diferencia, pero no del todo necesaria.. es la función que utilicé para almacenar los
         códigos de reemplazo y hacer que este ejemplo sea un poco más legible.
         * Otra diferencia menor se encuentra al final, justo antes de armarse el archivo.. donde he
         tenido que quitar códigos rtf que quedan aún después del Clear() y producen una visualización
         erronea de los colores.
         */

        
    }
}

DESCARGAR EL SOURCE PARA QUE PUEDAN VER MEJOR
http://www.mediafire.com/?o5y5z3j6874418x


« Última modificación: 10 Enero 2013, 01:54 am por GhostRaider » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AVI con colores distorsionados....Ayuda !!
Multimedia
alternativo 2 2,368 Último mensaje 2 Febrero 2005, 06:30 am
por Songoku
Ayuda en una función
Programación Visual Basic
karmany 0 1,223 Último mensaje 6 Febrero 2006, 00:14 am
por karmany
ayuda con la funcion Do Until
Programación Visual Basic
kakinets 5 2,402 Último mensaje 24 Marzo 2006, 15:11 pm
por karmany
[Ayuda]Con colores en msgbox
Programación Visual Basic
aioros666 6 2,518 Último mensaje 15 Octubre 2006, 19:04 pm
por ka0s
Ayuda!! Con los colores en C
Programación C/C++
LoQueSeaPI 1 1,600 Último mensaje 17 Octubre 2016, 05:30 am
por dato000
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines