Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Demo mit Ini's (https://www.delphipraxis.net/62952-demo-mit-inis.html)

mOzZzI 11. Feb 2006 20:49


Demo mit Ini's
 
Hai,
wie schaffe ich es mit einer IniFile das Datum reinzuschreiben und dann z.B. nach 14 Tagen, sich das Programm nicht mehr starten lässt, sowas wie eine Demo..., also das er jedes mal überprüft wie viele Tage schon seit dem ersten Start des Programms vergangen sind...

Delphi-Quellcode:
procedure evaluation;
var ini : TIniFile;
begin
  ini := TIniFile.Create('Programmpfad');
 ini.writedate('DATE', 'STARTDATE', Date);
  //??? Wie mache ich das mit das er überprüft wie viele Tage vergangen sind??
  ini.free;
end;
Gruß Philipp

Zacherl 11. Feb 2006 20:52

Re: Demo mit Ini's
 
Du musst mit StrToDate das Datum in einen TDateTime Wert umwandeln. Mit DecodeDateTime kannst du den Wert in Tage, Stunden, Minuten, etc zerlegen.

Den Rest dürftest du ausrechnen können.

Florian

3_of_8 11. Feb 2006 20:54

Re: Demo mit Ini's
 
Allerdings ist das mehr als unsicher. Jeder halbwegs intelligente User könnte das manipulieren.

mOzZzI 11. Feb 2006 21:07

Re: Demo mit Ini's
 
Ja, du hast Recht, aber ich wollte so was mal ausprobieren :stupid:

mOzZzI 11. Feb 2006 21:24

Re: Demo mit Ini's
 
also, bis jetzt bin ich so weit gekommen, aber das funzt nicht...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ini: TIniFile;
begin
  ini:= TiniFile.Create('D:\config.ini');
  ini.WriteDate('DATE', 'STARTDATE', Date);
  ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var ini: TiniFile;
begin
ini:= TiniFile.Create('D:\config.ini');
Label1.Caption:=ini.ReadString('DATE', 'STARTDATE', DateToStr(Date));
Label2.Caption:=ini.ReadString('DATE', 'STARTDATE', DecodeDateTime(Date)) //Undefinerter Bezeichner DecodeDateTime;

Matze 11. Feb 2006 21:26

Re: Demo mit Ini's
 
Zitat:

Zitat von mOzZzI
Delphi-Quellcode:
//Undefinerter Bezeichner DecodeDateTime;

Wie wäre es denn, einmal einen Blick in die OH zu werefen? Dann wüsstest du sofort, dass du die Unit DateUtils einbinden musst.

mOzZzI 11. Feb 2006 21:28

Re: Demo mit Ini's
 
Upps, vergessn

mOzZzI 11. Feb 2006 22:49

Re: Demo mit Ini's
 
Tutmir Leid aber ich komme echt nicht wieter...

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ini: TIniFile;
begin
  ini:= TiniFile.Create('D:\config.ini');
  ini.WriteDate('DATE', 'STARTDATE', Date);
  ini.Free;
end;

procedure TForm1.Button1Click(Sender: TObject);
var ini: TiniFile;
jahr:word;

begin
ini:= TiniFile.Create('D:\config.ini');
Label1.Caption:=ini.ReadString('DATE', 'STARTDATE', DateToStr(Date));
Label2.Caption:=
DaysBetween(DecodeDate(Jahr, Monat , Tag))-DaysBetween(now); //<< Hier komme ich nicht weiter
end;

Matze 12. Feb 2006 08:37

Re: Demo mit Ini's
 
Jetzt schau doch mal in die OH, wie oft denn noch? Dann wüsstest du, dass DaysBetween 2 Parameter erwartet. Für das, was du da fabriziert hast, würde DaysBetween ja völlig witzlos sein.

marabu 12. Feb 2006 10:25

Re: Demo mit Ini's
 
Hallo Philipp,

es macht keinen Sinn, dass du im Ereignis OnCreate() der Form das Startdatum überschreibst. Das Startdatum sollte einzig die Installationsroutine festlegen. Dein Programm sollte das gespeicherte Datum nur mit dem Tagesdatum vergleichen. Gibt es kein Startdatum, dann wurde nicht ordentlich installiert. Damit niemand durch tägliche Vorgabe eines passenden Datums deinen Schutz unterläuft, solltest du das Datum auch nicht im Klartext schreiben:

Delphi-Quellcode:
uses
  DateUtils;

const
  Section = 'Freischaltung';
  Key = 'Testbeginn';
  LuPhiCode = $9A53;
  TrialDays = 30;

var
  StartDay: Word;

begin
  StartDay := ini.ReadInteger(Section, Key, 0);
  if (StartDay = 0) or (DaysBetween(date, StartDay xor LuPhiCode) > TrialDays) then
    // Programm beenden
  else
    // Weiter
  ;
end;
Ein richtiger Schutz ist das aber nicht - mehr eine Spielerei. Sobald du ein geniales Programm geschrieben hast, brauchst du einen richtigen Schutz. Ist das Programm nicht so genial, dann würde ich diesen Schutz nicht einbauen, sonst mag es niemand benutzen.

Grüße vom marabu

mOzZzI 12. Feb 2006 11:49

Re: Demo mit Ini's
 
Danke marabu,
aber wo genau, binde ich das ein?

Ich will ja beim ersten Starten erstmal die ini schreiben, und dann überprüfen, wieviele Tage vergangen sind, nach dem ersten Start...

Gruß Philipp

Khabarakh 12. Feb 2006 12:05

Re: Demo mit Ini's
 
Zitat:

Zitat von mOzZzI
Danke marabu,
aber wo genau, binde ich das ein?

Zeig doch mal _etwas_ Eigeninitiative. Wo wäre ein guter Ort für den Code, damit er ein einziges Mal und beim Start des Programmes aufgerufen wird?

mOzZzI 12. Feb 2006 12:09

Re: Demo mit Ini's
 
OnCreate?

Waldteufel 12. Feb 2006 12:10

Re: Demo mit Ini's
 
Tätärätäääää! Der Kandidat hat 100 Punkte! :party:

mOzZzI 12. Feb 2006 12:17

Re: Demo mit Ini's
 
Zitat:

Zitat von Waldteufel
Tätärätäääää! Der Kandidat hat 100 Punkte! :party:

:corky:

Delphiturbo 29. Okt 2007 23:23

Re: Demo mit Ini's
 
Was steckt in LuPhiCode ?

Ich habe den Code so eingebaut, bekomme ich aber immer das 30 Tage Trial vorbei !!!
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, DateUtils, StdCtrls, shellapi, IniFiles;
  const
  Section = 'Freischaltung';
  Key = 'Testbeginn';
  LuPhiCode = $9A53;
  TrialDays = 30;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  ini: TiniFile;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  StartDay: Word;

begin
Ini := TIniFile.Create(ExtractFilePath(ParamStr(0))+'config.ini');
  StartDay := ini.ReadInteger(Section, Key, 0);
  if (StartDay = 0) or (DaysBetween(date, StartDay xor LuPhiCode) > TrialDays) then
   ShowMessage('30 Tage Trial vorbei') // Programm beenden
  else
   ShowMessage('Trial weiter');
   end; // Weiter

end.
Waran liegt das ?

Garfield 30. Okt 2007 06:44

Re: Demo mit Ini's
 
Zitat:

Zitat von Delphiturbo
Was steckt in LuPhiCode ?

Das ist nur eine Konstante:
Zitat:

Zitat von Delphiturbo
Delphi-Quellcode:
const
  Section = 'Freischaltung';
  Key = 'Testbeginn';
  LuPhiCode = $9A53;
  TrialDays = 30;

Wenn Du in der INI keinen "StartDay" eingetragen hast ist die Trial wegen StartDay=0 immer abgelaufen.

mkinzler 30. Okt 2007 06:49

Re: Demo mit Ini's
 
Eine Sicherung einer Demoversion per ini-datei ist nicht sehr sicher; man könnte so weit gehen zu sagen das deine Mühen umsonst sind
http://www.delphipraxis.net/internal...t.php?t=121822

Delphiturbo 30. Okt 2007 09:06

Re: Demo mit Ini's
 
Zitat:

Zitat von Garfield
Wenn Du in der INI keinen "StartDay" eingetragen hast ist die Trial wegen StartDay=0 immer abgelaufen.

Das habe ich eingetragen
Und so sieht meine config.ini aus:
Code:
[DATE]
STARTDAY=28.10.2007

NormanNG 30. Okt 2007 09:12

Re: Demo mit Ini's
 
Hi,

Zitat:

STARTDAY=28.10.2007
das wird so nichts werden...

Die Prüfung liest das Startdate als (kodierten) Integer ein. Du musst eine Art "Installationsprogramm" schreiben, in dem der INI-Eintrag einmalig (kodiert) gesetzt wird...

Delphiturbo 31. Okt 2007 09:29

Re: Demo mit Ini's
 
Zitat:

Zitat von NormanNG
...Du musst eine Art "Installationsprogramm" schreiben, in dem der INI-Eintrag einmalig (kodiert) gesetzt wird...

Wie ?

mkinzler 31. Okt 2007 09:43

Re: Demo mit Ini's
 
Setzte das datum nicht im Klartext sondern verschlüsselt. Und benenne den Schlüssel am Besten auch gleich in was nichtsagendes um.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:00 Uhr.

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