Newsgroup: it.comp.lang.delphi
Titolo: Proteggere i propri programmi sulle stampe [parte seconda]


Abbandonata la strada delle bitmap (troppo complicato metterla su sfondo) ho
istanziato nel beforeprint del report una qrlabel, centrandola e impostandola
come trasparente.
procedure TReportDesignerForm.QuickReportBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
var lblDemo : TQRLabel;
begin
   Sender.QRPrinter.Title := 'Stampa dimostrativa di xxx';
   if isDemoMode() then begin
      lblDemo := TQRLabel.Create(Sender);
      lblDemo.Parent := Sender;  // causa free implicita?
      lblDemo.Font.size := 25;
      lblDemo.Transparent := True;
      lblDemo.Caption := 'DIMOSTRATIVO';
      // centro la label
      lblDemo.Top := (Sender.Height div 2);
      lblDemo.Left := (Sender.Width div 2) - (lblDemo.Width div 2);
   end;
end;
Questo codicillo fa giusto il suo dovere, ed impedisce che manomettendo i
fincati si possa inibire in qualsiasi modo la scritta dimostrativa.
Vorrei un consiglio: secondo voi e' possibile far comparire questa label
*solo* nella stampa effettiva e *non* nell'anteprima a video? C'e' un evento
particolare da gestire?
Poi ho un dubbio (non ho ancora provato con memcheck): cosi' facendo non si
creano memory leak, vero? Non faccio la free della label perche' dovrebbe
essere invocata in automatico nel destroy del Tcustomquickrep.
-- 
Morde. 
(morde at programmer dot net)

 particolare da gestire?
Hai gia provato con onPreview?
L'unica rottura sarebbe che l'oggetto verrebbe comunque creato, qualora tale
evento venisse generato dopo il beforeprint...

evento venisse generato dopo il beforeprint...
Albert, purtroppo sono gia' passato per questo sentiero, con esiti ahime'
fallaci: per motivi a me ignoti se derivo l'evento QuickReportPreview, al
successivo QuickReportBeforePrint fila liscio ma non appare l'anteprima! viene
come invalidata.
Se non tocco l'evento Preview, allora tutto va liscio e l'anteprima appare per
poter poi essere stampata.
Non so cos'altro provare....


Hai già valutato la creazione di una custom preview?
Dovrei avere il codice da qualche parte.
Appena lo trovo teloposto.
Magari si riesce a impredire la visualizzazione della label.
Ma occorre naturalmente verificare se poi la stampa lanciata dalla preview
ha o meno la label
Bye
A


Senza utilizare l'evento OnPreview, hai provato ad utilizzare l'evento
OnBeforePrint...
Esempio:
procedure TMyReport.MyReportBeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
begin
        {stampa su carta}
       if MyReport.QRPrinter.Destination=qrdPrinter then {Attiva stampa
dicitura demo}
        else {anteprima}
            if MyReport.QRPrinter.Destination=qrdMetafile {controlla non
sono sicuro...}  then
             {etc. etc. etc.}
end;
Controlla  che nelle uses ci siano: Qrctrls, quickrpt, QrPrntr.
Ciao Michele Rossa

Ciao Michele Rossa
Grazie per l'aiuto.


 dall'anteprima puoi invocare la stampa diretta.
Se aggiungo le righe seguenti nel beforeprint
  ...
    if QuickReport2.QRPrinter.Destination=qrdPrinter then
       Application.MessageBox('Invia alla stampante...',
                              'Msg:',mb_Ok+mb_IconInformation)
      else Application.MessageBox('Invia al Video...',
                              'Msg:',mb_Ok+mb_IconInformation);
  ...
anche se lancio la stampa direttamente dall'anteprima mi appare il primo
messaggio ("Invia alla stampante"), è possibile che il quickreport deve
ridisegnare la pagina prima di stamparla e quindi richiamare nuovamente il
beforeprint.
Io uso D3 con QuickReport 2 e quindi non so se lo stesso discorso vale anche
per le versioni successive.
Ciao Michele Rossa

per le versioni successive.
Io uso quickreport 3.5.0 e D6+SP2
Credo che il comportamente delle stampe sia stato ottimizzato, bisognerebbe
vedere i changes attraverso le varie versioni.
Grazie per l'interessamento. :)
Ciao
