Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Startzähler für Programm erstellen (Wichtig) (https://www.delphipraxis.net/162949-startzaehler-fuer-programm-erstellen-wichtig.html)

GouJetir 10. Sep 2011 12:52

Startzähler für Programm erstellen (Wichtig)
 
Hallo,
ich arbeite gerade an einem Programm,was mehrere Funktionen enthält.
Will aber,dass die Funktionen nacheinander benutzbar sind.Die Funktionen habe ich alle fertig.

Damit die Funktionen freigeschaltet werden,muss der jenige zum Beispiel 10 mal das Programm pro Tag hintereinander starten,dann schaltet sich eine Funktion frei.

Ich würd das Programm noch bevor Wochenende zu ende ist fertig haben.

Habe auch noch eine unbeantwortete Frage: http://www.delphipraxis.net/162935-l...ebbrowser.html

Würde mich sehr freuen,wenn ihr mir schnell helft.

Gruß
GouJetir

Thom 10. Sep 2011 12:59

AW: Startzähler für Programm erstellen (Wichtig)
 
Anzahl der Starts irgendwo speichern - zum Beispiel in der Registry oder in einer Datei und beim nächsten Programmstart wieder auslesen.

GouJetir 10. Sep 2011 13:02

AW: Startzähler für Programm erstellen (Wichtig)
 
Aber wie mach ich das?
Bin noch anfänger und ich will das so machen,dass das Programm die Starts einmal am Tag zählt.Nicht mehrmals an einem Tag.

Matze 10. Sep 2011 13:06

AW: Startzähler für Programm erstellen (Wichtig)
 
Zitat:

Zitat von GouJetir (Beitrag 1123135)
Aber wie mach ich das?
Bin noch anfänger und ich will das so machen,dass das Programm die Starts einmal am Tag zählt.Nicht mehrmals an einem Tag.

Das Datum auslesen und zusammen mit dem Zähler z.B. in einer Ini-Datei ablegen. Beim Programmstart schaust du, ob es einen Eintrag mit dem aktuellen Datum gibt, wenn ja, liest du die Zahl aus und erhöhst sie, wenn nicht, legst du einen neuen Eintrag an bzw. setzt den Zähler zurück und Das Datum auf das aktuelle.

Möglicher Aufbau der Datei:
Code:
[Konfiguration]
Datum=10.09.2011
Starts=4
Manipulieren lässt sich das natürlich alles, aber das ist ein anderes Thema.

GouJetir 10. Sep 2011 13:24

AW: Startzähler für Programm erstellen (Wichtig)
 
Danke für die schnelle Antwort.
Ich habe aber noch ein Problem.
Ich hatte mich in einem anderem Delphi Forum angemeldet und da wusste ich nicht wie ich eine .ini schreibe und die haben mir ein Tutorial gezeigt,aber ich versteh es immernoch nicht und funktionieren tut es durch den Tutorial Codes auch nicht.

Kann mir vielleicht jemand einen exakten Code für mein Programm schreiben,der also die Ini-Datei schreibt?
Oder vielleicht ganz leicht erklärt,damit ich es versteh.

Gruß
GouJetir

stahli 10. Sep 2011 13:38

AW: Startzähler für Programm erstellen (Wichtig)
 
ein Beispiel:

Delphi-Quellcode:
procedure ReadOptionsIni;
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(Path + OptionsIniFileName);
  KOResultsPosition := 0;//TKOResultsPosition(IniFile.ReadInteger('Options', 'KOResultsPosition', 0));
  ShowingTimePanels := IniFile.ReadBool('Options', 'ShowingTimePanels', True);
  GamePaperAuto := IniFile.ReadBool('Options', 'GamePaperAuto', True);
  GamePaperPictures := 0;//TGamePaperPictures(IniFile.ReadInteger('Options', 'GamePaperPictures', 0));
  RecoverMinutes := IniFile.ReadInteger('Options', 'RecoverMinutes', 5);
  PlayerNameAbbr := IniFile.ReadInteger('Options', 'PlayerNameAbbr', 0);
  AutoSaveMinutes := IniFile.ReadInteger('Options', 'AutoSaveMinutes', 0);
  HelpMode := IniFile.ReadInteger('Options', 'HelpMode', 0);
  IniFile.Free;
...
end;

procedure WriteOptionsIni;
var
  IniFile: TIniFile;
begin
  IniFile := TIniFile.Create(Path + OptionsIniFileName);
  IniFile.WriteInteger('Options', 'KOResultsPosition', Integer(KOResultsPosition));
  IniFile.WriteBool('Options', 'ShowingTimePanels', ShowingTimePanels);
  IniFile.WriteBool('Options', 'GamePaperAuto', GamePaperAuto);
  IniFile.WriteInteger('Options', 'GamePaperPictures', Integer(GamePaperPictures));
  IniFile.WriteInteger('Options', 'RecoverMinutes', RecoverMinutes);
  IniFile.WriteInteger('Options', 'PlayerNameAbbr', PlayerNameAbbr);
  IniFile.WriteInteger('Options', 'AutoSaveMinutes', AutoSaveMinutes);
  IniFile.WriteInteger('Options', 'HelpMode', HelpMode);
  IniFile.Free;
end;

GouJetir 10. Sep 2011 17:10

AW: Startzähler für Programm erstellen (Wichtig)
 
Hallo,
habe irgendwie den oberen Beitrag von Stahli nicht verstanden.

Ich glaub das mit dem Täglichen Start lass ich weg,vielleicht merkt es keiner,dass man das Programm immer neu starten kann. :D

stahli 10. Sep 2011 17:13

AW: Startzähler für Programm erstellen (Wichtig)
 
Ich erzeuge nur eine Ini und schreibe und lese ein paar Daten daraus.
Hast Du Dir mal die Hilfe zur Ini angesehen?

GouJetir 10. Sep 2011 17:27

AW: Startzähler für Programm erstellen (Wichtig)
 
Ok ist egal mit Ini. Trotzdem Danke.

Stattdessen mach ich das jetzt einfach mit jedem Start zählen,die Zeit ist dann egal.
Brauch denk ich auch noch ini,aber wird dann wohl leichter zu schreiben sein.

So soll es ablaufen:

1.Starte Programm und Label1 steht auf 0
2.Schließe das Programm
3.Starte das Programm und Label1 steht auf 1
4.Schließe das Prograrmm
5.Starte das Programm und Label1 steht auf 2

Das geht dann immer so weiter bis unendlich.

Wie kann ich meine aktuelle Label1 als Ini datei speichern und dann beim starten wieder in die Label1 +1 drauf machen?

jaenicke 10. Sep 2011 17:30

AW: Startzähler für Programm erstellen (Wichtig)
 
Zitat:

Zitat von GouJetir (Beitrag 1123181)
Brauch denk ich auch noch ini,aber wird dann wohl leichter zu schreiben sein.

Das funktioniert logischerweise exakt genauso, nur dass du eben weniger Daten speicherst und liest.

Aber sag doch was genau du dabei nicht verstehst. Sonst kann dir dabei auch niemand helfen...

stahli 10. Sep 2011 17:31

AW: Startzähler für Programm erstellen (Wichtig)
 
Du brauchst Dich nur an meinem Beispiel orientieren und einmal etwas damit probieren...
(Schritt für Schritt - bis Du die Lösung gefunden hast)

GouJetir 10. Sep 2011 17:40

AW: Startzähler für Programm erstellen (Wichtig)
 
Ich find das echt kompliziert und will jetzt auch nicht soviel Zeit damit verbringen um eine Ini zu erstellen.
Danke das ihr mir helfen wollt,aber würde toll sein,wenn ihr mir den exakten Code für das mit Datum gebt oder das ohne Zeit,sondern mit jedem Start.

Luckie 10. Sep 2011 19:28

AW: Startzähler für Programm erstellen (Wichtig)
 
Zitat:

Zitat von GouJetir (Beitrag 1123187)
Ich find das echt kompliziert und will jetzt auch nicht soviel Zeit damit verbringen um eine Ini zu erstellen.

Dann lass es ganz.
Zitat:

Danke das ihr mir helfen wollt,aber würde toll sein,wenn ihr mir den exakten Code für das mit Datum gebt oder das ohne Zeit,sondern mit jedem Start.
Willst du programmieren oder sollen wir das für dich machen? Ich habe den Eindruck, dass das Programm jetzt schon aus zusammen geklauten Codestücken besteht. Wenn du programmieren willst, dann lerne es. Dazu gehört auch sich mal hinzusetzen und zu probieren, Tutorials lesen und nicht gleich aufgeben, wenn es nicht funktioniert, sondern probieren und versuchen den Fehler zu finden, denn das muss man auch lernen. Manchmal besteht Programmieren zum Großteil aus dem Finden von Fehlern, das gehört dazu.

GouJetir 10. Sep 2011 19:49

AW: Startzähler für Programm erstellen (Wichtig)
 
Hab es jetzt gerade ganze Zeit ausprobiert.Habe es zwar nicht mit einer Ini geschafft aber mit einer txt und ich glaub es ist ja das gleiche.
Also bis jetzt geht es,jetzt weiss ich nicht wie ich Edit1 bei jedem Start +1 addiere.


Code:
procedure TForm1.FormCreate(Sender: TObject);
begin
  List := TStringList.Create;
  try
    List.LoadFromFile('C:\Daten.txt');
    if List.Count>0 then
      Edit1.Text:=List[0];
  finally
    List.Free;
  end;
  begin
  ///Edit1 soll hier jetzt +1 addiert werden. Wie?
end;

Delphi-Laie 10. Sep 2011 19:57

AW: Startzähler für Programm erstellen (Wichtig)
 
Mit schnell geht beim Programmieren so gut wie gar nichts, schon gar nicht als Anfänger.

Gut Ding will hier - wie überall - Weile haben.

Mit dem Fertigstellen des Programmes über das Wochenende wird es demnach nichts.

Unrealistische Ziele frustrieren und demotivieren eher, weil man sie nicht erreicht.

GouJetir 10. Sep 2011 20:01

AW: Startzähler für Programm erstellen (Wichtig)
 
Aber wenn ich das fertig habe,dann bin ich (fast) fertig,also der rest ist denk ich mal ne Sache von 10 Minuten.

stahli 10. Sep 2011 20:23

AW: Startzähler für Programm erstellen (Wichtig)
 
Delphi-Quellcode:
StringVariable := StringVariable + 1 funktioniert nicht.
Delphi weiß da nicht, was es machen soll.

Delphi-Quellcode:
StringVariable := IntToStr(StrToIntDef(StringVariable, 0) + 1);
wäre eine Lösung.

Aber versuche das auch zu verstehen...
Zum Programmieren lernen brauch man vieeeel Zeit ;-)

GouJetir 10. Sep 2011 20:37

AW: Startzähler für Programm erstellen (Wichtig)
 
Geht der 2. Code? Weil bei mir geht der irgendwie nicht?
Soll ich exakt den Code : StringVariable := IntToStr(StrToIntDef(StringVariable, 0) + 1);
Bei Form.Create oder muss ich an dem Code noch was ändern?

Luckie 10. Sep 2011 20:40

AW: Startzähler für Programm erstellen (Wichtig)
 
Lass mich Raten, der Compiler kennt StringVariable nicht. Und für die Zukunft, wir sitzen nicht vor deinem Computer, wir können also die Fehlermeldungen nicht sehen.

Gustav.R 10. Sep 2011 20:44

AW: Startzähler für Programm erstellen (Wichtig)
 
Zitat:

Zitat von GouJetir (Beitrag 1123204)
Aber wenn ich das fertig habe,dann bin ich (fast) fertig,also der rest ist denk ich mal ne Sache von 10 Minuten.

Fast fertig :oops: ?

Nur noch eine Sache von 10 Minuten?

Eine sehr interessante Selbsteinschätzung :thumb:

GG

GouJetir 10. Sep 2011 20:52

AW: Startzähler für Programm erstellen (Wichtig)
 
Okay sorry Luckie :D

Also das wird mir geschrieben dann:

[Error]Unit1.pas[52];Undeclared identifier: 'StringVariable'
[Fatal Error]Project2.dpr(5):Could no compile used unit 'Unit1.pas'

Das ist der ganze Code:

Code:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

var
  Form1: TForm1;
    List: TStrings;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  List := TStringList.Create;
  try
    List.LoadFromFile('C:\Daten.txt');
    if List.Count>0 then
      Edit1.Text:=List[0];
  finally
    List.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  List := TStringList.Create;
  try
    List.Add(Edit1.Text);
    List.SaveToFile('C:\Daten.txt');
  finally
    List.Free;
end;
begin
StringVariable := IntToStr(StrToIntDef(StringVariable, 0) + 1);
end;
end;
end.

Luckie 10. Sep 2011 21:04

AW: Startzähler für Programm erstellen (Wichtig)
 
Und was bedeutet
Zitat:

Undeclared identifier: 'StringVariable'
? Und was kann man dagegen tun?

DelTurbo 10. Sep 2011 21:19

AW: Startzähler für Programm erstellen (Wichtig)
 
Öhm, ich will mich ja nicht grossartig einmischen. Aber als das hier grade gelesen habe, kam mir als erstes in den sinn, das sich hier jemand einen spass erlaubt.

GouJetir 10. Sep 2011 21:21

AW: Startzähler für Programm erstellen (Wichtig)
 
Ehrlich gesagt weiss ich das net :s

Luckie 10. Sep 2011 21:26

AW: Startzähler für Programm erstellen (Wichtig)
 
Zitat:

Zitat von GouJetir (Beitrag 1123219)
Ehrlich gesagt weiss ich das net :s

Und nu?

Dann versuch mal herauszufinden, was "undeclared" auf deutsch heißt und wie man Variablen deklariert und nutzt. Und ich empfehle dir, dir die Grundlagen anzueignen. Wir sind hier um zu helfen, wenn man nicht mehr weiter kommt bei konkreten Probleme. Wir sind aber keine Privatlehrer, die dir alles vorkauen. Und solltest du keine Eigeninitiative zeigen, wird das nichts, weder mit dem Programmieren, noch mit Hilfe hier im Forum.

GouJetir 10. Sep 2011 21:39

AW: Startzähler für Programm erstellen (Wichtig)
 
Ich muss was bei der var schreiben oder?

GouJetir 10. Sep 2011 21:43

AW: Startzähler für Programm erstellen (Wichtig)
 
JAAAAA GESCHAFFT

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

var
  Form1: TForm1;
    List: TStrings;


implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  List := TStringList.Create;
  try
    List.LoadFromFile('C:\Daten.txt');
    if List.Count>0 then
      Edit1.Text:=List[0];
  finally
    List.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  List := TStringList.Create;
  try
    List.Add(Edit1.Text);
    List.SaveToFile('C:\Daten.txt');
  finally
    List.Free;
end;
edit1.text := IntToStr(StrToIntDef(edit1.text, 0) + 1);
end;
end.
Oh man bin ich dumm :(

Luckie 10. Sep 2011 21:43

AW: Startzähler für Programm erstellen (Wichtig)
 
Was geht schneller? Ausprobieren und sich freuen, wenn es funktioniert oder hier eine halbe Stunde und länger auf eine Antwort warten?

stahli 10. Sep 2011 21:47

AW: Startzähler für Programm erstellen (Wichtig)
 
Dumm vielleicht nicht unbedingt ;-)
Aber man muss sich Zeit nehmen und konzentrieren. Sonst wird das nix mit dem Programmieren.
Lernen und Fehler suchen muss aber jeder...

Jedenfalls erst mal Gratulation zum Erfolg. :-)

PS: Für Quelltextzitate hier im Forum solltest Du das Delphi-Quote verwenden (der Helm in der Palette).

GouJetir 10. Sep 2011 21:48

AW: Startzähler für Programm erstellen (Wichtig)
 
Kommt halt drauf an wie man gerade drauf ist.

Wenn man Lust auf ausprobieren hat,ist man schneller wenn nicht dann wartet man auf Antworten :D

Danke an alle die geholfen haben. :)

Medium 10. Sep 2011 22:33

AW: Startzähler für Programm erstellen (Wichtig)
 
Programmieren ist die Lust auf selber lösen. Gerade beim Lernen, im Produktiveinsatz, wenn man Geld damit verdienen muss, sind Fertiglösungen natürlich immer wilkommen, und kosten natürlich in der Regel auch. Berechtigterweise. Bloßes Programmieren ist im wesentlichen: Grob die Syntax der verwendeten Sprache kennen, abstraktes Denken, und die Bereitschaft sich tagelang durch Dokus und Google zu wühlen um 0,5% der Gesamtlösung zu erarbeiten. Ist man dazu nicht bereit, wird's ein steiniger Weg. Und sicherlich keiner, der zu Verdienst oder wertvollem Beitrag zur "community" führt. Deal with it. Hast du hier ja schon ganz gut geschafft ;)

himitsu 10. Sep 2011 23:17

AW: Startzähler für Programm erstellen (Wichtig)
 
Du nutzt hier zweimal eine lokale TStringList,
aber warum hast du deren Variable global deklariert?

Globale sind "böse" und wenn man etwas nur lokal (innerhalb einer Prozedur) nutzt, dann gehört die Variable auch lokal (innerhalb der Prozedur) deklariert.



Und "(wichtig)" sind hier irgendwie alle Probleme ... das muß man nicht unbedingt immer mit hinschreiben..
Wobei das hier IMHO nicht wirklich wichtig war.

Zacherl 11. Sep 2011 04:18

AW: Startzähler für Programm erstellen (Wichtig)
 
Ich weiß ja nicht genau, was deine Intention darstellt, aber da ich aufgrund deiner dargelegten Kentnisse nicht vermute, dass du im kommerziellen Sektor tätig bist, lege ich einfach mal zu grunde, dass du dein Programm rein hobbymäßig schreibst.

Hier muss ich Medium voll und ganz recht geben. Wenn du wirklich die Freude am Entdecken einer eigenen Lösung erfahren willst, dann darfst du nicht (nur) auf fertige Lösungen setzen. Ich behaupte einfach mal ganz Dreist, dass mindestens 50% beim Programmieren das Ausprobieren von Lösungsansätzen ausmacht. Man denkt sich "aha, so könnte das eventuell gehen", probiert das ganze dann aus, stößt auf neue Probleme, entwickelt Lösungen auch dafür und irgendwann hat man es so, wie man es haben will.

Grade am Anfang und da spreche ich aus Erfahrung, ist Ausprobieren enorm wichtig, wenn man was lernen will. Man muss es natürlich auch wirklich wollen und ein gewisses Grundinteresse am finden von Lösungsansätzen mitbringen. Auch sollte man sich nicht von Fehlschlägen aus dem Konzept bringen lassen. Dafür sind dann ja Foren wie dieses da, wo vielleicht der ein oder andere User einen Ansatz präsentiert, an den man selbst noch nicht gedacht hat.

Sir Rufo 11. Sep 2011 07:22

AW: Startzähler für Programm erstellen (Wichtig)
 
Hier mal der Code wenn man eine Ini-Datei verwenden möchte
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

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

var
  Form1: TForm1;
  // List: TStrings; // 


implementation

{$R *.dfm}

uses
  IniFiles;

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini : TIniFile;
begin
  Ini := TIniFile.Create( 'C:\Daten.ini' );
  try
    Edit1.Text := Ini.ReadString( 'Merken', 'Edit1', Edit1.Text );
  finally
    Ini.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Ini : TIniFile;
begin
  Ini := TIniFile.Create( 'C:\Daten.ini' );
  try
    Ini.WriteString( 'Merken', 'Edit1', Edit1.Text );
  finally
    Ini.Free;
  end;

  Edit1.Text := IntToStr( StrToIntDef( Edit1.Text, 0 ) + 1 );
end;
end.
In der Ini-Datei steht mit diesem Code dann z.B.
Code:
[Merken]
Edit1=3
EDIT: Jo, da fehlte das Ini vor Read- und WriteString :stupid:

himitsu 11. Sep 2011 07:53

AW: Startzähler für Programm erstellen (Wichtig)
 
Bei seinem Problem würde ich auch noch Ini.ReadInteger und Ini.ReadDate so nebenbei erwähnen. :angle2:

http://docwiki.embarcadero.com/VCL/d...File_Functions


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:41 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