Alinhar no TRichEdit

Delphi

07/07/2010

Ola!   Tenho um programa q cria receitas medicas baseado em elementos q o usuario vai criando ela.   a receita e desse jeito:   Uso Oral 5-HIDROXITRIPTOFANO..............................36MG 5-HIDROXITRIPTOFANO..............................2MG ALFATOCOFEROL..............................10UI AROTIN..............................96MG    so que os MG e UI estao desalinhados.Eu gostaria de q saissem sempre alinhadas independente do tamanho da palavra (arotin,alfatocoferol...).   este é o codigo q vai no button:  
procedure TForm2.btAdicionarCompClick(Sender: TObject);
Var
  Subs : String;
begin
  if edtMedida.Text <> '' then
  Begin
   Subs := DM.cdsSubs.FieldByName('SUBSTANCIA').AsString + '..............................' + edtMedida.Text + DM.cdsSubs.FieldByName('MEDIDA').ASSTRING  + #13#10 ;
   With mReceita do
   Begin
     SelStart := Linha;
     Linha := Linha +  Length(Subs);
     SelAttributes.Style := [fsItalic];
     SelAttributes.Name := 'Times New Roman'; 
     SelAttributes.Size := 9;
     SelText := DM.cdsSubs.FieldByName('SUBSTANCIA').AsString + '..............................' + edtMedida.Text + DM.cdsSubs.FieldByName('MEDIDA').ASSTRING + #13#10;
   end;
   edtMedida.Clear;
   edtMedida.SetFocus;
   btAdicionarComp.Enabled := False;
  end;
end;
    Como eu faço isso? Obrigado
Eduardo Jr

Eduardo Jr

Curtidas 0

Respostas

Wilson Junior

Wilson Junior

07/07/2010

Utilize a fonte Courier New e olhe este link para colocar a quantidade de "...." https://www.devmedia.com.br/post-16040-Preenche-uma-string-com-uma-quantidade-de-caracteres-podendo-alinhar-a-esqueda-ou-direita.html

Espero ter colaborado.
GOSTEI 0
Marco Salles

Marco Salles

07/07/2010

Paulista , tudo bem amigo. Pois bem o Delphi ja tem duas funçoes Nativas que facilita muito este Trabalho Sem ter que recorrer a Ifs , For , While e Count  , Copy etc   Veja  
function ColocarTexto(
  const Texto: string;const Qtd: integer;const Ch: Char;const pDireita:boolean = True): string;
begin
case pDireita of
 true:result:= Format('%*S',[Qtd,Texto]);
 false:result:= Format('%-*S',[Qtd,Texto]);
end;
 result:=StringReplace(result,' ',Ch,[rfReplaceAll]);
end;
[code]
 
Para usar
 
[code]
Showmessage(ColocarTexto('15',4,'X')+sLineBreak+
            ColocarTexto('15',4,'X',false));
  Não é mais fácil ?????
GOSTEI 0
Wilson Junior

Wilson Junior

07/07/2010

O Marco, tudo bem???

Esta rotina que passei, que tenho desde o tempo do Delphi 4, não utilizava ela faz um bom tempo, mas resolvi postar estes tempos atrás. Com CERTEZA a sua rotina é melhor e mais simples.

T+
GOSTEI 0
Marco Salles

Marco Salles

07/07/2010

Paulista , tudo bem amigo. Pois bem o Delphi ja tem duas funçoes Nativas que facilita muito este Trabalho Sem ter que recorrer a Ifs , For , While e Count  , Copy etc   Veja  
function ColocarTexto(
  const Texto: string;const Qtd: integer;const Ch: Char;const pDireita:boolean = True): string;
begin
case pDireita of
 true:result:= Format('%*S',[Qtd,Texto]);
 false:result:= Format('%-*S',[Qtd,Texto]);
end;
 result:=StringReplace(result,' ',Ch,[rfReplaceAll]);
end;
[code]
 
Para usar
 
[code]
Showmessage(ColocarTexto('15',4,'X')+sLineBreak+
            ColocarTexto('15',4,'X',false));
  Não é mais fácil ?????
. Desculpe , ia me esquecendo da função Nativa do Delphi StringOfChar , para o caso de não querer substituição de todos os caracteres ( o que faz o StringReplace(result,' ',Ch,[rfReplaceAll]) na função Anterior  
function ColocarTexto(
  const Texto: string;const Qtd: integer;const Ch: Char;const pDireita:boolean = True): string;
begin
case pDireita of
 true:result:= StringOfChar(Ch,Qtd)+Texto;
 false:result:=Texto+StringOfChar(Ch,Qtd);
end;
end;
  Para usar  
Showmessage(ColocarTexto('15',2,'X')+sLineBreak+
            ColocarTexto('15',2,'X',false));
  Voltando a Dúvida Original :   Sinceramente acho que a maneira que foi colocado aqui , não resolve a formatação pretendida pelo Eduardo A unica coisa que foi comentado é uma maneira talvez mais eficiente de se fazer
Subs := DM.cdsSubs.FieldByName('SUBSTANCIA').AsString + '..............................' + edtMedida.Text + DM.cdsSubs.FieldByName('MEDIDA').ASSTRING  + #13#10 ;
  Mas fica ha meu ver em aberto ...
GOSTEI 0
Marco Salles

Marco Salles

07/07/2010

Eduardo .. Testado o Codigo abaixo e parece que funciona para a sua necessidade  
procedure TForm2.btAdicionarCompClick(Sender: TObject);
Const
 MAX = 25  // Defina o Tamanho Maximo
Var
  Subs : String;
  Qtd:integer;
begin
  if edtMedida.Text <> '' then
  Begin
   Qtd := Max -  (length(DM.cdsSubs.FieldByName('SUBSTANCIA').AsString ) - 
                  length(edtMedida.Text) +
                  length(edtMedida.Text + DM.cdsSubs.FieldByName('MEDIDA').ASSTRING));
   Subs := DM.cdsSubs.FieldByName('SUBSTANCIA').AsString +
           StringOfChar('.',Qtd)+;
           edtMedida.Text + 
           DM.cdsSubs.FieldByName('MEDIDA').ASSTRING;
   With mReceita do
   Begin
     Lines.Add(Subs);
     SelStart := 1;
     SelLength:=Length(mReceita.Text);
     SelAttributes.Style := [fsItalic];
     SelAttributes.Name := 'Courier'; 
     SelAttributes.Size := 9;
   end;
   edtMedida.Clear;
   edtMedida.SetFocus;
   btAdicionarComp.Enabled := False;
  end;
end;

 
GOSTEI 0
Wilson Junior

Wilson Junior

07/07/2010

Foi o que tinha comentado no tópico anterior, coloqcar a fonte como Courier, sendo assim ele conseguirá ficar alinhado.

Espero ter colaborado.
GOSTEI 0
Marco Salles

Marco Salles

07/07/2010

Foi o que tinha comentado no tópico anterior, coloqcar a fonte como Courier, sendo assim ele conseguirá ficar alinhado.

Espero ter colaborado.
Sim , mas somente isto parece que não resolveria . Pq o Eduaro queria que o Texto ficasse Alinhado e não somente os Caracters .  
 so que os MG e UI estao desalinhados.Eu gostaria de q saissem sempre alinhadas independente do tamanho da palavra (arotin,alfatocoferol...).
  No inicio pude perceber que sua dica compreendia , alem da alteração da Font mas tb colocar as Linhas do RichEdit com um Mesmo Tamanho.. Foi onde , sugeri funçoes alternativas para prenchimeto de String chegando ate na função Nativa StringOfChar   Alem do que usar Courier New esteticamente fica melhor do que usar Courier ( MinhaOpinião )
GOSTEI 0
Carlos Mazzi

Carlos Mazzi

07/07/2010

Verdade, essa funcionalidade em ambos casos funciona, testei as duas... agora cabe ao nosso amigo escolhe a que fica melhor para o projeto dele.   Aqui 100%! show de bola...  
GOSTEI 0
Pedro Saraiva.

Pedro Saraiva.

07/07/2010

Programa com códigos fontes Ola pessoal, você programador que quer um aplicativo exemplo para fins comerciais, tenho uma dica, compre o WinPhar que vem com todos os códigos fontes e faça um programa baseado nele, sim ele também vêm com todos os componentes para instalar, voce além de ganhar um programa complidao, ganha tb os seus códigos fontes e seus componentes. O programa foi desenvolvido em Delphi 7 com banco de dados paradox, e custa apenas 20,00 reais
deem uma olhadinha ai no produto
http://produto.mercadolivre.com.br/MLB-149256966-winphar-2008-sistema-para-farmacias-e-drogarias-_JM
e ente em contato pelo e-mail pedroluissaraiva@yahoo.com.br.!  
GOSTEI 0
POSTAR