Salvar o texto e a formatação no banco... como faço isso??
Olá e obrigado por ter dado uma olhada aqui :wink:
Estou querendo deixar salva a formatação de um texto(Negrito, Itálico, Justificar... etc.) no banco de dados (estou usando Mysql/Windows)
O texto é criado em um Rich Edit e Levado a um campo do tipo Blob no banco...
Só que isso não é suficiente pra salvar a formatação. Quero saber como fazer isso, tem algum tipo de campo no Banco que salva o texto com a formatação ou esse mesmo (Blob), tem como salvar?
Se puder me ajudar já tô agradecendo... [] a todos! :wink:
Estou querendo deixar salva a formatação de um texto(Negrito, Itálico, Justificar... etc.) no banco de dados (estou usando Mysql/Windows)
O texto é criado em um Rich Edit e Levado a um campo do tipo Blob no banco...
Só que isso não é suficiente pra salvar a formatação. Quero saber como fazer isso, tem algum tipo de campo no Banco que salva o texto com a formatação ou esse mesmo (Blob), tem como salvar?
Se puder me ajudar já tô agradecendo... [] a todos! :wink:
Btovix
Curtidas 0
Respostas
Moonlight
11/09/2003
Olha, se tem um jeito mais fácil eu não sei... mas já fiz isso assim:
O texto gravei normal, só o que estava escrito mesmo... e criei esses campos na minha tabela: FontColor, FontName, FontSize, FontStyle.
Com exceção do FontSize que era numérico, os outros todos eram varchar.
O FontName e o FontSize vc não tem problemas para gravar : simplesmente pegue o valor e jogue no banco. Pro FontColor vc vai ter que usar uma funcao de conversão nativa do Delphi... ele tem lá a StringToColor e ColorToString. De boa tb.
Meu problema maior foi o FontStyle - visto que ele é um vetor do tipo TFontStyles. Aí fiz uma funcaozinha simples que - por comparacao - descobre quais estilos estão no vetor, e transforma pra string. E o inverso também.
Tenta aí, se vc não conseguir fala que te ajudo mais. Se houver uma solução melhor eu tb gostaria de saber.
O texto gravei normal, só o que estava escrito mesmo... e criei esses campos na minha tabela: FontColor, FontName, FontSize, FontStyle.
Com exceção do FontSize que era numérico, os outros todos eram varchar.
O FontName e o FontSize vc não tem problemas para gravar : simplesmente pegue o valor e jogue no banco. Pro FontColor vc vai ter que usar uma funcao de conversão nativa do Delphi... ele tem lá a StringToColor e ColorToString. De boa tb.
Meu problema maior foi o FontStyle - visto que ele é um vetor do tipo TFontStyles. Aí fiz uma funcaozinha simples que - por comparacao - descobre quais estilos estão no vetor, e transforma pra string. E o inverso também.
Tenta aí, se vc não conseguir fala que te ajudo mais. Se houver uma solução melhor eu tb gostaria de saber.
GOSTEI 0
Btovix
11/09/2003
Olá Valeu mesmo pela força mas tenho umas dúvidas pra tirar com você.
Muito boa solução, mas pelo que eu entendi se eu marcar como itálico o texto todo virá em itálico certo??? Preciso de que somente a parte que ficou marcada em Itálico continue Itálico e o resto do texto prossiga com sua formatação... estou pensando nisso mas ainda não tive uma luz... se vc souber como fazer gostaria que me mostrasse como
[]´s e muito obrigado novamente... :wink:
Muito boa solução, mas pelo que eu entendi se eu marcar como itálico o texto todo virá em itálico certo??? Preciso de que somente a parte que ficou marcada em Itálico continue Itálico e o resto do texto prossiga com sua formatação... estou pensando nisso mas ainda não tive uma luz... se vc souber como fazer gostaria que me mostrasse como
[]´s e muito obrigado novamente... :wink:
GOSTEI 0
Moonlight
11/09/2003
Deixa eu entender melhor.. vc quer tipo, deixar [b:25e442f7ef]assim[/b:25e442f7ef] não é?
Como vc vai fazer pra pessoa colocar isso? Vai colocar uns tags ou coisa do tipo? Só tou tentando entender... valeu
Como vc vai fazer pra pessoa colocar isso? Vai colocar uns tags ou coisa do tipo? Só tou tentando entender... valeu
GOSTEI 0
Btovix
11/09/2003
O Código para fazer [b:aa900ffcc9]Isso[/b:aa900ffcc9] é esse aqui:
[b:aa900ffcc9]procedure[/b:aa900ffcc9] Form1.bt_negritoClick(Sender: TObject);
[b:aa900ffcc9]begin[/b:aa900ffcc9]
if fsbold in Texto.SelAttributes.Style then
Texto.SelAttributes.Style := Texto.SelAttributes.Style - [fsbold]
else
Texto.SelAttributes.Style := Texto.SelAttributes.Style + [fsbold];
[b:aa900ffcc9]end;[/b:aa900ffcc9]
Não faço uso tags, simplismente faco uso dessa procedure e esse campo Texto é um RichEdit...
Espero que vc tenha entendido :) Vai desculpando qualquer coisa...
[]´s e aguardo sua resposta
Até mais...
[b:aa900ffcc9]procedure[/b:aa900ffcc9] Form1.bt_negritoClick(Sender: TObject);
[b:aa900ffcc9]begin[/b:aa900ffcc9]
if fsbold in Texto.SelAttributes.Style then
Texto.SelAttributes.Style := Texto.SelAttributes.Style - [fsbold]
else
Texto.SelAttributes.Style := Texto.SelAttributes.Style + [fsbold];
[b:aa900ffcc9]end;[/b:aa900ffcc9]
Não faço uso tags, simplismente faco uso dessa procedure e esse campo Texto é um RichEdit...
Espero que vc tenha entendido :) Vai desculpando qualquer coisa...
[]´s e aguardo sua resposta
Até mais...
GOSTEI 0
Moonlight
11/09/2003
Eu que peço desculpas : realmente da primeira vez eu tinha entendido diferente.
Agora eu que tou querendo saber como faz, hehe. O que eu posso pensar (e não sei se vai ser a melhor resposta) é vc adicionar uns tags. Tipo <b> e </b>, sei lá. Aí vc tem uma tabela de simbolos que te diz que <b> é pra colocar negrito até onde vc achar o </b>.
E você armazena o texto, no banco, com as tags... antes de exibi-lo novamente, vai ter q interpretar tudo.
Foi meio duh? Nem sei. De qq forma, gostaria de saber qdo vc resolvesse esse prob
Agora eu que tou querendo saber como faz, hehe. O que eu posso pensar (e não sei se vai ser a melhor resposta) é vc adicionar uns tags. Tipo <b> e </b>, sei lá. Aí vc tem uma tabela de simbolos que te diz que <b> é pra colocar negrito até onde vc achar o </b>.
E você armazena o texto, no banco, com as tags... antes de exibi-lo novamente, vai ter q interpretar tudo.
Foi meio duh? Nem sei. De qq forma, gostaria de saber qdo vc resolvesse esse prob
GOSTEI 0
Btovix
11/09/2003
Muito obrigado pela dica, mas a gente optou por esta outra solução aqui:
Usamos um Campo do tipo RichEdit Marcamos a opção [b:4a50f39aed]Plain Text[/b:4a50f39aed] no object inspector para false (ela já vem marcada dessa opção) isso vai fazer com que seja possível inserir ´pedaços´ de texto com formatações diferentes
Criamos uma váriável do tipo MemoryStream e na hora de inserir no banco passamos para ela o texto formatado e inserimos essa variável no banco e quando formos puxar de volta o vem formatado
Segue o código para inserir no banco:
[b:4a50f39aed]// declarei a variável MS lá em cima mas dou create só aqui...[/b:4a50f39aed]
MS := TMemoryStream.Create;
[b:4a50f39aed]// O texto do rich edit(re_aconpanhamento) está sendo inserido na variável ´MS´[/b:4a50f39aed]
re_acompanhamento.Lines.SaveToStream(MS);
[b:4a50f39aed]// Coloco a variável MS na posição inicial [/b:4a50f39aed]
MS.Position := 0;
[b:4a50f39aed]// e insiro no banco por parâmetro[/b:4a50f39aed]
fr_dados.qr_ins_prontuario.ParamByName(´DS_ACOMPANHAMENTO´).LoadFromStream(MS,ftBlob);
Espero que tenha te ajudado, qualquer dúvida continua postando aqui! :)
E novamente valeu por ter dado a dica... achei muito interessante! []´s
Usamos um Campo do tipo RichEdit Marcamos a opção [b:4a50f39aed]Plain Text[/b:4a50f39aed] no object inspector para false (ela já vem marcada dessa opção) isso vai fazer com que seja possível inserir ´pedaços´ de texto com formatações diferentes
Criamos uma váriável do tipo MemoryStream e na hora de inserir no banco passamos para ela o texto formatado e inserimos essa variável no banco e quando formos puxar de volta o vem formatado
Segue o código para inserir no banco:
[b:4a50f39aed]// declarei a variável MS lá em cima mas dou create só aqui...[/b:4a50f39aed]
MS := TMemoryStream.Create;
[b:4a50f39aed]// O texto do rich edit(re_aconpanhamento) está sendo inserido na variável ´MS´[/b:4a50f39aed]
re_acompanhamento.Lines.SaveToStream(MS);
[b:4a50f39aed]// Coloco a variável MS na posição inicial [/b:4a50f39aed]
MS.Position := 0;
[b:4a50f39aed]// e insiro no banco por parâmetro[/b:4a50f39aed]
fr_dados.qr_ins_prontuario.ParamByName(´DS_ACOMPANHAMENTO´).LoadFromStream(MS,ftBlob);
Espero que tenha te ajudado, qualquer dúvida continua postando aqui! :)
E novamente valeu por ter dado a dica... achei muito interessante! []´s
GOSTEI 0
Btovix
11/09/2003
Não tinha colocado aqui como que se faz para retirar de dentro da query o texto formatado.. e´só fazer o processo inverso, vou escrever aqui o código:
Para pegar os dados e jogar num rich edit
dentro de um evento do tipo [b:ef6e8d2435]onclick[/b:ef6e8d2435]
[b:ef6e8d2435]// fazer o processo inverso...[/b:ef6e8d2435]
[b:ef6e8d2435]// Create no MS, novamente...[/b:ef6e8d2435]
MS := TMemoryStream.Create;
[b:ef6e8d2435]// pega a query e converte o campo pra stream[/b:ef6e8d2435]
fr_dados.qr_prontXpacDS_ACOMPANHAMENTO.SaveToStream(MS);
[b:ef6e8d2435]// joga na posição inicial[/b:ef6e8d2435]
MS.Position := 0;
[b:ef6e8d2435]// insere no campo rich edit [/b:ef6e8d2435]
re_acompanhamento.Lines.LoadFromStream(MS);
[b:ef6e8d2435]// libera a variável da memória[/b:ef6e8d2435]
MS.Free;
Lembrem-se de acrescentar essa última linha ([b:ef6e8d2435]MS.Free;[/b:ef6e8d2435]) no Código anterior para liberar da memória o Ms se não dá problema na hora de usar este outro e tb a não ser que vc dê o create em outro lugar;
prefiro colocar o create aqui por causa do controle...
[]´s qualquer dúvida podem entrar em contato....
Para pegar os dados e jogar num rich edit
dentro de um evento do tipo [b:ef6e8d2435]onclick[/b:ef6e8d2435]
[b:ef6e8d2435]// fazer o processo inverso...[/b:ef6e8d2435]
[b:ef6e8d2435]// Create no MS, novamente...[/b:ef6e8d2435]
MS := TMemoryStream.Create;
[b:ef6e8d2435]// pega a query e converte o campo pra stream[/b:ef6e8d2435]
fr_dados.qr_prontXpacDS_ACOMPANHAMENTO.SaveToStream(MS);
[b:ef6e8d2435]// joga na posição inicial[/b:ef6e8d2435]
MS.Position := 0;
[b:ef6e8d2435]// insere no campo rich edit [/b:ef6e8d2435]
re_acompanhamento.Lines.LoadFromStream(MS);
[b:ef6e8d2435]// libera a variável da memória[/b:ef6e8d2435]
MS.Free;
Lembrem-se de acrescentar essa última linha ([b:ef6e8d2435]MS.Free;[/b:ef6e8d2435]) no Código anterior para liberar da memória o Ms se não dá problema na hora de usar este outro e tb a não ser que vc dê o create em outro lugar;
prefiro colocar o create aqui por causa do controle...
[]´s qualquer dúvida podem entrar em contato....
GOSTEI 0
Smaug_84
11/09/2003
tem um jeito mais facil,
so que agora estouy no trabalho, amanha de manha passo para vcs, da pra pegar como o testo é feito tipo assim:
ola//////bomdia/////////nossa quanta barra///
e dai vc salva isso no db e quando for carregar denovo no rich edit ja fica tudo formatado
amanha de manha eu passo
so que agora estouy no trabalho, amanha de manha passo para vcs, da pra pegar como o testo é feito tipo assim:
ola//////bomdia/////////nossa quanta barra///
e dai vc salva isso no db e quando for carregar denovo no rich edit ja fica tudo formatado
amanha de manha eu passo
GOSTEI 0