Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde! (https://www.delphipraxis.net/118961-ich-wuerde-gerne-mitzaehlen-wie-oft-form1-geoeffnet-wurde.html)

technik05 18. Aug 2008 17:58


Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Hallo :?

Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Auf Form1 sichtbar, geht das ????
Bitte Quelltext einfügen oder beschreiben, habe immer noch keine Ahnung :roll:

Delphi-Quellcode:
 Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, ComCtrls, DBTables, StdCtrls, jpeg;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    ProgressBar1: TProgressBar;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.StepIt;
  if ProgressBar1.Position < 1 then
    Close;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
 ProgressBar1.Min := 0;
  ProgressBar1.Max := 60;
  ProgressBar1.Position := ProgressBar1.Max;
  ProgressBar1.Step := -1;
end;

end.

lbccaleb 18. Aug 2008 18:02

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Du kannst dir ne Variable Dekalrieren, und diese dann in FormShow hochzählen...

technik05 18. Aug 2008 18:07

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
wie würde das dann quelltext mäßig aussehen ???
oder ist das zu viel arbeit ?? keine ahnung ??

aber trotzdem danke

mkinzler 18. Aug 2008 18:08

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Also wenn du es nicht einmal schaffst eine Variable um eins hochzuzählen, dann lass die Finger von der Programmierung.
Zudem hast du dich im Unterforum vergriffen

technik05 18. Aug 2008 18:14

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Das ist aber eine Unterstützung für Anfänger!!
Bin nicht vom Himmel gefallen !

Ist dieses Forum nur für Profis ????

lbccaleb 18. Aug 2008 18:24

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Delphi-Quellcode:
Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, ComCtrls, DBTables, StdCtrls, jpeg;

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Label1: TLabel;
    Label2: TLabel;
    ProgressBar1: TProgressBar;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure Timer1Timer(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormShow(Sender: TObject); // hier hinzufügen nicht vergessen
 private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  FormShowCount: Integer; // Hier die Variable als integer deklarieren...


implementation

{$R *.DFM}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.StepIt;
  if ProgressBar1.Position < 1 then
    Close;
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
ProgressBar1.Min := 0;
  ProgressBar1.Max := 60;
  ProgressBar1.Position := ProgressBar1.Max;
  ProgressBar1.Step := -1;
end;

procedure TForm1.FormShow(Sender: TObject); //Diese Procedure muss noch im Objectinspektor bei FormShow ausgewählt werden (NICHT!! vergessen)
begin
  Inc(FormShowCount); // Hier wird die var "FormShowCount" um 1 addiert
end;

end.

Nun kannst du in deinem Programm imm die var "FormShowCount" abfragen, um herauszufinden wie oft deine Form schon angezeigt wurde...

rollstuhlfahrer 18. Aug 2008 18:27

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
HI,

der Hinweis war nicht bös gemeint. Du hast nur in "Einen Beitrag zur CodeLib hinzufügen" gepostet. Dein Thema gehört dort nicht hin, oder soll es etwa in die CodeLib aufgenommen werden?
Dann: Du nimmst das Event OnShow von der Form und Zählst dort zu einer globalen Variable 1 dazu. Im Event OnHide kannst du dies dann um 1 vermindern und schon weißt du, wie oft die Form sichtbar ist. Wenn du jetzt wissen möchtest, wie oft dein Programm geöffnet worden ist, musst du dir die Prozessliste zu gemüte führen und beim durchgehen einfach mitzäglen, wi oft dein Programm genannt wurde.

Bernhard

EDIT: Was sollen diese Zeilen denn?
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.StepIt;
  if ProgressBar1.Position < 1 then
    Close;
end;
Entweder ProgressBar1.Min ist weit unter 0 oder dein Programm wird beim ersten Aufruf beendet. Dafür kannst du auch gleich Close nehmen.

mkinzler 18. Aug 2008 18:51

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Das ist aber eine Unterstützung für Anfänger!!
Bin nicht vom Himmel gefallen !

Ist dieses Forum nur für Profis ????
Nein aber etwas Grundlagenwissen und Eigeninitiative kann man schon erwarten.
lbccaleb hat in #2 die Vorgehensweise ja schon skizziert. Anstatt dir darüber Gedanken zu machen, fragst du frech nach Code.
Unter http://www.delphi-treff.de/tutorials/grundlagen/ findest du Grundlagen-Tutorials.

Roachford 18. Aug 2008 19:03

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Technik05: Geb deine Delphiversion an, damit man dir passend helfen kann!

Die Lösung einer globalen Variable ist die denkbar schlechteste und ab BDS2006 auch definitiv besser lösbar:

Delphi-Quellcode:
  TForm1 = class(TForm)
  private
    class var FormShowCount: integer;
   
    var
  ...
  end;

technik05 18. Aug 2008 19:11

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Nun kannst du in deinem Programm imm die var "FormShowCount" abfragen, um herauszufinden wie oft deine Form schon angezeigt wurde

wie mache ich das ?????

lbccaleb 18. Aug 2008 19:24

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Plazierst auf deiner Form ein Label!

Dann kannst du mit

Delphi-Quellcode:
Label1.Caption := IntToStr(FormShowCount);
dem Label die Variable zuweisen! IntToStr konvertiert eine Integer variable zu einer String variable!

bernau 19. Aug 2008 14:51

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von Roachford
Delphi-Quellcode:
  TForm1 = class(TForm)
  private
    class var FormShowCount: integer;
   
    var
  ...
  end;

Huch. Das kannte ich auch noch nicht.


Jetzt aber das peinliche :oops:
Das wollte ich mir jetzt noch mal genauer ansehen und habe nach "class var" gesucht. Im Suchbegriff die Anführungsstriche mit eingegeben. Dachte daß nach genau dieser Schreibweise gesucht wird. Aber neeee. In den Beiträgen kommt zwar class und var vor. Aber irgendwo im Beitrag verstreut und nicht die genaue Schreibweise mit dem Leerzeichen dazwischen. Wie kann ich denn in der DP danach suchen? :gruebel:

mkinzler 19. Aug 2008 14:54

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Eine Klassenvariable ist eine Variable die pro Klasse gilt, nicht pro Instanz. D.H. sie hat in allen Instanzen den selben Wert

[edit=Phoenix]Beitrag wurde irgendwie nicht dargestellt. Mal kurz editiert damit's klappt. Mfg, Phoenix[/edit]

Deep-Sea 19. Aug 2008 15:03

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von rollstuhlfahrer
EDIT: Was sollen diese Zeilen denn?
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.StepIt;
  if ProgressBar1.Position < 1 then
    Close;
end;
Entweder ProgressBar1.Min ist weit unter 0 oder dein Programm wird beim ersten Aufruf beendet. Dafür kannst du auch gleich Close nehmen.

Die ProgressBar läuft von 60 rückwärts und sobald sie 0 erreicht, wird die Form geschlossen :wink: (Warum weiß ich auch net ^^)

Angel4585 19. Aug 2008 15:06

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von mkinzler
Eine Klassenvariable ist eine Variable die pro Klasse gilt, nicht pro Instanz. D.H. sie hat in allen Instanzen den selben Wert

Irgendwie wird das nicht dargestellt :gruebel:

Jeff93 19. Aug 2008 15:12

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Bei mir auch nicht, und ich kann kein Bild im Format *.bmp anhängen.

@topic : Muss eine Instanz der Klasse bestehen um die Klassenvariable zu initialisieren oder ist es so wie mit Klassenprozeduren
Delphi-Quellcode:
TKlasse = class
private
  //Edit: Fehler sry
  class function XY : boolean;
end;
?

Gruss, Jeff93

mkinzler 19. Aug 2008 15:12

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von Angel4585
Zitat:

Zitat von mkinzler
Eine Klassenvariable ist eine Variable die pro Klasse gilt, nicht pro Instanz. D.H. sie hat in allen Instanzen den selben Wert

Irgendwie wird das nicht dargestellt :gruebel:

Wieder mal ein Cache-Problem :(

Deep-Sea 19. Aug 2008 15:14

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von Jeff93
@topic : Muss eine Instanz der Klasse bestehen um die Klassenvariable zu initialisieren oder ist es so wie mit Klassenprozeduren
Delphi-Quellcode:
TKlasse = class
private
  //Edit: Fehler sry
  class function XY : boolean;
end;
?

Gruss, Jeff93

Nein, es muss natürlich keine Instanz existieren. Es ist wie mit Klassenprozeduren :wink:

Phoenix 19. Aug 2008 15:14

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von Angel4585
Zitat:

Zitat von mkinzler
Eine Klassenvariable ist eine Variable die pro Klasse gilt, nicht pro Instanz. D.H. sie hat in allen Instanzen den selben Wert

Irgendwie wird das nicht dargestellt :gruebel:

Da hat Gérome wohl wieder an einem Kabel genagt...

Jeff93 19. Aug 2008 15:20

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von Deep-Sea
Nein, es muss natürlich keine Instanz existieren. Es ist wie mit Klassenprozeduren :wink:

Danke, für die schnelle Antwort :mrgreen:

BullsEye 19. Aug 2008 15:53

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Oder du machst ne Variable, speicherst die in ner INI FIle und bei jedem Mal wo das Formular aufgerufen wird, wird diese hochgezählt. Beim beenden speicherst du die Variable denn.

Micha88 21. Aug 2008 15:18

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Was hast du denn da vor?

Ich würde es so machen:
- Form 1 öffnen
- Integerwert in INI-File speichern
- Beim wiederöffnen, INI-Wert lesen, um eins erhöhen usw


Das sähe so aus
Delphi-Quellcode:
uses
 {...,} IniFiles;

procedure TForm1.FormCreate(Sender: TObject);
var
 ini: TiniFile;
 iCount: Integer;
begin
 try
  ini := TIniFile.Create('C:\count.ini');
  iCount := ini.ReadInteger('Openings', 'Counts', 1);
  iCount := iCount + 1;
  ini.WriteInteger('Openings', 'Counts', iCount);
 finally
  ini.Free;
 end;
end;

BullsEye 21. Aug 2008 15:37

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von MichaelLinden
Was hast du denn da vor?

Ich würde es so machen:
- Form 1 öffnen
- Integerwert in INI-File speichern
- Beim wiederöffnen, INI-Wert lesen, um eins erhöhen usw

Genau so meinte ich das ja auch, nur halt ohne Code^^

Hier ne kleine Verbesserung deines Codes weil es sonst unter Vista ggf zu komplikationen kommen kann und es auch nie gut ist was auf C oder sonstwelche Verzeichnisse zu speichern!


Delphi-Quellcode:
uses
 {...,} IniFiles;

procedure TForm1.FormCreate(Sender: TObject);
var
 ini: TiniFile;
 iCount: Integer;
begin
 try
  ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'count.ini');
  iCount := ini.ReadInteger('Openings', 'Counts', 1);
  iCount := iCount + 1;
  ini.WriteInteger('Openings', 'Counts', iCount);
 finally
  ini.Free;
 end;
end;

Micha88 21. Aug 2008 16:48

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Das mit "C" war nur so dahin geklatscht :D

Natürlich schreibe ich selbst IMMER ExtractFilePath(Application.ExeName) oder ExtractFilePath(ParamStr(0))

BUG 21. Aug 2008 17:41

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von MichaelLinden
Das mit "C" war nur so dahin geklatscht :D

Natürlich schreibe ich selbst IMMER ExtractFilePath(Application.ExeName) oder ExtractFilePath(ParamStr(0))

:warn: Sehr gut, besonders wenn dein Programm im Programmverzeichnis liegt, wo der normale Benutzer keine Schreibrechte hat.
Dann sperrt man die ganzen Nicht-Administrator-Loser nämlich aus ( :mrgreen: ).

MfG,
Bug

Micha88 21. Aug 2008 21:26

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Hä? Verstehe ich grad nicht ..

Ich habs noch nie ausprobiert (werde ich gleich machen).

Was passiert denn, wenn ein Nicht-Admin-Looser versucht in dieses Verzeichnis zu schreiben?

mkinzler 21. Aug 2008 21:29

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Er bekommt eine Exception um die Ohren geschlagen.

Micha88 21. Aug 2008 22:12

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Mhhh... wie kann man sowas denn umgehen?
Ich meine, dass das Setup vorher schon weis, dass es nicht in "Programme" schreiben kann/darf?

mkinzler 21. Aug 2008 22:16

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Gleich in eine Verzeichnis mit Benutzerschreibrechten schreiben. Z.B. im Benutzerprofil

Micha88 21. Aug 2008 23:25

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Für meinen Installer habe ich folgende Lösung gefunden:

Ich überprüfe via
if ForceDirectories(InstallVerz) then ..
ob das Verzeichnis beschreibbar ist oder nicht.

Ralf Kaiser 21. Aug 2008 23:36

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von MichaelLinden
Für meinen Installer habe ich folgende Lösung gefunden:

Ich überprüfe via
if ForceDirectories(InstallVerz) then ..
ob das Verzeichnis beschreibbar ist oder nicht.

Dann weiss der Installer, dass er dort schreiben darf. Das bedeutet aber noch lange nicht, dass das Programm hinterher dort auch schreiben darf!

Der Installer läuft, zumindest unter Vista, ja immer mit Adminrechten und darf darum in das "Programme" Verzeichnis schreiben. Beim Programm selbst ist das aber später nicht der Fall.

Man sollte sich angewöhnen für die Daten immer ein Verzeichnis im Benutzerprofil zu nehmen (Vista-und-später-Benutzer werden es einem danken). Diese Regel bestand eigentlich schon immer aber da unter XP und vorher jeder (der Bequemlichkeit halber) meistens als Admin gearbeitet hat fiel das nicht so auf. Erst unter Vista wo selbst der Admin, ohne Nachfrage (UAC), nicht alles darf fällt es plötzlich auf.

Ciao,
Ralf

Micha88 21. Aug 2008 23:38

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Dann weiss der Installer, dass er dort schreiben darf. Das bedeutet aber noch lange nicht, dass das Programm hinterher dort auch schreiben darf!
Das verstehe ich nicht.

Der Installer ist von Mir selber?
Der Installer schreibt genau so wie das Programm auch.

mkinzler 22. Aug 2008 06:33

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Trotzdem sollte man Einstellungen nicht im Programmverzeichnis ablegen!

Ralf Kaiser 22. Aug 2008 08:07

Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
 
Zitat:

Zitat von MichaelLinden
Zitat:

Dann weiss der Installer, dass er dort schreiben darf. Das bedeutet aber noch lange nicht, dass das Programm hinterher dort auch schreiben darf!
Das verstehe ich nicht.

Der Installer ist von Mir selber?
Der Installer schreibt genau so wie das Programm auch.

Nein. Denn der Installer wird mit Adminrechten gestartet und darf daher mehr machen als später das Programm. Diese Aussage bezieht sich auf Vista! Dort wird ein Programm das im Namen "Install" oder "Setup" enthält automatisch mit Adminrechten gestartet.

Unter anderen Systenem, also kleiner Vista, ist das zwar nicht so, man sollte aber auch unter diesen Systemen diese Regeln einhalten. So kann dein Installer z.B. auf einem Firmensystem auf dem der normale Benutzer vom Admin nicht die erforderlichen Rechte erhalten hat meistens auch nicht ins Verzeichnis "Programme\..." schreiben. Die Installation erfolgt auf Firmensystemen fast nur durch den Admin (da darf der Installer dann auch wieder alles)

Leider arbeiten, auch heutzutage noch, die meisten Leute unter XP noch als Administrator wodurh solch ein falsches Verhalten der Software nicht auffällt. Auf einem korrekt konfigurierten System wird dieses Verhalten aber scheitern!

Ciao,
Ralf


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 Uhr.

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