![]() |
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. |
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...
|
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 |
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 |
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 ???? |
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... |
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:
Entweder ProgressBar1.Min ist weit unter 0 oder dein Programm wird beim ersten Aufruf beendet. Dafür kannst du auch gleich Close nehmen.
procedure TForm1.Timer1Timer(Sender: TObject);
begin ProgressBar1.StepIt; if ProgressBar1.Position < 1 then Close; end; |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
lbccaleb hat in #2 die Vorgehensweise ja schon skizziert. Anstatt dir darüber Gedanken zu machen, fragst du frech nach Code. Unter ![]() |
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; |
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 ????? |
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:
dem Label die Variable zuweisen! IntToStr konvertiert eine Integer variable zu einer String variable!
Label1.Caption := IntToStr(FormShowCount);
|
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
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: |
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] |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
|
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
|
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 |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
|
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
|
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
|
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
|
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.
|
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; |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
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; |
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)) |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
Dann sperrt man die ganzen Nicht-Administrator-Loser nämlich aus ( :mrgreen: ). MfG, Bug |
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? |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Er bekommt eine Exception um die Ohren geschlagen.
|
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? |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Gleich in eine Verzeichnis mit Benutzerschreibrechten schreiben. Z.B. im Benutzerprofil
|
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. |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
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 |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
Der Installer ist von Mir selber? Der Installer schreibt genau so wie das Programm auch. |
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Trotzdem sollte man Einstellungen nicht im Programmverzeichnis ablegen!
|
Re: Ich würde gerne mitzählen, wie oft Form1 geöffnet wurde!
Zitat:
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