locked
editor de reportes RRS feed

  • Pregunta

  • Hola estoy haciendo un editor de reportes simple...
    O sea que voy a estas preguntando mucho en este hilo...

    primero decidi escojer el editor y visualizador para realizar la plantilla del reporte, si para que entiendan bien, quiero que se elaboren plantillas que seran los modelos de los reportes. Lo llamo face 1. Primero como los reportes no requieren de imagenes ni texto enrriquesido opto para editar y visualizar las plantillas el simple TextBox, habilitando el multilinea y scrollBars en Both.

    quiero aclarar que vengo de delphi y verdaderamente tenia muchas opciones muy buenas con los memos que es un textbox multilia.

    aqui me va los problemas:
    1-quiero sabler en que linea estoy situado(tanto cuando doy click como cuando preciono teclas).
    2-quiero sabler en la columna o numero de caracter que estoy situado(tanto cuando doy click como cuando preciono teclas), si como se muestra en la foto. el cursor se encuentra en la linea 2 columna o caracter 4, entre (t) y (o).
    3-quiero saber cuantas parabras tiene la linea en que estoy situado(tanto cuando doy click como cuando preciono teclas).

    para saber la linea en que estoy situado encontre esto, si alguien tiene algo mejor, soy todo oidos, con esto doy solucion al problema 1:

    var LineOfEdit = textBox1.GetLineFromCharIndex(textBox1.GetFirstCharIndexOfCurrentLine());

    claro, este me da cero como la primera linea como si fuera una matris(string[]). En el problema dos solo tengo la solucion cuando doy click con esto:

    var CaracterIzquierdo = textBox1.GetCharIndexFromPosition(PosCur);

    donde el PosCur es el punto del cursor que lo obtengo del evento textBox1_MouseUp:

    private void textBox1_MouseUp(object sender, MouseEventArgs e){    PosCur = e.Location;}



    pero quiero tener CaracterIzquierdo cuando tecleo, como lo hace el editor de codigos de vs en su barra de estado. Y para el problema 3 creo que usare StringBuilder.
    Por favor les pido, publiquen codigo no referencias a otros sitios. Es que vivo en cuba y tener acceso a internet es un poco dificil y mas cuando se busca informacion, yo en parte tengo manuales y la ayudad de la vs, por eso siempre acudo a este foro para obtener ayuda exacta, no me gusta que me hagan la tarea, solo que consideren a un programador sin amplio acceso a internet.
    Gracias de antemano.

    lunes, 8 de enero de 2018 15:27

Respuestas

Todas las respuestas

  • hola

    Pero lo que describes se parece a un editor de texto, no veo nada relacionado con reportes

    deberias evaluar el control

    RichTextBox (Control, formularios Windows Forms)

    este tiene mejas respecto a la edicion y como ser

    RichTextBox.CaretPosition

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    lunes, 8 de enero de 2018 17:17
  • Leandro Tuttini si es verdad, lo que ud dice, pero como mensione es un editor, pero mis reportes van de textos, no tiene imagenes, es por eso la importancia de tener un control exacto de algunas cosas, pq son la base para saber si una palabra es un dato o solo texto de la plantilla, si algo parecido al viejo FoxPro... pero primero hay que gatear...

    gracias por tu aporte, pero RichTextBox.CaretPosition es para WPF y yo lo quiero para windows form y no tengo ni idea de como agregar System.Windows.Documents, en una aplicacion de windows form.
    Voy hacer una pausa, con los textbox y dare un vistazo a los RichTextBox, para ver si no me complican tanto la vida...
    jueves, 22 de febrero de 2018 15:56
  • Gracias Leandro Tuttini, si fue buena tu aporte, pero me di cuenta que aveces es complicado a la hora de imprimir, si como me explico quiero que lo que tenga en el RichTextBox sea lo mismo en la hoja impresa pero esto no se como hacerlo. Quiero lograr en el RichTextBox lo mismo que hace MS Word, lo que ves es lo que es en papel... probe con tx_text_control y este tiene todo pero no es free y yo solo quiero tener en hoja lo mismo que hay en el RichTextBox...
    jueves, 22 de febrero de 2018 15:57
  • Encontre algo pero no me funciona como quiero...

    Quiero q capturar el ancho del la pagina en el evento printpage al momento de cargar la form

    private void Form1_Load(object sender, EventArgs e)
            {
                
                PrintDocument pd = new PrintDocument();
                pd.PrintPage += new PrintPageEventHandler(Pd_PrintPage);
                richTextBox1.Width = PaginaWidth;
            }

    private void Pd_PrintPage(object sender, PrintPageEventArgs e)
            {
                string prueba = "";
                for (int i = 0; i < 10; i++)
                {
                    prueba = prueba + "abcdefghijklmnopqrstuvwxyz";
                }
                int charactersOnPage = 0;
                int linesPerPage = 0;
                e.Graphics.MeasureString(
                    prueba,
                    richTextBox1.Font,
                    e.MarginBounds.Size,
                    StringFormat.GenericTypographic,
                    out charactersOnPage,
                    out linesPerPage
                );
                charPerLines = charactersOnPage / linesPerPage;
    
                PaginaWidth = e.MarginBounds.Width;
            }

    pero no me llama al evento, pues pasa por este y no realiza la accion que yo quiero. Alguien sabe pq?

    lunes, 26 de febrero de 2018 15:46
  • hola a todos, he dejado este editor por un tiempo pero ya lo retome....

    es editor funciona asi:

    el editor graba en un fichero xml una extructura que me permite determinar que es dato y que es texto...

    podemos escribir lo que querramos en el RichTextBox y este lo reconoce como texto y en un panel con dos textBox y un button insertamos el nombre del dato, su contenido y lo mandamos a guardar en un lisbox. Una vez que queremos insertar un dato solo seleccionamos el dato y este lo agrega al RichTextBox y al fichero xml.

    estructura del xml:

    <plantilla no="">
     <linea no="1">
      <t>Hola mundo, hoy es: </t>
      <d nombre="fecha">10/01/2019</d>
     </linea>
    </plantilla>

    sábado, 19 de enero de 2019 1:17