Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Impresión
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Uses en FastReport

Buenas, la verdad, es que estoy medio perdido con este tema.
No puedo hacer que funcione una dichosa "uses" dentro de FastReport. Tal vez sea porque no se puede (de hecho los manuales dicen que sí) o yo no estoy dando en la tecla.

En realidad lo único que quiero hacer es que me muestre un cartel que me diga que objeto se va imprimiendo. Al estilo OutputDebugString(), la cuestión es que no he conseguido hacerlo.

No tiene sentido poner un ShowMessage() porque se detendría en cada cosa que se vaya poniendo en la hoja, por eso mi intención es que se vayan registrando en algún lugar, y me pareció lo mas simple ponerlos en los Eventos de Delphi.

Si no puedo ponerlos ahí a los mensajes, quisiera me dijeran donde.

Muestro aquí un pedacito de código de lo que quiero hacer.
Código Delphi [-]
uses
  'C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\source\rtl\sys\System.SysUtils.pas';
 
procedure Memo1OnAfterPrint(Sender: TfrxComponent);
begin
  Outputdebugstring('Hola');
end;

Begin

end.

Cuando quiero ejecutar esto me dice "Begin expected".

Bueno, espero se entienda y me puedan dar una mano.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 18-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Probá asi:

Código Delphi [-]
uses
 System.SysUtils;
Responder Con Cita
  #3  
Antiguo 18-03-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Las uses no van entre comillas. No son un string.
Prueba como te dice AgustinOrtu.

Si el compilador te dice que no encuentra esa librería, deberás darle los path en las opciones del proyecto.

En Delphi 6 es Project --> Options --> Directories/conditionals --> Search path.
Responder Con Cita
  #4  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question

Lo he probado como me dijeron, pero ahora sale el cartel "Identifier expected"
Código Delphi [-]
uses
  System.Sysutils;

Luego, fui a Project --> Options --> Directories and Conditionals --> Include file search text --> C:\Program Files (x86)\Embarcadero\RAD Studio\12.0\source\rtl\sys, pero la cosa no cambia. Estoy en Delphi XE5.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #5  
Antiguo 18-03-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Vas a tener que darnos más información:
* Pon el mensaje de error completo y sin traducir. Puede ser que el mensaje de "Identifier Expected" se refiera a alguna otra línea.
* Muestra el código que tienes hasta ahora. El real. El resumen que has puesto en el primer mensaje, al no ser algo que pueda compilar no nos es útil.

He hecho una prueba desde cero y compila correctamente. Solo hice estos pasos:
1 File --> New --> VCL Forms Application - Delphi
2 En el Formulario que aparece agregué el evento OnShow.
3 Puse la línea que te da problemas.

Quedó así:
Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormShow(Sender: TObject);
begin
   Outputdebugstring('Hola');
end;

end.
Responder Con Cita
  #6  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question

Ahhh, el ejemplo que pusiste funciona porque lo estás haciendo en el TForm1.
Lo que yo digo es dentro de la estructura de FastReport (PascalScript)
Transcribo lo que tengo:

En un DataModule tengo un frxReport (frxTapaBoletinViejo), entrando a él quiero hacer que FastReport me cuente que caja de texto ha sido impresa, de ahí que me pareció lo mas adecuado que eso salga a través de EventLog de Delphi.

Esto es lo que tengo en el DataModule
Código Delphi [-]
unit dmReportes;

interface

uses
  System.SysUtils, System.Classes, frxRich, frxClass, sRichEdit,
  Vcl.ExtCtrls, frxDBSet, FireDAC.Stan.Intf, FireDAC.Stan.Option,
  FireDAC.Stan.Param, FireDAC.Stan.Error, FireDAC.DatS, FireDAC.Phys.Intf,
  FireDAC.DApt.Intf, FireDAC.Stan.Async, FireDAC.DApt, Data.DB,
  FireDAC.Comp.DataSet, FireDAC.Comp.Client, frxExportPDF, frxExportRTF,
  Datasnap.Provider, Datasnap.DBClient, frxDesgn, dataModule, frxExportText,
  Winapi.Windows;

type
  TdtmReportes = class(TDataModule)
    
    frxTapaBoletinViejo: TfrxReport;
    
  private
    { Private declarations }
  public
    { Public declarations }

  end;

var
  dtmReportes: TdtmReportes;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}


end.

Ahora bien, entro en el frxReport (Edit report), me aparecen las herramientas de edición propias de FastReport.

Y en la parte de código (code), es donde intento poner el código que he puesto en post's anteriores.

Dentro de la pestaña Code he puesto lo siguiente:
Código Delphi [-]
uses 
  System.SysUtils;                                                                                    
   

procedure avisoCOMPROBANTEOnAfterPrint(Sender: TfrxComponent);
begin
  OutputDebugString('Hola');                                                        
end;

begin

end.

Al intentar correrlo, el error es "Identifier expected" y el cursos se posiciona en la "S" (la primera) de System.SysUtils

En el formulario FastReport solament tengo una cajita de texto "AvisoComprobante" que es un Memo común de FastReport.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por santiago14 fecha: 18-03-2015 a las 14:37:23.
Responder Con Cita
  #7  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Wink

Intenté poniendo un frxReport en el TForm1 y la cosa no ha cambiado.

Teniendo el componente frxReport en un DataModule como en un TForm no salva el error.

Espero que ahora se entienda mejor.
Gracias compañeros.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #8  
Antiguo 18-03-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Ahora entiendo, no es en Delphi!
Es en el script de FastReport.

El script no está unido a Delphi. No puedes utilizar cosas de tu programa en ese script. Solo lo que FastReport te "traduce".

Creo que lo mejor es que en tu aplicación Delphi agregues algo al evento OnEnterRect del componente frxReport.

Algo así:

Código Delphi [-]
procedure TdtmReportes.frxTapaBoletinViejoEnterRect(Memo: TStringList; View: TfrView);
begin
  OutputDebugString('FastReport ha pasado por ' + View.Name + ', el cual contiene las siguientes líneas: ' + Memo.Text);
end;
Responder Con Cita
  #9  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Wink

Cita:
Empezado por duilioisola Ver Mensaje
Ahora entiendo, no es en Delphi!
Es en el script de FastReport.

El script no está unido a Delphi. No puedes utilizar cosas de tu programa en ese script. Solo lo que FastReport te "traduce".

Creo que lo mejor es que en tu aplicación Delphi agregues algo al evento OnEnterRect del componente frxReport.

Algo así:

Código Delphi [-]
procedure TdtmReportes.frxTapaBoletinViejoEnterRect(Memo: TStringList; View: TfrView);
begin
  OutputDebugString('FastReport ha pasado por ' + View.Name + ', el cual contiene las siguientes líneas: ' + Memo.Text);
end;

Uhhh, perfecto. Si logro hacer funcionar eso sería genial.

Lo pongo en práctica y publico los resultados aquí.

CONSULTA ADICIONAL: ¿De esta manera podría sacar un valor que se generó dentro del Script FastReport? Por ejemplo, ¿el nro de página que acaba de imprimir?.


Muchas gracias.

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #10  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
No hay un evento OnEnterRect()...
¿Será este el evento correcto?:
Código Delphi [-]
procedure TdtmReportes.frxAvisosRTFGetValue(const VarName: string;
  var Value: Variant);

begin

//.....
end;

Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #11  
Antiguo 18-03-2015
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Perdón por la confusión. Lo que te he comentado es de otra vesión de FastReport.
En la que tu comentas (creo que debe ser la 3 o 4) debes utilizar el evento OnBeforePrint.

Código Delphi [-]
procedure TdtmReportes.frxAvisosRTFBeforePrint(Sender: TfrxReportComponent);
begin
  // Si se trata de un Memo
  if (Sender is TfrxCustomMemoView) then
  begin
     with TfrxCustomMemoView(Sender) do
     begin
        OutputDebugString('FastReport ha pasado por ' + Name + ', el cual contiene las siguientes líneas: ' + Memo.Text);
        // ...
     end;
  end;

  // Si se trata de un RichEdit
  if (Sender is TfrxRichView) then
  begin
     with TfrxRichView(Sender) do
     begin
        OutputDebugString('FastReport ha pasado por ' + Name + ' (RichEdit), el cual contiene el tag: ' + TagStr + ' las siguientes líneas: ' + Memo.Text);
        // ...
     end;
  end;

  // Si se trata de una imagen
  if (Sender is TfrxPictureView) then
  begin
     with TfrxRichView(Sender) do
     begin
        OutputDebugString('FastReport ha pasado por ' + Name + ' (Imagen), el cual contiene el siguiente tag: ' + TagStr);
        // ...
     end;
  end;
end;

A OnGetValue entra cada vez que evalúa una variable. Yo la utilizo para pasarle información que sería difícil controlar desde FastReport.
Código Delphi [-]
procedure TdtmReportes.frxAvisosRTFGetValue(const VarName: string; var Value: variant)
begin
  if (UpperCase(VarName) = 'CalculoDificilEnFastReport') then
  begin
     //...
     Value := {Resultado del cálculo}
  end;
end;

Última edición por duilioisola fecha: 18-03-2015 a las 17:36:36.
Responder Con Cita
  #12  
Antiguo 18-03-2015
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Wink

Mi versión de FastReport es la 5.2.
Me voy a sentar manos a la obra y luego publico mis resultados.

Gracias. Santiago.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Paso de parámetros en FastReport o acceder a un label de un fastreport desde asp.net mamen Impresión 1 22-03-2012 15:29:23
FastReport DANNY777 Varios 3 30-10-2006 16:44:31
Pasar de FastReport 2 a FastReport 3 David Impresión 1 18-08-2006 18:14:23
FastReport scooterjgm Impresión 0 22-11-2004 16:17:44
FastReport CLX rvinfo Impresión 2 01-10-2003 13:34:02


La franja horaria es GMT +2. Ahora son las 13:03:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi