Page 1 of 1

campo richedit paso a paso "for dumb" por favor

Posted: Wed Sep 10, 2025 12:05 pm
by JoseAlvarez
Hola a Todos, estimados amigos del foro.

Pensando en entrar en la onda de la IA, intenté dar un primer paso a modo de prueba.

Interactuando con la IA deepseek por ser la única que no esta bloqueada en mi país, logré conectar vía API, con funciones que ella misma me creó y entregó (mi versión FW es vieja y no posee las clases de IA) Todo Bien Hasta aquí. Pero para los campos de pregunta/respuesta estoy usando un simple get, memo y multiline, al estilo antiguo.

He logrado la interacción desde mi aplicación y funciona bien a excepción de algo: La IA cuando responde, incluye en su respuesta iconos y emojis, y allí se presenta el problema. se muestran caracteres extraños en lugar de los emojis e iconos.

También se presentan problemas con los ENTER y saltos de líneas en algunos casos, en fin, llegué a la conclusión de que el get memo no me sirve para ello. Como no tengo conocimiento en el uso de campos RICHEDIT le pedí a la IA que obviara los acentos, los iconos, los caracteres extraños, y lo he logrado en gran parte, pero he tenido que implementar demasiadas funciones creadas por la misma IA para ir solventando.

Esa idea no me gusta. Es demasiado código para hacer, lo que estoy seguro que se resuelve con un simple campo richedit que pueda reconocer la respuesta de la IA tal como llega (creo que es así, y espero que sea así)

mi consulta: alguien puede guiarme paso a paso como crear y usar un campo RICHEDIT?

Disculpen el texto tan largo, pero quise ubicarlos bien en el contexto que estoy trabajando.

Gracias por la ayuda que puedan prestarme.

Image

Re: campo richedit paso a paso "for dumb" por favor

Posted: Wed Sep 10, 2025 12:36 pm
by karinha

Re: campo richedit paso a paso "for dumb" por favor

Posted: Wed Sep 10, 2025 12:41 pm
by JoseAlvarez
karinha wrote: Wed Sep 10, 2025 12:36 pm Simples,

https://forums.fivetechsupport.com/view ... hp?t=45684

Regards, saludos.
Estimado master joao, gracias por tu buena disposicion siempre para audarnos. Pero con mucha pena te digo, no entendi nada en ese post :(

Re: campo richedit paso a paso "for dumb" por favor

Posted: Wed Sep 10, 2025 1:10 pm
by Antonio Linares
Estimado José,

Puedes compartir el código y el recurso (en caso de que lo uses) para adaptarlo a RichEdit ?

gracias

Re: campo richedit paso a paso "for dumb" por favor

Posted: Wed Sep 10, 2025 6:10 pm
by karinha
JoseAlvarez wrote: Wed Sep 10, 2025 12:41 pm
karinha wrote: Wed Sep 10, 2025 12:36 pm Simples,

https://forums.fivetechsupport.com/view ... hp?t=45684

Regards, saludos.
Estimado master joao, gracias por tu buena disposicion siempre para audarnos. Pero con mucha pena te digo, no entendi nada en ese post :(
Lo siento, amigo, creo que me equivoqué en mi respuesta. Creía que la última versión de FWH ya preveía lo que quieres hacer. Aunque sería mucho más seguro que actualizaras tu versión de FWH, ¿no crees?

Haz lo que pide el Maestro Liñares y publica el código para analizarlo, ¿sí?

Gracias, tks.

Regards, saludos.

Re: campo richedit paso a paso "for dumb" por favor

Posted: Thu Sep 11, 2025 3:44 pm
by JoseAlvarez
muchas gracias master antonio y master joao. Aca les dejo el link de descarga para el .PRG

https://goo.su/EzTS9

recurso:

Code: Select all | Expand

ODLG_ASISTENTEIA DIALOG DISCARDABLE 11, 15, 517, 213
STYLE WS_POPUP|DS_MODALFRAME|WS_CAPTION|WS_VISIBLE
FONT 10, "Courier New"
{
  CONTROL "", 4001, "Edit", ES_MULTILINE|WS_VSCROLL|WS_TABSTOP, 8, 28, 208, 172, WS_EX_STATICEDGE
  CONTROL "", 4002, "TBtnBmp", WS_TABSTOP, 224, 116, 28, 25
  CONTROL "", 270, "TBtnBmp", WS_TABSTOP, 224, 176, 25, 25
  CONTROL "", 4003, "TBtnBmp", WS_TABSTOP, 224, 72, 25, 25
  CONTROL "", 4011, "Static", WS_GROUP, 12, 4, 220, 10
  CONTROL "Tu Pregunta", 4005, "Static", WS_GROUP, 8, 20, 64, 8
  CONTROL "Respuesta", 4006, "Static", WS_GROUP, 260, 20, 64, 8
  CONTROL "", 4007, "TBtnBmp", WS_TABSTOP, 224, 28, 25, 25
  CONTROL "", 4004, "Edit", ES_MULTILINE|WS_VSCROLL|WS_TABSTOP, 260, 28, 248, 172, WS_EX_STATICEDGE
}

En la siguiente imagen muestro la interfaz. a través del control 4003 (botón con signo "?" ) hago la interacción con la IA donde puedo consultar sobre cualquier tema. Con el control 4002, donde se ve la imagen de un operador de callcenter, estoy implementado el manual de usuario del sistema. No uso la IA en esa parte.

Image

Aunque el problema de los emojis y símbolos extraños lo solucioné con solo hacer una concatenación al final de la pregunta: " contesta sin colocar letras en negrilla ni iconos ni emojis. solo texto plano." seria interesante hacer el richedit para en primer lugar, reducir código y en segundo lugar mostrar una respuesta mas elegante.

Agradecido por la ayuda que puedan prestar.

Re: campo richedit paso a paso "for dumb" por favor

Posted: Thu Sep 11, 2025 5:02 pm
by karinha
Estimado, falta:

Code: Select all | Expand

#include "Cuentas32.ch"
Regards, saludos.

Re: campo richedit paso a paso "for dumb" por favor

Posted: Fri Sep 12, 2025 12:05 am
by carlos vargas
A ver si nos animamos a hacer esto con twebview2 y summentnote, nos quedaria un excelente editor.
http://carlosvargas.duckdns.org/ownclou ... 29EIo92MIO

Code: Select all | Expand

#include "FiveWin.ch"

STATIC cEditor := ""

PROCEDURE Main()
  LOCAL oWnd
  LOCAL oWebView2

  SetDPIAware(2)

  DEFINE WINDOW oWnd TITLE "Integración de Summernote con TWebView2" SIZE 800, 600

    oWebView2 := TWebView2():New( oWnd )
    //oWebView2:SetTitle( "Microsoft Edge WebView working from FWH" )
    oWebView2:Navigate( GetFilePath( "recursos/editor.html" ) )
            
    oWebView2:SetUserAgent( "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.53 Mobile Safari/537.36" )
    
  ACTIVATE WINDOW oWnd CENTER ;
    ON RESIZE oWebView2:SetSize( nWidth, nHeight )

  oWebView2:End()
    
RETURN 

STATIC FUNCTION GetFilePath( cFile )
RETURN CurDrive() + ":\" + CurDir() + "\" + cFile

#pragma BEGINDUMP

#include <windows.h>
#include <shellscalingapi.h>
#include <hbapi.h>

HB_FUNC( SETDPIAWARE )
{
    hb_retnl( (long) SetProcessDpiAwareness( (PROCESS_DPI_AWARENESS) hb_parni(1) ) );
}

#pragma ENDDUMP
Image

Re: campo richedit paso a paso "for dumb" por favor

Posted: Fri Sep 12, 2025 2:44 pm
by carito
Hola Carlos, buen dia.

Super bueno tu ejemplo, se ve super moderno, ejecute tu el demo, pero puedes decirme como se graba e imprime.

Como lo haces para que para guardar con texto con imagenes, que forma recomiendas.

Gracias, saludos
Carito

Re: campo richedit paso a paso "for dumb" por favor

Posted: Fri Sep 12, 2025 7:34 pm
by JoseAlvarez
karinha wrote: Thu Sep 11, 2025 5:02 pm Estimado, falta:

Code: Select all | Expand

#include "Cuentas32.ch"
Regards, saludos.
Joao: este es el .ch

Code: Select all | Expand

#include "common.ch"
#include "directry.ch"
#include "dbstruct.ch"
#include "dbinfo.ch"
#include "fileio.ch"
#include "ord.ch"
#include "struct.ch"

#include "fivewin.ch"
#include "dtpicker.ch"
#include "gif.ch"
#include "trsay.ch"
#include "image.ch"
#include "mail.ch"
#include "print.ch"
#include "report.ch"
#include "splitter.ch"
#include "colors.ch"

#include "tdolphin.ch"
#include "tsbutton.ch"
#include "urllink.ch"
#include "values.ch"
#include "wcolors.ch"
#include "xbrowse.ch"
#include "hbcompat.ch"
#include 'hbcurl.ch'
#include 'richedit.h

Re: campo richedit paso a paso "for dumb" por favor

Posted: Sat Sep 13, 2025 6:40 pm
by carlos vargas
la verdad es una prueba, para ver si entre todo lo podemos implementar.

Re: campo richedit paso a paso "for dumb" por favor

Posted: Wed Sep 17, 2025 2:53 pm
by leandro
Hola buenos días, interesante tema, seria bueno también incluir, que al tener una plantilla de un texto largo podamos reemplazar algunas variables, y generar ese reporte por impresora, asumo que todo mediante html, de paso lo haríamos compatible con otro tipo de aplicaciones.