Fórum enviando dados com fontes pelo Tclientsocket #271841
10/03/2005
0
eu tenho uma aplicação em que eu envio mensagem pelo tclientsocket,so que antes de enviar a mensagem eu altero as configurações de fontes e quando eu mando a mensagem o contato recebe a mensagem sem essas modificações de fonte,como que eu faço p/ que o meu contato receba a minha mensagem com essas alterações ?
Anicetojunior
Curtir tópico
+ 0Posts
10/03/2005
Kapak
Como assim enviar msgs pelo ClientSocket c/ alteração de fontes ?
Gostei + 0
11/03/2005
Anicetojunior
Gostei + 0
11/03/2005
Kapak
Vc diz que envia msgs pelo ClientSocket certo ?
E o outro lado como recebe essas msgs ?
Gostei + 0
11/03/2005
E_gama
Voce poderia definir um padrão de mensagens, tipo:
[FONT-NOME]Arial
[FONT-TAM]=12
[MSG]=Aqui entra a mensagem em sí
[FONT-NAME]OutraFonte
[MSG]=Outra mensagem [FONT-NEGRITO][FONT-ITALICO]resto da mensagem
Mas aí vc teria que ter uma rotina para ´decodificar´ o dado enviado, mais ou menos como os browser Web fazem com HTML.
se eu fosse fazer, e quizesse enviar mensagens formatadas, certamente faria utilizando texto em formato HTML ou RTF... assim ficaria mais fácil mostrar os dados na outra ponta do socket, não precisando ´decodificar´ a mensagem.
Gostei + 0
11/03/2005
Anicetojunior
2° como que eu faria entao p/ mandar essas mensagem no formato html ou rtf como o nosso amigo e_gama falou ? vc´s tem outas ideias ?
Gostei + 0
11/03/2005
Kapak
Vc não consegue formatar fontes pq a filosofia de ServerSocket e ClientSocket é de conexão via tcp/ip e porta.
Então vc utiliza SendText/SendBuf e ReceiveText/ReceiveBuf para enviar e receber de um lado p/ outro; isto não tem nada a ver c/ fontes, vc simplesmente envia e recebe um buffer de dados.
Se foi vc quem fez os dois programas(Client e Server), então modifique o modo de envio e recepção, mandando os parâmetros de fontes na frente; com isto no lado que recebe, vc formata o texto pelos parâmetros recebidos que virão antes da msg.
Gostei + 0
11/03/2005
E_gama
- No lado cliente tem um TMemo onde o usuário digita a mensagem e envia para a outra ponta da conexão.
- No outro lado tem um ´TRichEdit´ que mostrará a mensagem formatada.
- A melhor forma de madar os dados formatados, seria mandar o próprio OBJETO TMemo, com todas as configurações de fonte, cor, tamanho, etc....
- Mas como mandar o OBJETO?
Não tem como enviar um OBJETO em sí, mas podemos enviar sua ´descrição textual´.
Essa descrição e mesma que aparece no arquivo ´.DFM´ do formulário.
Então, o lado cliente envia essa descrição, e o lado servidor a transforma de volta em OBJETO e configura o ´TRichEdit´ com o texto, e com a fonte que recebeu.
O Delphi tem funções para converter Objeto->Texto e Texto->Objeto.
A função abaixo converte Objeto para Texto:
function ObjetoParaTexto(Obj: TMemo): string; var Objeto: TMemoryStream; Texto : TStringStream; begin Objeto := TMemoryStream.Create; Texto := TStringStream.Create(Obj.Text); Objeto.WriteComponent(Obj); Objeto.Seek(0, 0); ObjectBinaryToText(Objeto, Texto); Texto.Seek(0, 0); Result := Texto.DataString; Objeto.Free; Texto.Free; end;
O lado cliente ao invés de mandar o texto digitado no TMemo, envia o TMemo inteiro!
Essa outra função converte Texto->Objeto:
function TextoParaObjeto(Txt: string): TMemo; var Objeto: TMemoryStream; Texto : TStringStream; begin Objeto := TMemoryStream.Create; Texto := TStringStream.Create(Txt); ObjectTextToBinary(Texto, Objeto); Objeto.Seek(0, 0); Result := TMemo.Create(nil); Result.Parent := Form1; Objeto.ReadComponent(Result); Objeto.Seek(0, 0); Objeto.Free; Texto.Free; Result.Visible := False; end;
Agora, quando o servidor receber a mensagem, converte-a para objeto, e em seguida atualiza o TRichEdit:
var Msg: TMemo; begin ... Msg := TextoParaObjeto(Texto); // Texto = mensagem recebida pelo servidor // Considerando que a mensagem será mostrada num TRichEdit... RichEdit1.SelAttributes.Name := Msg.Font.Name; RichEdit1.SelAttributes.Size := Msg.Font.Size; RichEdit1.SelAttributes.Color := Msg.Font.Color; RichEdit1.Lines.Add(Msg.Text); Msg.Free; ... end;
Para entender melhor, segue a ´descrição textual´ de um componente:
object Msg: TMemo Left = 10 Top = 296 Width = 303 Height = 35 Font.Charset = ANSI_CHARSET Font.Color = clMaroon Font.Height = -16 Font.Name = ´Berlin Sans FB Demi´ Font.Style = [fsBold, fsItalic] Lines.Strings = ( ´Msg´) ParentFont = False TabOrder = 1 end
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)