Deixar texto justificado no relatório!
Preciso deixar um texto justificado em um relatório gerado no QuickRep, bem para q fique melhor explicado, gero um recibo, onde traz dados como Nome do Agência, Valor R$, Valor por extenso, n° Orçamento e n° parcela de uma tabela chamada PagtoAgencia.
Trabalho com Delphi7 e InterBase, tentei usar o QRLabel, e o sistema de contagem de letras Length, mas nem sempre dá o mesmo tamanho em comprimento, depende de maiúscula e minúscula, bem imagine q medi em letra maiúscula a largura de uma margem do relatório a outra mede 78 caracteres e em minúscula 104.
como tenho uma variante de maiúsculas e minúsculas gerando esse recibo esse sistema ficou furado, umas linhas se encaixam e outras não, fora que corro o risco de cortar uma palavra no meio.
Alguém saberia me dizer como poderia fazer isso de uma forma melhor, que deixe justificado sem cortar palavras?
Trabalho com Delphi7 e InterBase, tentei usar o QRLabel, e o sistema de contagem de letras Length, mas nem sempre dá o mesmo tamanho em comprimento, depende de maiúscula e minúscula, bem imagine q medi em letra maiúscula a largura de uma margem do relatório a outra mede 78 caracteres e em minúscula 104.
como tenho uma variante de maiúsculas e minúsculas gerando esse recibo esse sistema ficou furado, umas linhas se encaixam e outras não, fora que corro o risco de cortar uma palavra no meio.
Alguém saberia me dizer como poderia fazer isso de uma forma melhor, que deixe justificado sem cortar palavras?
Tatiane
Curtidas 0
Respostas
Aeciovc
31/03/2008
na propriedade alingment tem a opção de dexar Justificado, se for isso!!
GOSTEI 0
Tatiane
31/03/2008
Bem, apenas o Alingment não foi o sulficiente... precisei ir mais além disso, veja como fiz para dar certo:
Coloquei num Form um botao e no evento OnClick do botao coloque o codigo
procedure TForm1.Button1Click(Sender: TObject);
begin
QuickReport2.preview;
end;
end.
peguei um QR coloquei duas bandas... uma de title e uma de Detail
na banda de Deteil coloquei um componente QRMemo, deixei a propriedade Autosize como false e Autostretch como true , na propriedade Font do QRMemo coloquei Courier / Normal / 10 e na propriedade Width digitei 673.
No evento BeforePrint do QR coloque o codigo:
Function justifica(s: string; iMax: integer): string;
var
iCont: integer;
iPos: integer;
sAux: string;
begin
// executa enquanto a string for maior que o comprimento da linha
while Length(s) > iMax do
begin
iPos := iMax;
// procura o espaço que será o final da linha
while s[iPos] <> ´ ´ do
iPos := iPos - 1;
// carrega a substring a ser justificada
sAux := copy(s, 0, iPos);
delete(s, 1, iPos);
iCont := iPos - 1;
// inclui espaços até a substring ter o tamanho máximo da linha
while iPos <> iMax do
begin
// posiciona o cursor para incluir o espaço
while sAux[iCont] <> ´ ´ do
begin
iCont := iCont - 1;
if iCont < 0 then
iCont := iPos - 1;
end;
Insert(´ ´, sAux, iCont);
// ajusta o cursor para que não sejam incluídos mais espaços na
// mesma posição de justificação
while (sAux[iCont] = ´ ´) and (iCont > 0) do
iCont := iCont - 1;
iPos := iPos + 1;
end;
Result := Result + sAux;
end;
Result := Result + s;
s1 := Result;
end;
procedure TQuickReport2.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
s := ´Displays a list of items from which a user can update a field in the current record. The list of display items is a property of the control. ´+
´TDBComboBox Combines an edit box with a list box. A user can update a field in the current record by choosing a value from the drop-down list or by entering a value. The list of display items is a property of the control. ´+
´TDBLookupListBox Displays a list of items from which a user can update a column in the current record. The list of display items is looked up in another dataset. ´+
´TDBLookupComboBox Combines an edit box with a list box. A user can update a field in the current record by choosing a value from the drop-down list or by entering a value. The list of display items is looked up in another dataset.´;
justifica(s,80);
QuickReport2.QRMemo1.Lines.Text := s1;
end;
end.
OBS: O texto digitado na string S, sera formatado em uma linha de 80 colunas e sera mostrado no QR...
Fica aí a dica para quem precisar!
Coloquei num Form um botao e no evento OnClick do botao coloque o codigo
procedure TForm1.Button1Click(Sender: TObject);
begin
QuickReport2.preview;
end;
end.
peguei um QR coloquei duas bandas... uma de title e uma de Detail
na banda de Deteil coloquei um componente QRMemo, deixei a propriedade Autosize como false e Autostretch como true , na propriedade Font do QRMemo coloquei Courier / Normal / 10 e na propriedade Width digitei 673.
No evento BeforePrint do QR coloque o codigo:
Function justifica(s: string; iMax: integer): string;
var
iCont: integer;
iPos: integer;
sAux: string;
begin
// executa enquanto a string for maior que o comprimento da linha
while Length(s) > iMax do
begin
iPos := iMax;
// procura o espaço que será o final da linha
while s[iPos] <> ´ ´ do
iPos := iPos - 1;
// carrega a substring a ser justificada
sAux := copy(s, 0, iPos);
delete(s, 1, iPos);
iCont := iPos - 1;
// inclui espaços até a substring ter o tamanho máximo da linha
while iPos <> iMax do
begin
// posiciona o cursor para incluir o espaço
while sAux[iCont] <> ´ ´ do
begin
iCont := iCont - 1;
if iCont < 0 then
iCont := iPos - 1;
end;
Insert(´ ´, sAux, iCont);
// ajusta o cursor para que não sejam incluídos mais espaços na
// mesma posição de justificação
while (sAux[iCont] = ´ ´) and (iCont > 0) do
iCont := iCont - 1;
iPos := iPos + 1;
end;
Result := Result + sAux;
end;
Result := Result + s;
s1 := Result;
end;
procedure TQuickReport2.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
s := ´Displays a list of items from which a user can update a field in the current record. The list of display items is a property of the control. ´+
´TDBComboBox Combines an edit box with a list box. A user can update a field in the current record by choosing a value from the drop-down list or by entering a value. The list of display items is a property of the control. ´+
´TDBLookupListBox Displays a list of items from which a user can update a column in the current record. The list of display items is looked up in another dataset. ´+
´TDBLookupComboBox Combines an edit box with a list box. A user can update a field in the current record by choosing a value from the drop-down list or by entering a value. The list of display items is looked up in another dataset.´;
justifica(s,80);
QuickReport2.QRMemo1.Lines.Text := s1;
end;
end.
OBS: O texto digitado na string S, sera formatado em uma linha de 80 colunas e sera mostrado no QR...
Fica aí a dica para quem precisar!
GOSTEI 0