GARANTIR DESCONTO

Fórum Salvar o texto e a formatação no banco... como faço isso?? #181595

11/09/2003

0

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:


Btovix

Btovix

Responder

Posts

11/09/2003

Moonlight

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.


Responder

Gostei + 0

12/09/2003

Btovix

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:


Responder

Gostei + 0

12/09/2003

Moonlight

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


Responder

Gostei + 0

12/09/2003

Btovix

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...


Responder

Gostei + 0

12/09/2003

Moonlight

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


Responder

Gostei + 0

15/09/2003

Btovix

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


Responder

Gostei + 0

16/09/2003

Btovix

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....


Responder

Gostei + 0

16/09/2003

Smaug_84

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar