Autor Beitrag
m-werk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 02.07.02 10:06 
Hi, nun ist mein Programm fertig, und jetzt möchte ich eine DEMO-VERSION machen. Ich habe mir da folgendes vorgestellt:

Ist es möglich, dass ich, da ich eine Access-DB habe, nur 10 ode 20 Einträge machen kann und sobald diese erreicht sind, dass ich dann KEINE weiteren einträge erstellen kann?

Es soll aber, wenn die 10 einträge erreicht wurden, dann ein Info-Fenster erscheinen wo drinn steht, 'Bitte fordern Sie jetzt die Original-Software an'

Der User soll aber innerhalb der 10 Einträge trotzdem ändern, navigieren usw. können.

Ist das überhaupt möglich? Wenn ja, wie?

_________________
Grüße, m-werk
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 10:21 
Hi,

du könntest das z.B. im Befor Insert Ereignis deiner Tabelle abfragen:

ausblenden Quelltext
1:
2:
3:
4:
IF (Demo AND (DataSet.Count > 10)) THEN BEGIN
      ShowMessage('Der neue Datensatz kann nicht angelegt werden, da bereits mehr als 10 Datensätze angelegt wurden.');
      Dataset.Cancel;
END;


Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 02.07.02 14:20 
Hi, was bedeutet eigentlich 'demo'

If (Demo AND .....

_________________
Grüße, m-werk
Chris1308
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 220

Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
BeitragVerfasst: Di 02.07.02 14:24 
Das ist eine Variable oder eine Funktion, des Typs Boolean, die hergibt, ob es eine Demo ist.

Chris1308

PS: Ich hab' mal die Antwort übernommen... :lol:
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 14:45 
Danke Chris1308,

genau so ist es. (Kann auch 'ne Konstante sein)
Das sollte andeuten, dass dieser Code nur in der Demo Version ausgefürt werden darf. Wie du festlegst ob das Aktuelle Compilat eine Demo- oder Vollversion wird ist natürlich dir überlassen.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 02.07.02 14:46 
Und wie sieht der Code für die funktion von DEMO aus?

_________________
Grüße, m-werk
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 14:53 
Sowas,
fast gleichzeitig gepostet.

Also nocheinmal. Wie du das machstr ist dir überlassen.

Die einfachste möglichkeit ist es an einer Zentralen Stelle (z.B. in einer Konstantenunit uConst) eine entsprechende Constante zu definiern.
ausblenden Quelltext
1:
2:
CONST
  Demo = TRUE {FALSE};

und dann überall wo du eine Demoeinschränkung haben willst eine Abfage ala
ausblenden Quelltext
1:
IF Demo THEN					

zu machen. Du must natürlich jeweiws uConst (um bei dem vorschlag zu bleiben) einbinden. Je nachdem ob du True oder False auskommentiert hast Compiliertst du dann eine Demoversion oder nicht.

Ein halbwegserfahrener Cracker macht dir aber in ein paar Minuten wieder eine Vollversion aus deinem Demo.

Sich vor den Jungs und Mädels zu schutzen ist aber ein Thema für sich, das sehr viel Diskusionspotential bietet.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Di 02.07.02 16:29 
Hi, ich hab noch nicht ganz kapiert, wo ich diesen Code hinsetzen muß

ausblenden Quelltext
1:
2:
CONST 
  Demo = TRUE {FALSE};


Alles andere dürfte anundfürsich klar sein.
Danke vorerst einmal

_________________
Grüße, m-werk
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Di 02.07.02 17:12 
Demo solle eine Function sein...

if DemoVersion
then ...nur 10 Datensätze
else ... leg soviele an wie du willst

Du must doch irgendwo angeben/erkennen ob es sich um eine Demoversion handelt, oder?

_________________
Keine Signatur ...
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 17:48 
Hallo,

m-werk hat folgendes geschrieben:
Hi, ich hab noch nicht ganz kapiert, wo ich diesen Code hinsetzen muß
ausblenden Quelltext
1:
2:
CONST 
  Demo = TRUE {FALSE};


also ich habe in meinen Projekten immer eine Unit uConst, in welcher ich (wie der name sagt) Konstanten speichere.

Wenn du dieses Prinzip übernehmen willst, dann lege eine neue Unit an (Datei->Neu->Unit) und füge deine Zeile und gegebenenfalls weitere Konstanten ein:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
unit uConst;

interface

CONST
  // Liegt eine Demoversion vor
  Demo = TRUE {FALSE};

  // Zeitkonstanten zur einfacheren Arbeit mit tDateTime (nur als Beipiel für weitere Konstanten)
  zei_hour = 1/24;
  zei_min = Zei_Hour / 60;
  zei_Sec = Zei_Min / 60;

implementation

end.


Das ganze Speicherst du unter einem sinvollen Namen (z.B. uConst).
Jetzt musst du in den uses einer jeden Unit den Namen deiner eben neu erstellten schreiben.
ausblenden Quelltext
1:
2:
3:
4:
implementation
{$R *.DFM}
uses
  uConst;


Danach kannst due Demo wie gezeigt verwenden.

Gruß
Klabautermann

PS: @Steffer lass uns die Sache mal langsam angehen. Verbesserungen kann man leichter ansetzen wenn das Grundprinziep verstanden wurde.
Steffer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 299



BeitragVerfasst: Di 02.07.02 18:40 
@Klabautermann
Wobei das Grundprinzip ja nicht SOOO schwierig ist.

Aber du hast Recht.
Ich verzichte auch auf alle Einwände hinsichtlich der Verwendung von Konstanten als Angabe zur Demoversion :wink:

_________________
Keine Signatur ...
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Di 02.07.02 20:48 
Hi,

aufgeschoben ist ja nicht aufgehoben ;).
Ich habe nur das Gefühl, dass wir hier für m-werk einige neue Dinge bringen (z.B. den Datentyp Boolean ?!?), da sollten wir es nicht überteiben damit er nicht die Lust verliert (und es ihm nicht zu einfach machen, damit er was lernt :twisted:).

Also m-werk, du bist am Zug. Verstehst du alles oder sollen wir dir noch etwas erklären.

Erwartungsvoll
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mi 03.07.02 08:11 
Hi, das mit dem 'Const' als eine eigene Unit ist eine sehr gute Idee. Das werd ich gleich mal ausprobieren.

Man kann ja dann theoretisch für einige Funktionen, die auf einigen forms gleich sind ja immer eine eigene Unit machen, damit auch eine gewisse ordnung und übersicht herscht, oder?

Danke für den vorschlag.

_________________
Grüße, m-werk
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: Mi 03.07.02 09:54 
m-werk hat folgendes geschrieben:
Man kann ja dann theoretisch für einige Funktionen, die auf einigen forms gleich sind ja immer eine eigene Unit machen, damit auch eine gewisse ordnung und übersicht herscht, oder?


Ja, dafür wurden die Units ursprünglich "erfunden". Wenn einige proceduren und Funktionen Thematisch zusammenhängen, kannst du diese auch in Objekten-Zusammenfassen - aber das ist ein anderes Thema.

Wenn du das prinzip der Demo Geschichte und warum die bedingung
ausblenden Quelltext
1:
IF DEMO THEN					

funktioniert, verstanden hast, dann kann Steffer dir ja erklären, warum eine funktion besser ist als eine Konstante.

Gruß
Klabautermann
m-werk Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 51



BeitragVerfasst: Mi 03.07.02 10:30 
Ja, das mit der funktion habe ich schon verstanden.

If Demo then....

Wenn das Programm eine Demoversion ist, dann soll diese Funktion oder Procedure ausgeführt werden ansonsten soll eine andere Funktion oder Procedure ausgeführt werden.

(Dies ist jetzt eingedeutscht)

Ich bin aber gerade drauf gekommen, dass aber eigentlich das gar nicht nötig bei meinem Programm ist.

Ich habe ja 2 Versionden davon. Eine Version ist die Vollversion und die andere Version ist die Demo Version.

Dann bräuchte ich ja eigentlich die funktion von demo überhaupt nicht. Ich kann ja direkt bei der Demoversion sagen:

ausblenden Quelltext
1:
2:
3:
4:
IF (DataSet.Count > 10) THEN BEGIN 
      ShowMessage('Der neue Datensatz kann nicht angelegt werden, da bereits mehr als 10 Datensätze angelegt wurden.'); 
      Dataset.Cancel; 
END;


Das müßte ja eigentlich reichen, oder?

_________________
Grüße, m-werk
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Mi 03.07.02 11:04 
m-werk hat folgendes geschrieben:
Dann bräuchte ich ja eigentlich die funktion von demo überhaupt nicht. Ich kann ja direkt bei der Demoversion sagen:
Aber dann entwickelst Du ja 2 Programme getrennt von einander. Mach es so wie es oben vorgeschlagen wurde. Also eine Funktion die etwas so aufgebaut ist:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Funtion IsDemo: Boolean;
Begin
{$IFDEF DEMOEDITION}
  IsDemo := True;
{$ELSE}
  IsDemo := False;
{$ENDIF}
End;

Und überall wo es einen Unterschied zwischen Demo und Vollversion gibt machst Du halt die o. g. Prüfung rein.

Dadurch hast Du nur ein Projekt das du Pflegen musst und kannst dann beim Compilieren einfach per Conditional-Define festlegen welche Version Compilert werden soll.

Gruß
TINO
*Dawson*
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 05.07.02 14:14 
Titel: Conditional-Define ?!
Hallöchen...

jetzt wird es Interessant.. wie bekommt denn meine Demo Variable beim Compilieren mit, ob ich eine Demo oder Full Version Compiliere ?

Ich kenne zwar in den Optionen die möglichkeit TESTVERSION zu aktivieren, aber ist es auch damit möglich im Programm darauf zu reagieren ?

Grüße Marcus

_________________
Wahrscheinlich geht es auch anderes,
aber anders ist ja nicht das selbe...
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 05.07.02 14:16 
Titel: Re: Conditional-Define ?!
*Dawson* hat folgendes geschrieben:
wie bekommt denn meine Demo Variable beim Compilieren mit, ob ich eine Demo oder Full Version Compiliere ?

Habe ich doch oben geschrieben: per IFDEF!
*Dawson*
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19



BeitragVerfasst: Fr 05.07.02 14:26 
Titel: upps übersehen...
Na das hab ich ja voll nicht gesehen... sorry.

Also reagiert die Abfrage: {$IFDEF DEMOEDITION}
auf das Optionsfeld: Testversion ?!

Spielt es eine rolle, ob Deutsche oder Englische Delphi Version, oder ist dies bei beiden gleich ?

Marcus

_________________
Wahrscheinlich geht es auch anderes,
aber anders ist ja nicht das selbe...
Tino
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Veteran
Beiträge: 9839
Erhaltene Danke: 45

Windows 8.1
Delphi XE4
BeitragVerfasst: Fr 05.07.02 14:38 
Wo gibt es denn die Option Testversion?

Wenn Du in den Projektoptionen -> Verzeichnisse/Bedingungen -> Bedinungen z. B. DEMOEDITION angibst kannst Du halt im Code prüfen ob dieser Coditional-Define gesetzt ist.

Also: Ob das Conditional-Define DEMOEDITION gesetzt ist (in den Projektoptionen [s. 2. Absatz] oder direkt im Code) oder nicht kannst Du dann halt im Code mit
{$IFDEF DEMOVERSION} ... {$ENDIF}prüfen!

Gruß