FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
TDbGrid con un campo RTF. ¿Se puede visualizar como texto plano?
Pues éso, chic@s, tengo varios campos que contienen texto RTF, con formatos bonitos, etcétera..., pero que a la hora de desplegarse en un TDbGrid se ven como un batiburrillo de letras, códigos y hasta groserías aparecen...
¿Hay alguna manera (que no sea utilizando componentes de terceros, tengo la imposición que de no usarlos) de mostrar los campos con contenido RTF en texto plano, solamente en el TDbGrid? Acepto todas las ideas, por alocadas que parezcan.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#2
|
||||
|
||||
Esto es algo que utilizo que puedes modificar a tu gusto...
Recibe un campo blob, donde hay notas en formato RTF.
|
#3
|
||||
|
||||
Hola Felipe.
Como ilustra duilioisola, es la propiedad Lines.Text del cuadro de texto rico (o enriquecido) la que devuelve su contenido sin formato. Dado que el texto se encuentra en un campo, puedes asociar a éste un objeto TDBRichEdit (visible o invisible), y añadir a la tabla un campo calculado de tipo String para mostrar en la rejilla. Así, en el evento OnCalcFields del conjunto de datos, asignas ese Lines.Text al campo calculado:
Saludos. Al González. Última edición por Al González fecha: 28-02-2012 a las 19:16:20. |
#4
|
||||
|
||||
Cita:
Saludos! |
#5
|
||||
|
||||
Puedes revisar esta entrada en StackOverflow. En ella se da un ejemplo de como dibujar el contenido de un Richedit utilizando la interfaz Windowless Rich Edit.
Nuevamente repito, el código de ejemplo en la entrada de StackOverflow documenta como dibujar el texto rico sobre el un objeto TCanvas. Sin embargo si lo que deseas es dibujar un extracto en texto plano, en lugar de hacer la llamada a TxDraw, hazla a TxGetText. Talvez te hallas quedado con una gran incógnita con lo que te he dicho. Pero si lees el código que te cité verás que realmente está fácil. Saludos! |
#6
|
||||
|
||||
Cita:
El punto es que ya tengo CASI todo controlado, excepto el mostrar el texto en el TDbGrid en su correspondiente columna.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#7
|
||||
|
||||
Cita:
// Saludos |
#8
|
||||
|
||||
Cita:
En lo personal preperiría utilizar el evento OnGetText para este caso. Por ejemplo:
Saludos! |
#9
|
||||
|
||||
Como siempre, la solución en varios pasos.
Paso 1.- Al TADOQuery que utilizo para obtener los datos de la rejilla, debo extraerle los nombres de campos hasta llegar al evento OnGetText de cada uno. Paso 2.- En el dicho evento OnGetText, le incluímos un poquito de código de ésta manera: Como podemos apreciar, creo un TRichEdit "al vuelo", lo utilizo como "traductor" de los datos contenidos en el campo y devuelvo el texto resultante para ser mostrado en el TDbGrid. Añado la solución para futuras referencias, sobre todo, mías... jajajajajaja
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#10
|
||||
|
||||
Cita:
Cita:
Aunque ciertamente depende de cómo sea implementado cada derivado de TDataSet, lo cierto es que la mayoría (TClientDataSet, ADO, IBX, etc.) hacen el cálculo del buffer de registro mucho antes de informar a los enlaces de datos visuales de cualquier movimiento. Román, esto es similar a aquel asunto del OnValidate que tuvimos el gusto de compartir. En conclusión, un evento OnCalcFields puede asumir que el valor de cualquiera de los campos es del mismo registro cuyos campos calculados se van a actualizar, pero no necesariamente serán los mismos valores mostrados en los controles de datos. Siendo así, creo que yo también usaría un evento OnGetText o aún un campo calculado (dependiendo de si el campo original va a estar visible o no al mismo tiempo como texto rico), pero eso sí, con un TRichEdit en lugar de TDBRichEdit, al estilo de las sugerencias anteriores. Y claro, con un poco más de tiempo, optar por llamadas directas a la API de Windows no sería mala idea tampoco. Un abrazo corregido. Al González. |
#11
|
||||
|
||||
Cita:
// Saludos |
#12
|
||||
|
||||
Hola Felipe.
Viendo ahora la solución que obtuviste, si te resultó satisfactoria me permito sugerirte que uses el mismo manejador de evento OnGetText para todos esos campos (no tiene que ser un OnGetText por cada campo). También, con tu debido permiso, me tomo la libertad de mejorarlo un poco:
Sin olvidar que debe estar ComCtrls en el Uses. Saludos. |
#13
|
||||
|
||||
Solo quiero añadir que en el código del evento OnGetText no se debe menospreciar la variable DisplayText. Esto lo digo porque hay algunas malas implementaciones que en lugar de llamar a:
Field.Value, hacen la llamada a Field.DisplayText(DisplayText=False) suponiendo que DisplayText con la condicional en False devolverá el valor verdadero o original el campo, lo cual no puede ser cierto dependiendo de la condición DisplayText y más aún si el programador ignoró esta variable al momento de la implementación de GetText. Saludos! |
#14
|
||||
|
||||
Cita:
// Saludos |
#15
|
||||
|
||||
Cita:
Y bien, hoy aprendí algo acerca del RTF. NUNCA utilizarlo voluntariamente a menos que sea de extrema necesidad. Demasiado complicado.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#16
|
||||
|
||||
Cita:
La parte que a mi no me queda claro es qué logran ver de un richedit en una sólo línea del dbgrid. Vamos, que me parece que un DBGrid no es el control adecuado para visualizar campos de texto, sean richedit o memos. // Saludos |
#17
|
||||
|
||||
Cita:
Estoy de acuerdo contigo, Román. Hay controles que CASI permiten hacer de todo, y si no pueden, les damos una ayudadita. ¿Para qué ver solamente una línea de texto? Lo mismo me pregunto yo, pero "donde manda capitán no gobierna marinero". Es el problema de ser un programador subcontratado, la creatividad debes dejarla en casa, tristemente.
__________________
Felipe Eduardo Ortiz López. Delphi programmers does it recursively... "Un programador, es un creador de universos en donde sólo él es responsable. Universos de complejidad prácticamente ilimitada que se puede crear en forma de programas de ordenador." - Joseph Weizenbaum. Témele a los profetas... y a aquellos que están listos para morir por "la verdad", ya que como regla general hacen morir a muchos otros con ellos, frecuentemente antes que ellos, y a veces en lugar de ellos. — Umberto Eco |
#18
|
||||
|
||||
Cita:
// Saludos |
#19
|
||||
|
||||
Touché.
Es verdad, Román. Aunque dejar el nombre como está fue involuntario, creo que se debe a mi arraigada costumbre de respetar los nombres de los parámetros como fueron declarados originalmente, esto en métodos virtuales redefinidos y de igual manera en manejadores de eventos, como fue el caso anterior. Felipe: te recomiendo la fuente Arial Drunk para esos textos, creo que es la que los médicos prefieren. (para mi querido hermano: es chiste, no te ofendas ) |
#20
|
||||
|
||||
En todo caso, una trampilla muy ingeniosa . Creo que nunca he visto un uso real de absolute.
// Saludos |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Cargar exe como texto plano | _cero_ | C++ Builder | 4 | 14-12-2010 08:39:14 |
Como enviar los valores de un TDBGRID a cuadros de texto | Luis Castro | Varios | 3 | 11-01-2007 17:31:15 |
Se puede editar un TDbgrid externo con su Handle? | rivers | Varios | 0 | 08-01-2007 22:24:49 |
Obtener Texto plano de un campo blob | Manuel | Firebird e Interbase | 12 | 06-10-2006 00:01:53 |
como visualizar campo memo en grid? | Alfredo | Conexión con bases de datos | 3 | 17-01-2005 13:38:21 |
|