Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Lizenzabfrage vor Programmstart (https://www.delphipraxis.net/127819-lizenzabfrage-vor-programmstart.html)

Jens Hartmann 19. Jan 2009 17:07


Lizenzabfrage vor Programmstart
 
Hallo,

Mein Problem besteht in folgendem:

Ich habe meine Anwendung jetzt so weit Fertig, das mir nur noch die Lizenzabfrage fehlt.
Ich weiß, das hier schon des öfteren darauf hingewiesen worden ist, das das eh nichts bringt, weiß ich auch, möchte sie jedoch trotzallem in meinem Programm implementieren.

Ich habe die Lizenzdaten verschlüsselt fertig und habe auch das einlesen und soweiter schon realiseirt und geprüft. Jetzt möchte ich eigendlich nur noch eins. Die Lizenzdaten nicht bei Form.Create einlesen, sondern nach dem Doppelklick auf meine EXE Datei soll sich einen Form Öffne, in die der Nutzer seinen Lizenznummer eingeben muss.

Hat er diese einmalig eingegeben, soll das Programm natürlich beim nächsten Start nicht mehr Fragen.
Diese Ganzen Sachen, mit dem Abfragen, denke kriege ich hin. Was mir fehlt und wo ich hoffe, das mir dabei jemand helfen kann, wie bekomme ich es hin, das nicht mein Programm sondern erst diese Lizenzform Startet.

Vielen Dank schon mal.

Gruß Jens :hi: :hi: :cheer:

DeddyH 19. Jan 2009 17:08

Re: Lizenzabfrage vor Programmstart
 
Du könntest die Projektdatei editieren.

Larsi 19. Jan 2009 17:08

Re: Lizenzabfrage vor Programmstart
 
In das Hauptform könnste ja im OnShow einfach folgendes reinschreiben:

Delphi-Quellcode:
Form1.Visible := false;
Form2.Show;

Die Muhkuh 19. Jan 2009 17:10

Re: Lizenzabfrage vor Programmstart
 
Dann hast bei jedem OnShow die Lizenz, doll ;)

Projektdatei ist ein guter Ort dafür.

DeddyH 19. Jan 2009 17:10

Re: Lizenzabfrage vor Programmstart
 
Larsi, mal versucht?

Douglas Quintaine 19. Jan 2009 17:14

Re: Lizenzabfrage vor Programmstart
 
Öhm wo is das Problem? Du prüfst bei Programmstart ob eine gültige Lizenz vorliegt, wenn ja startet dein Programm normal. Wenn nein, sperrst du das Hauptform und lässt den Lizenzdialog anzeigen. Das alles kann man FormCreate des Hauptforms passieren.

Jens Hartmann 19. Jan 2009 17:25

Re: Lizenzabfrage vor Programmstart
 
Was bitte heißt Larsi mal versucht.

Also ich bastel gerate an dem Form.Show und das Funtz mal noch nicht so richtig.

Douglas Quintaine 19. Jan 2009 17:26

Re: Lizenzabfrage vor Programmstart
 
Vergiss das von Larsi!

Jens Hartmann 19. Jan 2009 17:32

Re: Lizenzabfrage vor Programmstart
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also, mit dem Form.Visible und Show gibt auf jedenfall folgende Fehlermeldung.

DeddyH 19. Jan 2009 17:42

Re: Lizenzabfrage vor Programmstart
 
Deswegen ja meine Frage an Larsi :mrgreen:

Jens Hartmann 19. Jan 2009 17:46

Re: Lizenzabfrage vor Programmstart
 
So leider ist das so eine Fehlanzeige, im OnShow kann man die Eigenschaft von Visible nicht verändern und im Oncreate kommt es zu der oben genannten Fehlerursache.

Habe leider momentan keinerlei Ideen.

Und das mit Larsi immer noch nicht verstanden

MFG

Jens

DeddyH 19. Jan 2009 17:49

Re: Lizenzabfrage vor Programmstart
 
Zitat:

Zitat von Jens Hartmann
...und im Oncreate kommt es zu der oben genannten Fehlerursache.

Hab ich was verpasst? Was meinst Du?

Jens Hartmann 19. Jan 2009 17:54

Re: Lizenzabfrage vor Programmstart
 
Ich hoffe nicht das du was verpasst hast.

Ich habe deine Aussage mit Larsi nicht verstanden.

Wer oder was ist das.

Und wenn die andere Möglichkeit Funktionieren sollte, bekomme ich sie nicht hin.

MFG

Jens

DeddyH 19. Jan 2009 17:57

Re: Lizenzabfrage vor Programmstart
 
Larsi hat Dir in #3 einen Vorschlag gemacht. Da ich weiß, dass das so nicht geht, habe ich ihn gefragt, ob er das schon einmal versucht hat.

lbccaleb 19. Jan 2009 17:59

Re: Lizenzabfrage vor Programmstart
 
Zitat:

Zitat von Jens Hartmann
Ich habe deine Aussage mit Larsi nicht verstanden.

Wer oder was ist das.

Das ist einer der Nutzer die oebn gepostet haben!!

Jens Hartmann 19. Jan 2009 18:01

Re: Lizenzabfrage vor Programmstart
 
Manchmal ist es besser man steht mal auf und geht an die frische Luft.
Man was habe ich mir gerade auf der Leitung gestanden.

Aber dafür habe ich ja wenigsten selber gemerkt das es nicht geht.

Hat denn vieleicht jemand einen Ansatz für mich.

haentschman 19. Jan 2009 18:03

Re: Lizenzabfrage vor Programmstart
 
ich hätte da noch einen anderen Vorschlag... 8)

- eine Lizenzdatei :thumb: mit den Verschlüsselten Informationen

- da kann sich der User das Eintippen schenken
- keine zusätzliche Form
- keine Datei ---> Demostatus
- Datei vorhanden - Informationen können entschlüsselt werden ---> entsprechende Version
- Datei vorhanden - Informationen können nicht entschlüsselt werden ---> Demostatus

...nur so als Idee :wink:

Douglas Quintaine 19. Jan 2009 18:04

Re: Lizenzabfrage vor Programmstart
 
Zitat:

Zitat von Jens Hartmann
Hat denn vieleicht jemand einen Ansatz für mich.

Habe ich bereits geposted. Vielleicht wäre Lesen sinnvoll.

DeddyH 19. Jan 2009 18:08

Re: Lizenzabfrage vor Programmstart
 
Das könnte so aussehen:
Delphi-Quellcode:
program ProjectLizenzTest;

uses
  Forms, Controls,
  UnitMain in 'UnitMain.pas' {FormMain}
  UnitLizenz in 'UnitLizenz.pas' {FormLizenz};

{$R *.res}

begin
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  if NoLicence then
    begin
      FormLizenz:= TFormLizenz.Create(Application);
      try
        if FormLizenz.ShowModal = mrOK then
          begin
            Application.CreateForm(TFormMain, FormMain);
            Application.Run;
          end;
      finally
        FormLizenz.Release;
      end;
    end
  else
    begin
      Application.CreateForm(TFormMain, FormMain);
      Application.Run;
    end;
end.
Könnte man auch eleganter machen, aber so sollte es schon einmal funktionieren.

Jens Hartmann 19. Jan 2009 20:22

Re: Lizenzabfrage vor Programmstart
 
Hallo nochmal,
Also habe jetzt gebastelt und alles soweit realisiert. Ich habe nur noch das Problemn die Variable aus der Application Programm Lizenziert an meine Hauptfenster zu übergeben.

Besser gesagt ich erstell in meiner Application eine Variable KeyLiz, diese Kann ich allerdings in meinem Hauptfenster nicht abfragen.

Vieleicht noch eine Idee.

Hier mein Quellcode:

Delphi-Quellcode:
var
Key : String;
LIZENZ : String;
Reg : TRegistry;
KeyLizApp : Integer;
begin
  LIZENZ := 'DEMOVERSION';
  Reg := TRegistry.Create;                    // Registry-Objekt erzeugen
  Reg.RootKey := HKEY_LOCAL_MACHINE;
  if Reg.KeyExists ('\SOFTWARE\HU\PRINTSAVE\LIZENZ') = TRUE then
    begin
      if Reg.OpenKey('\SOFTWARE\HU\PRINTSAVE\LIZENZ',TRUE) = TRUE then
        Key := Reg.ReadString('LIZENZ')
      else
      Key := 'DEMOVERSION';
      end;
  Reg.Free;

  Application.Initialize;
    if LIZENZ = KEY then
    begin
      TFLizenz := TTFLizenz.Create(Application);
        if TFLizenz.ShowModal = mrOK then
          begin
            Application.CreateForm(TForm1, Form1);
            Form1.EDKey.Text := 'Lizenz ist OK';
            Application.Run;
          end
        else
            Application.CreateForm(TForm1, Form1);
            Form1.EDKey.Text := 'DEMOVERSION';
            Application.Run;
        end;
end.
Sonst erst schon mal herzlichen Dank DeddyH

Gruß Jens

MuTzE.Y85 19. Jan 2009 21:38

Re: Lizenzabfrage vor Programmstart
 
variable bei public reinschreiben

EDIT:

Weisste wie ich meine?

Jens Hartmann 20. Jan 2009 09:06

Re: Lizenzabfrage vor Programmstart
 
Ja gute Idee, werde ich heute Abend ausprobieren,

Gruß Jens

Jens Hartmann 20. Jan 2009 19:13

Re: Lizenzabfrage vor Programmstart
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo nochmal zusammen,

Habe jetzt alles so gemacht und die Lizezabfrage soweit am laufen.

Sie Quellcode:

Delphi-Quellcode:
    Application.Initialize;
    if Lizenzkey = 'Lizenznummer: Demoversion' then
    begin
      TFLizenz := TTFLizenz.Create(Application);
        if TFLizenz.ShowModal = mrOK then
          begin
            Form1.Lizenznummer := True;
            Application.CreateForm(TForm1, Form1);
            Application.Run;
          end
        else
          begin
            if TFLizenz.ShowModal = mrCancel then
            Form1.Lizenznummer := False;
            Application.CreateForm(TForm1, Form1);
            Application.Run;
          end;
        end;
end.
Leider wird mir bei dem Zuweisen der Variablen immer noch der Fehler (siehe Anhang) beim Compelieren gemeldet.

Woran könnte das noch liegen?

MFG Jens

DeddyH 20. Jan 2009 19:16

Re: Lizenzabfrage vor Programmstart
 
Und wenn Du die Zeilen mit "Form1" mal auskommentierst?

Jens Hartmann 20. Jan 2009 19:19

Re: Lizenzabfrage vor Programmstart
 
Wenn ich die Zeile auskommentiere, ist der Fehler nicht mehr da und mein Programm läuft.
Allerdings, hat meine Programm ja jetzt leider den Übergabe Wert das eine gültige Lizenz vorhanden ist nicht.

MFG

Jens

DeddyH 20. Jan 2009 19:22

Re: Lizenzabfrage vor Programmstart
 
Mein obiger Beispielcode war so gedacht, dass das Lizenzformular nur dann mrOK zurückgibt, wenn die Lizenznummer stimmt. Ansonsten bräuchtest Du z.B. eine globale Variable (*pfui*), in der Du Dir merkst, ob die Lizenz gilt.

Jens Hartmann 20. Jan 2009 19:32

Re: Lizenzabfrage vor Programmstart
 
Das mache ich auch so, aber entweder verstehe ich noch irgendwas nicht oder so.

Wenn ich mrOK zurückgebe, wir meine Programm gestartet.
Wenn nicht muss ich doch irgendwie das Programm als DEMO starten.

Und das habe ich halt versucht über mrCancel zu lösen.

:gruebel: :gruebel:

DeddyH 20. Jan 2009 19:37

Re: Lizenzabfrage vor Programmstart
 
Ach ich Knallkopp :wall:. Tausch einfach mal die Zeilen mit Application.CreateForm... und der Zuweisung aus, dann sollte das auch gehen.

Jens Hartmann 20. Jan 2009 19:47

Re: Lizenzabfrage vor Programmstart
 
Ja, das Funtz soweit, nur das Problem und das habe ich leider vermutet. Das Form Create ist ja dann schon durchgeführt und somit kann ich darin natürlich nicht mehr nach dem Rückgabewert fragen.

Habe das jetzt schon mit Onshow Probiert, Funktioniert aber auch nicht

:gruebel:

DeddyH 20. Jan 2009 19:48

Re: Lizenzabfrage vor Programmstart
 
Du hast im OnCreate von Form1 bereits eine Abfrage auf die Lizenz? Das sollte aber doch gehen, wenn Du diese ins OnShow verlagerst.

Jens Hartmann 20. Jan 2009 19:57

Re: Lizenzabfrage vor Programmstart
 
Nein, leider nicht. Habe ich Probiert.


Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  if Lizenznummer = true then
    begin
      Label7.Caption := 'TRUE';
    end
    else
    Label7.Caption := 'FALSE'
end;
Es wird immer FALSE zurückgegeben obwohl ich Lizenznummer eindeutig mit mrOK bestätige.
Es sieht so aus als wird der Wert nicht zugewiesen.

DeddyH 20. Jan 2009 20:00

Re: Lizenzabfrage vor Programmstart
 
Wo steht denn Lizenznummer? Ist das eine Property von Form1?

Jens Hartmann 20. Jan 2009 20:03

Re: Lizenzabfrage vor Programmstart
 
Lizenznummer ist in Form1 unter public eingefügt.

Delphi-Quellcode:
  public
    {Public declarations }
    Datum             :TDateTime;
    Pfad              :String;
    Lizenznummer      :Boolean;
    Seriennummer      :Boolean;
    Registryeintrag   :TRegistry;

DeddyH 20. Jan 2009 20:05

Re: Lizenzabfrage vor Programmstart
 
Sehr merkwürdig. Auch wenn das nicht ganz "sauber" ist, sollte es trotzdem funktionieren. Bist Du ganz sicher, dass ModalResult in der Projektdatei auch richtig ausgewertet wird? Setz doch mal dort einen Breakpoint und schau, wo er hinspringt.

Jens Hartmann 20. Jan 2009 20:16

Re: Lizenzabfrage vor Programmstart
 
Die Auswertung müsste aufjedenfall OK sein, da ich einen Button mit mrOK momentan Manuell ohne Lizenzabfrage betätige.

Delphi-Quellcode:
procedure TTFLizenz.Button1Click(Sender: TObject);
var
Lizenzkey : Boolean;
begin
Lizenzkey := false;
if Lizenzkey = true then
  begin
    BTmrOK.Click;
  end
  else
  ShowMessage('Die Seriennummer oder Lizenznummer stimmen nicht mit der Lizenzdatei überein,'+#13#10+
  'oder es ist keine gültige Lizenzdatei vorhanden!'+#13#10+
  'Nutzen Sie Print/Save als DEMOVERSION oder Versuchen Sie es erneut');
  TFLizenz.Close;
end;
Den Button BTmrOK mit dem ModalResult mrOK betätige ich nicht über die Funktion oben sondern Manuell.

Jens Hartmann 20. Jan 2009 21:48

Re: Lizenzabfrage vor Programmstart
 
Also einfach nochmal zur Info,

Habe jetzt ein paar Breakpoint´s mehr gesetzt und dabei festgestellt, das der Wert TRUE zwar gesetzt wird. Zumindest läuft die Routine durch.

Delphi-Quellcode:
begin
  Application.CreateForm(TForm1, Form1);
  Form1.Lizenznummer := True;
  Application.Run;
end
Aber beim Form OnShow ist der Wert TRUE nich in der Var Lizenznummer

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  if Lizenznummer = true then
    begin
      Label7.Caption := 'TRUE';
    end;
end;
Hier wird die if-Abfrage einfach Übersprungen

:gruebel:

Chemiker 20. Jan 2009 23:05

Re: Lizenzabfrage vor Programmstart
 
Hallo Jens Hartmann,

setze doch mal einen Breakpoint auf die if-Zeile und überprüfe den Inhalt von Lizenznummer.

Vielleicht noch ein Hinweis:

Du kannst bei der Abfrage auch direkt die Lizenznummer abfragen.

Delphi-Quellcode:
if Lizenznummer then
begin
  Label7.Caption := 'TRUE';
end;
Bis bald Chemiker

Jens Hartmann 21. Jan 2009 06:52

Re: Lizenzabfrage vor Programmstart
 
Der Inhalt von Lizenznummer ist "FALSE"

Ich versteh nur nicht warum.

Mit Lizenznummer ohne Form hatte ich auch probiert. Das war nur noch weil ich dachte vieleicht hilft das ja.

MFG

Jens

DeddyH 21. Jan 2009 11:12

Re: Lizenzabfrage vor Programmstart
 
Mach doch in Form1 mal anständige Properties draus statt Variablen (obwohl ich nicht glaube, dass es daran liegt).
Delphi-Quellcode:
private
    ...
    FLizenznummer      :Boolean;
    FSeriennummer      :Boolean;
    ...
public
    {Public declarations }
    ...
    property Lizenznummer: Boolean read FLizenznummer write FLizenznummer;
    property Seriennummer: Boolean read FSeriennummer write FSeriennummer;
    ...

Jens Hartmann 21. Jan 2009 16:38

Re: Lizenzabfrage vor Programmstart
 
Ja, das war leider nichts, wie du schon gesagt hast.
Ich habe jetzt nochmal einen Braekpoint in der Lizenzabfrage von Form1 gesetzt. Der wert ist eindeutig FALSE

Delphi-Quellcode:
procedure TForm1.FormShow(Sender: TObject);
begin
  if Lizenznummer = true then
    begin
      Label7.Caption := 'TRUE';
    end;
end;
Setzt ich aber in der Application meine Caption von Label7 direkt auf 'HALLO WELT' (TestLabel) macht Delphi das. :gruebel:

Delphi-Quellcode:
        if TFLizenz.ShowModal = mrOK then
          begin
            Application.CreateForm(TForm1, Form1);
            Form1.Lizenznummer := True;                 //Variable auf True
            Form1.Label7.Caption := 'HALLO WELT';       //Testtext in Label schreiben
            Application.Run;
          end
Ist doch seltsam oder.
Ich setzt auch in der Gesamten Form1 nirgendwo Lizenznummer anders.

:gruebel:

MFG

Jens


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz