GARANTIR DESCONTO

Fórum Label com um mesmos texto de várias cores #339708

31/03/2007

0

Temos uma aplicação que em determinada janela tem um mural (texto que um usuário escreve e fica ´rodando´ para outros usuários, como cotações da bolsa) que atualmente tem uma única cor.
Estamos precisando que o texto ´rolado´ tenha palavras de cores diferentes; não é o texto todo e sim pedaços do texto : ex.:

petrobras 45,19 -2,34 bradesco 83,75 +1,89 etc...
Neste caso -2,34 deveria sair em vermelho; +1,89 em verde e o resto do texto em preto;

Alguem saberia que componente poderia utilizar para isso ou alguma outra forma de fazer isso ?

Um abraço,

Fábio


Fabio Ferreira

Fabio Ferreira

Responder

Posts

01/04/2007

Adriano Santos

[quote:4778c7a0eb=´Fabio Ferreira´]Temos uma aplicação que em determinada janela tem um mural (texto que um usuário escreve e fica ´rodando´ para outros usuários, como cotações da bolsa) que atualmente tem uma única cor.
Estamos precisando que o texto ´rolado´ tenha palavras de cores diferentes; não é o texto todo e sim pedaços do texto : ex.:

petrobras 45,19 -2,34 bradesco 83,75 +1,89 etc...
Neste caso -2,34 deveria sair em vermelho; +1,89 em verde e o resto do texto em preto;

Alguem saberia que componente poderia utilizar para isso ou alguma outra forma de fazer isso ?

Um abraço,

Fábio[/quote:4778c7a0eb]
Fabio, achei interessante a sua rotina. Pode explicar um pouco melhor?
Você não pode criar os labels em runtime?

Eu imagino um panel e dentro dele os labels subindo. Cada label é criado em tempo de execução, ai dá pra cada um ficar na cor que vc quiser.

O que vc precisa fazer é tipo um Applet Java que aparece em alguns sites não é?


Responder

Gostei + 0

02/04/2007

Fabio Ferreira

Olá Adriano,

Esse aplicativo que temos é um software de treinamento em mercado financeiro, simulando o mecanismo de um banco com todos os seus produtos, processamentos, balanços, etc... em que os participantes formam bancos, normalmente entre 7 a 10 grupos de 4 pessaos cada, que interagem entre si, acompanhados por um ´Banco central´ que gerencia todas as operações.

No caso concreto que coloquei, ocorre numa situação em que os bancos estão negociando entre si, fazendo trade, exatamente como ocorre na Bolsa, no pregão online. Na tela de negociações, onde aparecem as cotações, últimos negocios, e outras informações existe um label no qual ficam aparecendo mensagens enviadas pelo banco central. Hoje esse label (Tlabel mesmo) é de uma única cor em que apresenta a mensagem correndo iniciando no lado esquerdo para a direita. Como se fosse um painel circular.

Agora o que queria fazer era com que palavras deste texto fossem coloridos, de cores diferentes. Porem mantendo a mesma estrutura, correndo de forma continua. Nao é um texto fixo em que eu possa substituir palavras em locais determinados. Isso é bastante comum nos sites financeiros e home brokers dos bancos.

Agora como curiosidade, pois tenho acompanhado os varios tópicos que estão acontecendo sobre linguagens, php, java, etc... esse aplicativo que é bastante complexo e abrangente foi desenvolvido originalmente em Clipper, rodava em Novell que era na época a única rede que suportava uma certa quantidade de usuários, com segurança. Depois já na fase do Windows o sistema foi ´portado´ para FiveWin, que era uma biblioteca com cara de Windows porem compilado com o Clipper. É isso que esta rodando até hoje, porém já dando sinais de fadiga. Agora é que estamos desenvolvendo uma nova versão em Delphi.
Ou seja : linguagem boa é aquela que atende bem o que precisamos e que dominamos totalmente.

Fabio


Responder

Gostei + 0

02/04/2007

Adriano Santos

[quote:6781966731=´Fabio Ferreira´]
Ou seja : linguagem boa é aquela que atende bem o que precisamos e que dominamos totalmente.
[/quote:6781966731]
Concordo em número e gênero.
Quanto ao seu caso eu não sei como está estruturado, mas aparentemente eu criaria vários labels, ou seja, cada nova mensagem eu criaria um label e mudaria seu left para a direita a cada n segundos o que daria a impressão de estar movimentando-se. Entendi direitinho o que vc quer, mas não sei se minha solução se encaixaria e não sei se consegui ser claro.

O seu label atual estão dentro de um painel ou coisa assim? Como vc faz pra atualizar? Simplesmente escreve no início e naturalmente o texto vai deslocando?


Responder

Gostei + 0

02/04/2007

Fabio Ferreira

O seu label atual estão dentro de um painel ou coisa assim? Como vc faz pra atualizar? Simplesmente escreve no início e naturalmente o texto vai deslocando?


Acho que com mais de um label não daria não. O label está no topo da tela, sozinho, sem panel ou outra coisa. Não vai naturalmente não. Fiz uma rotina simples que vai acrescentando byte a byte no caption, alinhado a direita, que na medida que vai sendo apresentado, da a impressão que esta rolando na tela. Funciona direitinho. Só falta poder colorir algumas palavras.

Um abraço,

Fabio


Responder

Gostei + 0

04/04/2007

Edilcimar

Tente fazer com que o label seja uma somatória de outros labels, os quais variam a cor de acordo com o valor de variáveis e jogando o valor destas variáveis para dentro dos labels
ex:
If var1>0 then label1.font.color := clBlue else label1.font.color := clRed;
If var2 <= then label2.font.color := clRed else if var2 = 0 then label2.font.color := clYellow else label2.font.color := clGreen; etc...
LabelN := label1 + label2 + ... + labelN-1


Responder

Gostei + 0

04/04/2007

Fabio Ferreira

Ola Edilcimar,

Obrigado pela resposta, mas estou comecando a achar que nao tem como fazer isso, pelo menos nessa estrutura que esta. Coloco abaixo o codigo existente atualmente para facilitar.
Em um micro um usuario escreve um texto que é enviado para os demais que estao em uma determinada tela que tem o procedimento abaixo que é acionado por um timer.
{
************************************************************
***** APRESENTACAO DOS INFORMATIVOS NAS TELAS DO BROKER E REGISTRO DE
***** OPERACOES.
************************************************************
}
PROCEDURE TFRMBROKERPERIODO.APRESENTA_MURAL;
BEGIN
{
***** inicialmente verifica se tem alguma mensagem nova para apresentar
}
IF DMARQUIVOS.TBFUTUINSTEMLINHA.ASINTEGER <> SELF.KP_TEMLINHA THEN
BEGIN
SELF.KP_TEMLINHA:= DMARQUIVOS.TBFUTUINSTEMLINHA.ASINTEGER;
SELF.TXTCIRCULAR:= DMARQUIVOS.TBFUTUINSTXTMURAL.ASSTRING + SPACE(10);
LBLMURAL.CAPTION:= cntSTRINGNIL;
END;
{
***** efetura o ´rolamento´ da mensagem
}
IF SELF.TXTCIRCULAR <> cntSTRINGNIL THEN
BEGIN
LBLMURAL.CAPTION:= LBLMURAL.CAPTION + COPY( SELF.TXTCIRCULAR, 1, 1 );
SELF.TXTCIRCULAR:= SUBSTR( SELF.TXTCIRCULAR, 2 ) + COPY( SELF.TXTCIRCULAR, 1, 1 );
END;

END;


Responder

Gostei + 0

04/04/2007

Marco Salles

desculpe-me a minha ignorancia , mas desde a primeira vista que eu li este tópico pensei igual ao Adriano santos:

[b:cc7dd913ab]Adriano dos Santos[/b:cc7dd913ab]
O seu label atual estão dentro de um painel ou coisa assim?


um painel camuflado da cor da tela , ira rolar , andar , posicionar ,parar aonde a gente mandar .. dentro desse painel dois labels

e claro que voce tem que definir o proprietario desses Dois labels sendo o painel ,isto se pode fazer em RumTime pois a principio o seu Owner e o formulario...Outra opção é a construção desse dois labels em RumTime , ja definindo como proprietário o Painel ou qualqer outra classe de container...

Emfim para referencia-los

TLabel(seuPainel.Components[0]).font.color:=clRed; TLabel(seuPainel.Components[1]).font.color:=clYellow;


e o timer ou Um Threads deslocando o Painel ao Longo do formulario

Foi o que eu entendi do problema :cry: :cry: :cry:


Responder

Gostei + 0

04/04/2007

Adriano Santos

[quote:e689e74487=´Marco Salles´]desculpe-me a minha ignorancia , mas desde a primeira vista que eu li este tópico pensei igual ao Adriano santos:

[b:e689e74487]Adriano dos Santos[/b:e689e74487]
O seu label atual estão dentro de um painel ou coisa assim?


um painel camuflado da cor da tela , ira rolar , andar , posicionar ,parar aonde a gente mandar .. dentro desse painel dois labels

e claro que voce tem que definir o proprietario desses Dois labels sendo o painel ,isto se pode fazer em RumTime pois a principio o seu Owner e o formulario...Outra opção é a construção desse dois labels em RumTime , ja definindo como proprietário o Painel ou qualqer outra classe de container...

Emfim para referencia-los

TLabel(seuPainel.Components[0]).font.color:=clRed; TLabel(seuPainel.Components[1]).font.color:=clYellow;


e o timer ou Um Threads deslocando o Painel ao Longo do formulario

Foi o que eu entendi do problema :cry: :cry: :cry:[/quote:e689e74487]
Pensei igualzinho a você [b:e689e74487]Marco[/b:e689e74487].


Responder

Gostei + 0

04/04/2007

Fabio Ferreira

Adriano / Marco

Muito obrigado pela ajuda de voces. Vou dar uma olhada nesse modo que voces colocaram para ver se da pra fazer o que estou precisando, utilizando o painel, que não utilizo hoje.

No link abaixo tem exatamente o que estou querendo.

http://emacao.folha.uol.com.br/

Um abraco,

Fabio


Responder

Gostei + 0

04/04/2007

Adriano Santos

[quote:d0ad40cb99=´Fabio Ferreira´]Adriano / Marco

Muito obrigado pela ajuda de voces. Vou dar uma olhada nesse modo que voces colocaram para ver se da pra fazer o que estou precisando, utilizando o painel, que não utilizo hoje.

No link abaixo tem exatamente o que estou querendo.

http://emacao.folha.uol.com.br/

Um abraco,

Fabio[/quote:d0ad40cb99]
Ahhhhh, entao...eu faria isso mesmo. Cada um que tah colorido eu criaria um label e de tempos em tempos (1 segundo provavelmente) ia mexendo do left de todos pra esquerda ou direita.
Só fico em dúvidas numa coisa: memória. Criando o label em runtime o tempo todo depois de uma hora rodando ia ficar lento embassado o SO do cara com tanto componente criado. Então faria uma função ou coisa parecida pra dar um free no componente que não está mais visível. Me corijam se estiver errado.


Responder

Gostei + 0

05/04/2007

Marco Salles

não adriano..

Ele não precia criar tantos labels em rumtime eu acho

Pode-se criar esses labels em Design , porem pára referencia-los com o Painel , voce deve atribuir ou Trocar o Proprietário desse labels.
Que pela construção , invariavelmente sera o Formulário...
Isto se faz uma so vez

A outra opiniao é criar esse labels em RumTime uma vez somente na Inicialização
Depois de criados e so mover o panel que ele estarão lá , eles irão acompanhar o painel , pois o Parent sera o Painel

:cry: :cry: :cry:
Mas veja , talves eu ate esteja errado ou pelo meno dando tiro de canhão para matar uma formiga... O fato de se ter um Painel com dois labels , sendo o Parent desse labes o proprio Painel , aonde eu mover esse painel , os Labels também irão mover... Então acho que ne precisa toda esta confusão . E so definir a cor desse labels e ir mudando a posição desse painel que esse labels irão acompanhar

Pois bem fiz um Test simples aqui e +- deu

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to  300 do
begin
sleep(5);
Panel1.Left:=i;
application.ProcessMessages;
end;



Responder

Gostei + 0

05/04/2007

Adriano Santos

[quote:91834f46ff=´Marco Salles´]não adriano..

Ele não precia criar tantos labels em rumtime eu acho

Pode-se criar esses labels em Design , porem pára referencia-los com o Painel , voce deve atribuir ou Trocar o Proprietário desse labels.
Que pela construção , invariavelmente sera o Formulário...
Isto se faz uma so vez

A outra opiniao é criar esse labels em RumTime uma vez somente na Inicialização
Depois de criados e so mover o panel que ele estarão lá , eles irão acompanhar o painel , pois o Parent sera o Painel

:cry: :cry: :cry:
Mas veja , talves eu ate esteja errado ou pelo meno dando tiro de canhão para matar uma formiga... O fato de se ter um Painel com dois labels , sendo o Parent desse labes o proprio Painel , aonde eu mover esse painel , os Labels também irão mover... Então acho que ne precisa toda esta confusão . E so definir a cor desse labels e ir mudando a posição desse painel que esse labels irão acompanhar

Pois bem fiz um Test simples aqui e +- deu

procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i:=0 to  300 do
begin
sleep(5);
Panel1.Left:=i;
application.ProcessMessages;
end;
[/quote:91834f46ff]
Ixi [b:91834f46ff]Marco[/b:91834f46ff], acho que o [b:91834f46ff]Fabio [/b:91834f46ff]já tah ficando doidinho lendo nossas dicas...rsrsrs...
Véio eu acho que pensei diferente de vc numa coisa. Olha só: se tivermos apenas dois Labels movimentando-se da esquerda pra direita ou vice-versa estaremos tb alterando suas cores e textos em runtime certo? Blz, agora imaginemoemos que o label1 está vermelho e o label2 em azul. Cada uma com uma mensagem diferente certo? Blz, só que entra uma terceira mensagem que precisa ser em vermelho novamente, mas só temos 2 labels....como faríamos? Num consigo visualizar uma forma, só criando um terceiro label em runtime, colando o texto nele e mudando sua cor.


Responder

Gostei + 0

05/04/2007

Marco Salles

Ixi Marco, acho que o Fabio já tah ficando doidinho lendo nossas dicas...rsrsrs... Véio eu acho que pensei diferente de vc numa coisa. Olha só: se tivermos apenas dois Labels movimentando-se da esquerda pra direita ou vice-versa estaremos tb alterando suas cores e textos em runtime certo? Blz, agora imaginemoemos que o label1 está vermelho e o label2 em azul. Cada uma com uma mensagem diferente certo? Blz, só que entra uma terceira mensagem que precisa ser em vermelho novamente, mas só temos 2 labels....como faríamos? Num consigo visualizar uma forma, só criando um terceiro label em runtime, colando o texto nele e mudando sua cor.


[b:79f891b3d3]citação Adriano Santos[/b:79f891b3d3]
estaremos tb alterando suas cores e textos em runtime certo

[b:79f891b3d3]a cor pode ser fixa... [/b:79f891b3d3]Mas nada impede que voce altere.. Por exemplo definindo um Tipo de cores e num Processo Ramdomico atribuindo um Indice e direncionando para a cor do label

[b:79f891b3d3]Citação Adriano Santos[/b:79f891b3d3]
Cada uma com uma mensagem diferente certo?


Acho qua a mensagem é unica .. O que vai fazera diferença é o [b:79f891b3d3][u:79f891b3d3]Copy[/u:79f891b3d3][/b:79f891b3d3]

LBLMural1.CAPTION:= LBLMURAL.CAPTION + COPY( SELF.TXTCIRCULAR, 1, ateUmaPoscaoQualquer); LBLMURAL2.CAPTION:= LBLMURAL.CAPTION + COPY( SELF.TXTCIRCULAR,ateUmPosicaoQualqualquer ,Lengt (SELF.TXTCIRCULAR));


Dentro do painel se pode colocar mais Lables , e se ele vai ou não receber Texto , depende do tamanho da mensagem e do que se
determinar para os paramentros da função COPY

[b:79f891b3d3]Citação de Adriano Santos[/b:79f891b3d3]
Ixi Marco, acho que o Fabio já tah ficando doidinho lendo nossas dicas...rsrsrs...

isto é vero...


Responder

Gostei + 0

06/04/2007

Fabio Ferreira

Adriano / Marco

Ixi Marco, acho que o Fabio já tah ficando doidinho lendo nossas dicas...rsrsrs...


Infelizmente em função de um problema maior que apareceu (boleto no Quick Report) não estou podendo mexer nesse projeto agora. Mas não tem problema não; podem continuar mandando essas dicas que depois vou testar para ver se funcionam...

Um abraço a voces,

Fabio


Responder

Gostei + 0

06/04/2007

Adriano Santos

[quote:9ac8a7252c=´Fabio Ferreira´]Adriano / Marco

Ixi Marco, acho que o Fabio já tah ficando doidinho lendo nossas dicas...rsrsrs...


Infelizmente em função de um problema maior que apareceu (boleto no Quick Report) não estou podendo mexer nesse projeto agora. Mas não tem problema não; podem continuar mandando essas dicas que depois vou testar para ver se funcionam...

Um abraço a voces,

Fabio[/quote:9ac8a7252c]
Blz, eu tô na área se precisar é so gritar. Abs.


Responder

Gostei + 0

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

Aceitar