Array
(
)

QReport com Canvas - Impressão diagonal

Isaiasbass
   - 28 set 2004

É o seguinte...

Tenho um relatório q é uma transferência escolar, onde no local do nome das disciplinas deve aparecer o texto na vertical...coisa q não é possível no QReport , então me utilizei de desenhar o Canvas do QRImage com a seguinte função:

#Código

var
OldFont,NewFont : hFont;
LogFont : TLogFont;
i : integer;
begin
OldFont := Canvas.Font.Handle;
i := 900;
GetObject(OldFont,Sizeof(LogFont),@LogFont);
LogFont.lfEscapement := i;
NewFont := CreateFontIndirect(LogFont);

SelectObject(QRImage19.Canvas.Handle,NewFont);
TextOut(QRImage19.Canvas.Handle,5,83,PChar(´Nome da Disciplina´),Length(´Nome da Disciplina´));

(...)
end;



Onde tenho um loop para vários QRImages e displinas e etc..

O problema é : o sistema rodou assim durante anos sempre em PCs com Windows 9x e sempre funcionou perfeitamente, até o dia q me apareceu um client ecom Win 2000 e Win XP e aí o QReport pirou tudo.

Nos QRImages o texto fica horizontal com fonte muito maior ou não aparece....a cada preview é uma reação diferente, e ainda mais....outros QRLabels tb mudam configuração de Font apenas em QReports onde eu tenho desenhar Canvas em QRImages.

Já tentei de tudo....(ParentFont, deixar tudo(QRBand, Form, QReport) com mesma configuração de fonte q já funcionou mas agora não funciona mais

Gostaria da ajuda de alguem q já tenha trabalhado com algo do tipo...talvez eu esteja esquecendo algum requisito básico..

Vlw...Obrigado

Título editador pelo Moderador (AZ) - Removido: ´....pirou tudo!!´


Aroldo Zanela
   - 29 set 2004

Colega,

Verifique se consegue adaptar este fragmento para sua necessidade:

#Código

procedure SetFontAngle( const vAngle : integer; Canvas: TCanvas );
var LogFont: TLogFont;
OldHandle: DWord;
begin
OldHandle:= Canvas.Font.Handle;
GetObject( OldHandle, SizeOf(LogFont), @LogFont);
LogFont.lfOrientation := vAngle;
LogFont.lfEscapement := vAngle;
LogFont.lfHeight:= -72;
Canvas.Font.Handle := CreateFontIndirect(LogFont);
DeleteObject( OldHandle );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
QuickRep1.PreviewModal;
end;

procedure TForm1.DetailBand1BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
var mf: TMetafile;
mfc: TMetafileCanvas;
begin
mf := TMetafile.Create;
try
mfc := TMetafileCanvas.Create(mf, 0);
with mfc do
try
SetMapMode( Handle, MM_LOMETRIC );
SetFontAngle( 2700, mfc );
TextOut( 0, 0, ´Nome da disciplina´ );
finally
mfc.Free;
end;
QRImage1.Canvas.Draw(100,100,mf);
finally
mf.Free;
end;
end;