Italian community of Lazarus and Free Pascal

Programmazione => Componenti Aggiuntivi => Topic aperto da: Maverich - Aprile 09, 2012, 07:34:17 pm

Titolo: LazReport - frPreview - overload procedure ShowPageNum
Inserito da: Maverich - Aprile 09, 2012, 07:34:17 pm
non uso il Preview predefinito, ma ne costruisco uno personalizzato, utilizzando il componente frPreview.
Visulizzando un report, mi accorgo che presenta una stringa "Page x/xx", ovviamente questa non mi va bene.

Nella unit LR_View, e' presente una procedure private ShowPageNum, dove sPg e' = "Page", ho cercato nelle LResources,LMessages ma non trovo la resource string "sPg"

procedure TfrPreviewForm.ShowPageNum;
begin
  if EMFPages = nil then Exit;
  LbPanel.Caption := sPg + ' ' + IntToStr(CurPage) + '/' +
  IntToStr(TfrEMFPages(EMFPages).Count);
end;

ho 2 possibilita'

- cambiare la Caption nella unit, ma non mi piace (ad es. non poreri cambiarla in base alla lingua)

 LbPanel.Caption := 'Pagina' + ' ' + IntToStr(CurPage) + '/' +
   IntToStr(TfrEMFPages(EMFPages).Count);

- fare l'Overload della procedure ShowPageNum , per poter accedere ai componenti di TfrPreviewForm

1- creo discendente di TfrPreviewForm
2 dichiaro overload di ShowPageNum
3- creo istanza a fPreview
4- chiamo la ShowPageNum variata
* non riesco ad accedere a LbPanel

-- di seguito il codice -- , l'idea mi pare corretta, ma magari ho fatto qualche castroneria.  :-\

type

  { TPreview }

  TPreview = class(TfrPreviewForm)
  private
    procedure ShowPageNum; overload;

  public
  end;

  { TForm3 }

  TForm3 = class(TForm)
    frPreview1: TfrPreview;
    Panel1: TPanel;
    procedure FormShow(Sender: TObject);
    procedure frPreview1Resize(Sender: TObject);

  private
    { private declarations }
    fPreview: TPreview;

  public
    { public declarations }
  end;       

procedure TPreview.ShowPageNum;  overload;
var s: String;
    i: integer;
begin
   s := LbPanel.Caption;   <--- LbPanel non e' accessibile
   i := Pos('Page', s);
   if i > 0 then
     s := 'Pagina ' + Copy(s, i + 1, length(s));
end;   

procedure TForm3.FormShow(Sender: TObject);
begin
   fPreview := TPreview.Create(Application);
end;

procedure TForm3.frPreview1Resize(Sender: TObject);
begin
  fPreview.ShowPageNum;
end;           
Titolo: Re:LazReport - frPreview - overload procedure ShowPageNum
Inserito da: xinyiman - Aprile 10, 2012, 09:02:12 am
Allega un esempio e vedrò cosa riesco a fare!
Titolo: Re:LazReport - frPreview - overload procedure ShowPageNum
Inserito da: Maverich - Aprile 10, 2012, 04:56:22 pm
Allego un'esempio (manda il DB Firebird, ed il file project.ico problemi di spazio)

Vi e' anche un'altro problema:
Creo il report (pulsanter Report), lo visualizzo e lo chiudo/distruggo (pulsante Chiude), lo ricreo
e solleva eccezione

modulo Lr_View line 236 - FWindow.PreviewPanel.Parent := Self;
Titolo: Re:LazReport - frPreview - overload procedure ShowPageNum
Inserito da: xinyiman - Aprile 10, 2012, 04:59:08 pm
Gli ho dato un occhiata ma non sono riuscito a capire perchè! Sorry
Aspettiamo di vedere se qualcuno ha trovato la soluzione!
Titolo: Re:LazReport - frPreview - overload procedure ShowPageNum
Inserito da: Stilgar - Aprile 18, 2012, 12:44:29 pm
Scusa, magari posso sembrare stronzo ...
Ma hai provato a mettere un break point in
Codice: [Seleziona]
procedure TForm3.FormShow(Sender: TObject);
begin
   fPreview := TPreview.Create(Application);
end;

procedure TForm3.frPreview1Resize(Sender: TObject);
begin
  fPreview.ShowPageNum;
end;
Non è che la LpPanel.Captin non sia accessibile dal codice ...
fPreview è a nil.
Vai a creare l'istanza in FormShow ... (immagino volesse essere FormCreate).
La usi in FormResize.
Ma Resize viene chiamato prima di Show....