Autor |
Beitrag |
m-werk
Beiträge: 51
|
Verfasst: 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
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: Di 02.07.02 10:21
Hi,
du könntest das z.B. im Befor Insert Ereignis deiner Tabelle abfragen:
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
Beiträge: 51
|
Verfasst: Di 02.07.02 14:20
Hi, was bedeutet eigentlich 'demo'
If (Demo AND .....
_________________ Grüße, m-werk
|
|
Chris1308
Beiträge: 220
Win XP Prof.
D2005 Prof, D7 Prof, D7 Pers
|
Verfasst: 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...
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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
Beiträge: 51
|
Verfasst: Di 02.07.02 14:46
Und wie sieht der Code für die funktion von DEMO aus?
_________________ Grüße, m-werk
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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.
Quelltext 1: 2:
| CONST Demo = TRUE {FALSE}; |
und dann überall wo du eine Demoeinschränkung haben willst eine Abfage ala
Quelltext
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
Beiträge: 51
|
Verfasst: Di 02.07.02 16:29
Hi, ich hab noch nicht ganz kapiert, wo ich diesen Code hinsetzen muß
Quelltext 1: 2:
| CONST Demo = TRUE {FALSE}; |
Alles andere dürfte anundfürsich klar sein.
Danke vorerst einmal
_________________ Grüße, m-werk
|
|
Steffer
Beiträge: 299
|
Verfasst: 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
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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ß
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:
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.
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
Beiträge: 299
|
Verfasst: 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
_________________ Keine Signatur ...
|
|
Klabautermann
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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 ).
Also m-werk, du bist am Zug. Verstehst du alles oder sollen wir dir noch etwas erklären.
Erwartungsvoll
Klabautermann
|
|
m-werk
Beiträge: 51
|
Verfasst: 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
Beiträge: 6366
Erhaltene Danke: 60
Windows 7, Ubuntu
Delphi 7 Prof.
|
Verfasst: 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
Quelltext
funktioniert, verstanden hast, dann kann Steffer dir ja erklären, warum eine funktion besser ist als eine Konstante.
Gruß
Klabautermann
|
|
m-werk
Beiträge: 51
|
Verfasst: 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:
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
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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:
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*
Beiträge: 19
|
Verfasst: 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
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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*
Beiträge: 19
|
Verfasst: 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
Beiträge: 9839
Erhaltene Danke: 45
Windows 8.1
Delphi XE4
|
Verfasst: 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ß
|
|