Newsgroup: it.comp.lang.delphi
Titolo: Proteggere i propri programmi sulle stampe

Mi e' stato chiesto di proteggere un programma in questo modo: se il programma
non e' registrato, su qualsiasi stampa (uso quickreport) deve apparire come
sfondo una grossa scritta "DIMOSTRATIVO".Dal momento che l'utente si registra,
la scritta deve scomparire.
Essendo il programma distribuito con un editor di fincati, che permette al
cliente di personalizzarsi le fatture ecc.., devo di conseguenza poter
applicare questa protezione a runtime.
Qualcuno hai qualche consiglio da darmi, o pezzi di codice?
Ciao,
-- 
Morde. 
(morde at programmer dot net)

cosi a occhio, suggerirei l'evento onBeforePrint:
procedure TForm1.QuickRep1BeforePrint(Sender: TCustomQuickRep;
  var PrintReport: Boolean);
  begin
  // metti uno sfondo al report
  end;
Poi, nella create del report mettere un check:
if IsRegistered then
  Self.OnBeforePrint = Nil
else
  Self.OnBeforePrint := ...
Se poi hai gia del codice nell'evento OnBeforePrint, alla create non fai un
tubazzo e metti un if direttamente nel codice legato all'evento.
Riguardo il codice per mettere uno sfondo ad un QR mi pare sia passato qui x
il ng.
Bye
A

il ng.
Grazie Alberto :) 
Purtroppo non ho mai sviluppato sui report, e mi trovo digiuno di know-how :(


   Self.OnBeforePrint := ...
Se hai molti Report potrebbe essere un lavoro pesante da fare e da
mantenere. Potresti pensare

 mantenere. Potresti pensare
Scusate mi è scappato il post. 
Dicevo: Potresti pensare di creare una classe astratta ed istanziare
classi concrete in funzione o meno della registrazione.
Per quanto riguarda la protezione del codice potresti provare la suite
OnGuard di TurboPower. Non l'ho mai usata, ma le darei uno sguardo
comunque.
ciao
Antonio

Se ti può interessare io ti posso dire come farlo scrivendo direttamente sul
canvas della stampante... non so se ti può essere utile... facci saxe :)

Forse anche questo aiuta ....
http://groups.google.it/groups?hl=it&lr=&ie=UTF-8&threadm=MPG.18b4e83f64c93b
c6989681%
40News.CIS.DFN.DE
&rnum=2&prev=/groups%3Fq%3Dsfondo%2Bquick%2Breport
%2Bgroup:it.comp.lang.delphi%26hl%3Dit%26lr%3D%26ie%3DUTF-8%26group%3Dit.com
p.lang.delphi%26selm%3DMPG.18b4e83f64c93bc6989681%
2540News.CIS.DFN.DE
%26rnum
%3D2


Sulla versione registrata ci aggiungerei anche una cosetta del tipo
"Concesso in licenza a: "
con il nome del cliente, giusto per evitare che con una sola attivazione
facciano più installazioni.
Ciao,
MM

Forse anche questo aiuta ....
...magari rendendolo più corto...
http://makeashorterlink.com/?L18D32C25
-- 
Andrea Laforgia - a.laforgia(at)
libero.it
"There are three kinds of people in this world; 
 those who are good at maths and those who aren't".

Come funziona? Cosě la prossima volta lo uso.... grassie :))

 classi concrete in funzione o meno della registrazione.
Ottima idea.
Non avevo considerato che i report potevano essere + di 1.
Bye
A

comunque.
Si, la prima scelta era ricaduta su OnGuard (che io stesso suggerisco),
purtroppo per me l'implementazione di un sistema di protezione completo (con
la possibilita' cioe' di estendere il periodo di prova, modificare runtime la
data di expire, abilitare certi moduli in base alla chiave di
registrazione/estensione licenza) purtroppo appunto mi sono trovato in
difficolta'.
Poi Fabrizio (il nostro eroe dei lock di acces ;-)) mi ha consigliato
mxprotector e l'ho trovato davvero semplice da usare.
(
http://www.maxcomponents.net/download.html#PROTECTOR
)



Semplicemente andando su 
http://makeashorterlink.com/
 e facendo il paste
dell'urlone nell'edit. Poi premi il pulsante e lui tiritorna il link corto!
Comunque ho trovato un modo quasi infallibile per accorciare entro certi
limiti anche i link diretti di google: e' sufficente lavorarsi il linkone in
maniera da passargli al motore stesso solo il parametro *threadm*.
Per i meno tecnici, letteralmente faccio cosi': 
Partendo dal linkone:
http://groups.google.it/groups?dq=&hl=it&lr=&ie=UTF-8&threadm=tq4igv
 [CUT]
mi posiziono all'inizio e col cursore mi sposto qui:
http://groups.google.it/groups
?
da qui, premo canc fino ad arrivare alla parola threadm (che sarebbe il
parametro da passare al motore). 
http://groups.google.it/groups?&threadm=tq4igv0id01h4asna2hgum0h6l2kr
 [CUT] 
Da qui, lascio i caratteri restanti *fino al prossimo carattere & (escluso)*,
e cancello tutto il resto del link.
Alla fine dovrebbe risultare una stringa simile:
http://groups.google.it/groups?&threadm=tq4igv0id01h4asna2hgum0h6l2krmnm4d%404ax.com
Provare per credere!


 dell'urlone nell'edit. Poi premi il pulsante e lui tiritorna il link
corto!
Per quanto tempo viene mantenuto?

Per quanto tempo viene mantenuto?
Non ci sono scadenze.  Almeno non nelle intenzioni di chi mantiene il
servizio.  


servizio.
A questo proposito anche io facevo largo uso di makeashortelink, poi ho tenuto
conto del fatto che se un domani il tizio che lo gestisce chiude la baracca,
ci ritroviamo con un sacco di riferimenti persi...


ci ritroviamo con un sacco di riferimenti persi...
Anche Google, se è per questo, potrebbe fare un pò di pulizia nei suoi
archivi, non credo abbia HD infiniti.  A me non è mai interessato (non
è mai stato utile) mantenere dei riferimenti molto a lungo.


  end;
Per quanto mi ci sforzi, sara' la stanchezza, sara' il caldo, ma non riesco a
visualizzare nulla...
Questo e' il codice dove sono intervenuto, ho provato prima a stampare sempre
l'immagine demo, dopo mettero' il flag se registrato o meno.
procedure TReportDesignerForm.QuickReportBeforePrint( Sender: TCustomQuickRep;
var PrintReport: Boolean);
var imgDemo : TQRImage;
begin
   imgDemo := TQRImage.Create(Sender);
   imgDemo.Picture.Bitmap.LoadFromFile('demoversion.bmp');
   imgDemo.AutoSize := True;
   imgDemo.Center := True;
   imgDemo.Top := 150;
   imgDemo.Left := 48;
end;
A parte le varie free ecc.. dove sbaglio?


la butto li:
      imgdemo.PARENT := SENDER
Bye
A

      imgdemo.PARENT := SENDER
Grazie albert, ha funzionato, ora su ogni pagine viene mostrata la bitmap.
E' rimasto un problema pero': 
   imgDemo := TQRImage.Create(Sender);
   imgDemo.Parent := Sender;
   imgDemo.Picture.Bitmap.LoadFromFile('faraone1.bmp');
   imgDemo.SendToBack;
   imgDemo.Picture.Graphic.Transparent := True;
   imgDemo.AutoSize := True;
   imgDemo.Center := True;
   imgDemo.Top := 150;
   imgDemo.Left := 48;
nemmeno con questo codice riesco a far si' che la bitmap venga visualizzata
dietro a tutti gli altri controlli (come una sorta di sfondo)
Any idea?
Ciao e grazie ancora!


prova a cambiare le regole!
La QRImage la metti sempre: La inserisci nel report a design time e la metti
come sfondo.
Poi nella before print ci metti:
imgDemo.Visible := IsDemoMode;
ByeBye
A

mi correggo:
Poi nella before print ci metti:
 imgDemo.Visible := IsDemoMode;
if imgDemo.Visible then
  imgDemo.Picture.Bitmap.LoadFromFile('faraone1.bmp');
A

come sfondo.
Alberto purtroppo con il programma fornisco un editor dei fincati che
utilizza, ecco perche' devo fare tutto a runtime... :-(((


 utilizza, ecco perche' devo fare tutto a runtime... :-(((
Sorry!
Avevo dimenticato questo dettaglio.
Cerco di fare qualche test ma non ti rpometto niente: sono nei casini.
Bye
A

idea folle...
Fai il contrario.
Invece di mettere dietro l'immagine, sposta avanti tutto il resto.
A

Invece di mettere dietro l'immagine, sposta avanti tutto il resto.
Sempre ringraziandoti per il tempo che mi dedichi, oggi provero' a cambiare
strada: invece di usare una bitmap, creo una o piu' qrlabel e le inserisco nel
fincato.
