Fórum Calculo de area de um texto #330578

03/10/2006

0

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


Emilio

Emilio

Responder

Posts

03/10/2006

Campsoft

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.


Responder

Gostei + 0

04/10/2006

Micheus

[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:
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


Responder

Gostei + 0

04/10/2006

Emilio

micheus;

Valeu!!! O código funcionou.


Responder

Gostei + 0

04/10/2006

Marco Salles

(PixelsPerInch /2.5401); // acha relação pixels/cm


esta relaçao , vai depender do monitor ???? de onde veio este numero ???


Responder

Gostei + 0

04/10/2006

Night_man

2,5401 e a relacao polegada -> centimetro

1 polegada eh 2,5401 centimetros


Responder

Gostei + 0

05/10/2006

Marco Salles

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


Responder

Gostei + 0

05/10/2006

Micheus

[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]


Responder

Gostei + 0

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

Aceitar