28/09/2004

QReport com Canvas - Impressão diagonal

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

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[color=blue:9b2ab31a1a][/color:9b2ab31a1a]

[b:9b2ab31a1a][color=red:9b2ab31a1a]Título editador pelo Moderador (AZ) - Removido: ´....pirou tudo!!´[/color:9b2ab31a1a][/b:9b2ab31a1a]


Isaiasbass

Respostas

29/09/2004

Aroldo Zanela

Colega,

Verifique se consegue adaptar este fragmento para sua necessidade:

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;



Responder Citar