Calculo de area de um texto
Olá pessoal;
Estou fazendo um sistema para um cliente que controla os custos gastos com artigos em um determinado jornal. O meu problema é o seguinte: o jornal é divido em colunas cada coluna tem 5 cm. Eu preciso pegar uma noticia e jogar no sistema e o sistema tem que calcular a altura em cm da noticia, e com esta informação calcular a area ocupada pela noticia. A noticia é somente texto.
Problema:
- Como calular a altura da noticia? A noticia vai estar em um campo RichEdit. Tem dois tamanho de fontes diferentes(arial 10 e Times New Roman 18).
Desde ja agradecido
Estou fazendo um sistema para um cliente que controla os custos gastos com artigos em um determinado jornal. O meu problema é o seguinte: o jornal é divido em colunas cada coluna tem 5 cm. Eu preciso pegar uma noticia e jogar no sistema e o sistema tem que calcular a altura em cm da noticia, e com esta informação calcular a area ocupada pela noticia. A noticia é somente texto.
Problema:
- Como calular a altura da noticia? A noticia vai estar em um campo RichEdit. Tem dois tamanho de fontes diferentes(arial 10 e Times New Roman 18).
Desde ja agradecido
Emilio
Curtidas 0
Respostas
Campsoft
03/10/2006
Fala ai emilio, eu to postando aqui pq sua duvida tbm me criou uma certa curiosidade.... Estes artigos seriam especificamente oque ? noticias, classificados, notas em geral.... eu ja fiz alguns anuncios em jornais aqui da minha cidade, e normalmente pelo que pude perceber, eles cobram por letras. X digitos para o titulo do classificado e X digitos para o corpo do texto. e depois eles perguntam em qual dos padrões vc quer encaixar seu anuncio. no caso de materias e outros tipos de publicação, eu sinceramente nao sei direito como funciona.
Agora, eu acho meio complicado vc tentar definir uma formula 100¬ eficiente para esse tipo de calculo que seu cliente esta necessitando, dado as variantes de tamanho da impressão, se determinadas paginas do jornal, como a primeira e a ultima teriam valores maiores.. eu sinceramente nao sei.
Assim como vc, tambem estou aqui na espectativa de que alguma cerebro iluminado nos dê a resposta para essa duvida.
Um grande abraço.
Agora, eu acho meio complicado vc tentar definir uma formula 100¬ eficiente para esse tipo de calculo que seu cliente esta necessitando, dado as variantes de tamanho da impressão, se determinadas paginas do jornal, como a primeira e a ultima teriam valores maiores.. eu sinceramente nao sei.
Assim como vc, tambem estou aqui na espectativa de que alguma cerebro iluminado nos dê a resposta para essa duvida.
Um grande abraço.
GOSTEI 0
Micheus
03/10/2006
[b:03407d886e]emilio[/b:03407d886e], este exemplo pode servir de ponto de partida para uma solução. Veja se lhe ajuda.
Num form, adicione um RichEdit (sem bordas - bsNone), um botão, e três labels. No OnClick do botão coloque o seguinte código:
Uma vez que são realizadas conversões de unidades, acho que o resultado pode ser aplicado ao impresso. Faça um teste.
[]s
Num form, adicione um RichEdit (sem bordas - bsNone), um botão, e três labels. No OnClick do botão coloque o seguinte código:
procedure TForm1.Button1Click(Sender: TObject); var ColunaPx, AlturaPx :Integer; AlturaCM, InchToCM :Double; begin InchToCM := (PixelsPerInch /2.5401); // acha relação pixels/cm ColunaPx := Round(InchToCM *5); // força largura do RichEdit em 5cm // TextHeight retornará a máxima altura de uma linha AlturaPx := (Canvas.TextHeight(´Aj´) *RichEdit1.Lines.Count) -1; AlturaCM := AlturaPx/InchToCM; // Calcula altura em cm RichEdit1.Width := ColunaPx; RichEdit1.Height := AlturaPx; Label1.Caption := IntToStr(RichEdit1.Lines.Count); Label2.Caption := FormatFloat(´0.00´, AlturaCM); Label3.Caption := Format(´¬fcm x 5cm = ¬fcm´, [AlturaCM, AlturaCM*5]); end;
Uma vez que são realizadas conversões de unidades, acho que o resultado pode ser aplicado ao impresso. Faça um teste.
[]s
GOSTEI 0
Emilio
03/10/2006
micheus;
Valeu!!! O código funcionou.
Valeu!!! O código funcionou.
GOSTEI 0
Marco Salles
03/10/2006
(PixelsPerInch /2.5401); // acha relação pixels/cm
esta relaçao , vai depender do monitor ???? de onde veio este numero ???
GOSTEI 0
Night_man
03/10/2006
2,5401 e a relacao polegada -> centimetro
1 polegada eh 2,5401 centimetros
1 polegada eh 2,5401 centimetros
GOSTEI 0
Marco Salles
03/10/2006
eu não to entendendo...
O que determina o valor de PixelsPerInch ????....
Por exemplo aqui no meu Pc , este valor e de 96
Tb não entendo o que determina o valor de Canvas.TextHeight(´Aj´) ???.
Por exemplo aqui no meu Pc , este valor e de 13.. Que é o mesmo valor de canvas.TextHeight(´qualquerCoisaDiferenteDeVazio´)...[b:a5dd225447]Não muda nada[/b:a5dd225447]
Bem o fato é que tenho um monitor de 17 polegadas e tenho valores diferentes do esperado... :?: :?:
Alem disso , [b:a5dd225447]aumentando[/b:a5dd225447] o tamanho da fonte , não muda esses valores, o que me parece estranho , pois para fontes diferentes deveria ter valores diferentes....
Achei interresante , porque acredito que qualquer solução deveria levar em conta o Texto do Richeedit , mas não consigo ver nenhuma relação com o mesmo
O que determina o valor de PixelsPerInch ????....
Por exemplo aqui no meu Pc , este valor e de 96
Tb não entendo o que determina o valor de Canvas.TextHeight(´Aj´) ???.
Por exemplo aqui no meu Pc , este valor e de 13.. Que é o mesmo valor de canvas.TextHeight(´qualquerCoisaDiferenteDeVazio´)...[b:a5dd225447]Não muda nada[/b:a5dd225447]
Bem o fato é que tenho um monitor de 17 polegadas e tenho valores diferentes do esperado... :?: :?:
Alem disso , [b:a5dd225447]aumentando[/b:a5dd225447] o tamanho da fonte , não muda esses valores, o que me parece estranho , pois para fontes diferentes deveria ter valores diferentes....
Achei interresante , porque acredito que qualquer solução deveria levar em conta o Texto do Richeedit , mas não consigo ver nenhuma relação com o mesmo
GOSTEI 0
Micheus
03/10/2006
[quote:1a2660d402](PixelsPerInch /2.5401); // acha relação pixels/cm
esta relaçao , vai depender do monitor ???? de onde veio este numero ???[/quote:1a2660d402]A idéia é simular no monitor a relação que o colega deseja, já que há uma relação entre o tamanho do fonte e ppp (pixel por polegada).
O que determina o valor de PixelsPerInch ????....
Por exemplo aqui no meu Pc , este valor e de 96
Vem da configuração do seu monitor (Propriedades de Vídeo->Avançadas->Geral-Vídeo-Configuração de ppp). Este valor é modificado para representar fontes de mesmo tamanho(Font.Size) maior no vídeo.Tb não entendo o que determina o valor de Canvas.TextHeight(´Aj´) ???.
Por exemplo aqui no meu Pc , este valor e de 13.. Que é o mesmo valor de canvas.TextHeight(´qualquerCoisaDiferenteDeVazio´)...Não muda nada
É, na verdade seria possível utilizar RichEdit1.Font.Heigth. Mas ele vai mudar conforme o ppp ou Font.Size. Na maioria dos casos será 13, porque o fonte padrão é Arial 8 e o ppp é 96. Se mudar o size para 10, já passará para 16.Alem disso , aumentando o tamanho da fonte , não muda esses valores, o que me parece estranho , pois para fontes diferentes deveria ter valores diferentes....
Achei interresante , porque acredito que qualquer solução deveria levar em conta o Texto do Richeedit , mas não consigo ver nenhuma relação com o mesmo
Realmente fui simplista em meu post. Assumi que os fonts do RichEdit são iguais ao do form. Então corrigindo...AlturaPx := ([b:1a2660d402]-RichEdit1.Font.Height[/b:1a2660d402] *RichEdit1.Lines.Count) -1;
[color=darkred:1a2660d402]Atentar para o sinal negativo invertendo o valor da propriedade que é negativa.[/color:1a2660d402]
Bem o fato é que tenho um monitor de 17 polegadas e tenho valores diferentes do esperado... Question Question
Só se vc tivesse alterado o ppp para ver fontes maiores na sua área de trabalho e aplicações.Minha observação no post inicial:
Uma vez que são realizadas conversões de unidades, acho que o resultado pode ser aplicado ao impresso. Faça um teste.
Isto porque a relação ppp na impressora é bem diferente da do monitor. Entretanto, há um ajuste por parte do SO e não estou certo 100¬ de que a as polegadas ´ocupadas na tela´ corresponda às mesmas polegadas na impressora. Acredito que isto só seria garantido se trabalhar-mos com modo de mapeamente em ambos DC´s (monitor e impressora) em modo MM_LOMETRIC ou MM_LOENGLISH e não em MM_TEXT(se não estou enganado é o padrão).[b:1a2660d402]Marco Salles[/b:1a2660d402], espero ter exclarecido as dívidas e [i:1a2660d402]estou certo de que posso não estar certo 100¬[/i:1a2660d402]
GOSTEI 0