Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zählen wie oft eine Form aufgerufen worden ist (https://www.delphipraxis.net/21430-zaehlen-wie-oft-eine-form-aufgerufen-worden-ist.html)

alanblack 2. Mai 2004 22:10


Zählen wie oft eine Form aufgerufen worden ist
 
Hallo leute,

hab ein kleines problem, und zwar:

ich möchte in einem Label zählen wie oft eine Form aufgerufen worden ist

Beispiel:

Ich möchte zählen wie oft Form6 aufgerufen worden ist:

Form6 wurde 5 mal aufgerufen
Label: Form6 wurde 5 mal aufgerufen

Hat jemand eine idee? Wäre nett von euch wenn ihr mir helfen könnt

Mfg alanblack

Robert_G 2. Mai 2004 22:20

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Hi Alan. :hi:
Das könnte so gehen.
(Ich habe es nicht getestet, es sollte aber funktionieren ;) )

Delphi-Quellcode:
var
  i, CountForm1, CountForm2: Integer;
begin
  CountForm1 := 0;
  CountForm2 := 0;
  with Screen do
    for i := 0 to pred(FormCount) do
      if Forms[i] is TForm1 then
        inc(CountForm1)
      else if Forms[i] is TForm2 then
        inc(CountForm2);

  lblForm1.Caption := IntToStr(CountForm1);
  lblForm2.Caption := IntToStr(CountForm2);

Jörn 2. Mai 2004 22:31

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Geht es nicht fast einfacher, im FormOnActivate eine Variable immer höher zu zählen oder irre ich mich da?

Robert_G 2. Mai 2004 22:35

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Das wäre weder einfacher noch vom Konzept her "sauber", da du hierfür globale Variablen bräuchtest.
Außerdem müsste man dann sichergehen, dass beim Schließen auch wirklich die Variable heruntergezählt wird.

Die eine Schleife in meinem Schnipsel liefert exakt die Anzahl der geöffneten Forms (selbst wenn sie nicht sichtbar sind).
Das auch nur dann wenn man es braucht ;)

alanblack 2. Mai 2004 22:44

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Hi,

Vielen Dank für die Antworten.

Ich möchte aber noch was dazu sagen:

Ich möchte nich zählen wie viele Forms offen sind sondern wie oft (zb Form2) seid dem starten des progs geöffnet worden ist. Auch wenn das Fenster wieder geschlossen worden wurde soll es nicht runterzählen..

mfg alanblack

Robert_G 2. Mai 2004 22:46

Re: Zählen wie oft eine Form aufgerufen worden ist
 
:lol:
Tja, dann wäre Jörns Vorschlag wohl doch nicht falsch. ;)

StefanDP 2. Mai 2004 22:52

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Delphi-Quellcode:
var
  zaehler: Integer = 0;
procedure TForm1.FormActivate(Sender: TObject);
begin
  inc(zaehler);
end;
hm, zu einfach um hilfreich zu sein!?

mfg
stefan

alanblack 2. Mai 2004 23:38

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Hi nochma :?

öhm Jörn wie könnte so eine Variable denn aussehen? könntest du mir vll. ein Beispiel machen wär nett

Vielen Dank

alanblack

Luckie 2. Mai 2004 23:56

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Zitat:

Zitat von alanblack
öhm Jörn wie könnte so eine Variable denn aussehen? könntest du mir vll. ein Beispiel machen wär nett

Rund oder eckig, dick oder dünn, farbig oder s/w, ....

Scherz bei Seite. Wie soll sie aussehen? Einfach eine globale Integer-Variable in der Hauptform, die jedes mal inkrementiert wird, wenn ein Formular aufgerufen wird. Wo ist da das Verständinsproblem bitte sehr?

SirThornberry 3. Mai 2004 07:57

Re: Zählen wie oft eine Form aufgerufen worden ist
 
ähm, leute!!! Wieso globale Variable?? Man kann auch in Public des Mainforms eine Variable deklarieren und diese dann hochzählen.. :?

Luckie 3. Mai 2004 09:01

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Womit sie im Prinzip für alle anderen Formen global wäre. ;)

maximov 3. Mai 2004 10:39

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Da er die form2 ja nur öffnen will (und nicht jedes mal 'createn') kann er es sehr wohl als feld in form2 definieren und im konstruktor inkrementieren...da kann er die regel da aufnehmen wo sie passiert :shock:

alanblack 3. Mai 2004 14:12

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Zitat:

Zitat von Luckie
Einfach eine globale Integer-Variable in der Hauptform, die jedes mal inkrementiert wird, wenn ein Formular aufgerufen wird. Wo ist da das Verständinsproblem bitte sehr?

Verständnisproblem gibt es eigentlich keines -> eine Variable die im caption des labels hoch zählt wie oft sie im laufprozess der exe aufgerufen worden ist.

Das Prob liegt dabei dass ich nicht genau weiß wie ich das hochzähle - also wie ich das in code umwandle

Mfg alanblack

S2B 3. Mai 2004 14:26

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Mal OT: Ich frage mich schon die ganze Zeit, was an globalen Variablen so schlimm sein soll? Kann mir das vielleicht jemand erklären?

maximov 3. Mai 2004 15:20

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Zitat:

Zitat von alanblack
Das Prob liegt dabei dass ich nicht genau weiß wie ich das hochzähle - also wie ich das in code umwandle

inkrementieren macht man so ->

Delphi-Quellcode:
inc(FShowCount);
Hatte oben im konstruktor geschrieben! ...is natürlich blöd sinn, sondern am besten in der virtuellen methode show (override) von TForm2.

zecke 3. Mai 2004 15:39

Re: Zählen wie oft eine Form aufgerufen worden ist
 
huhu

also du könntest auch einfach beim onactivate der form [1,2 oder 3 (oder auch 67) :P] eine textdatei schreiben.
das programm startet und lädt die zahl, welche in der datei ist. danach, wenn die form aufgerufen wird, wird die zahl um eins erhöht und die datei überschrieben. ist eigentlich verdammt einfach.

der nachteil wäre halt, dass es eine zusätzliche datei braucht, aber ich als noob würde das problem so lösen! :D :balloon:

alcaeus 3. Mai 2004 15:43

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Zitat:

Zitat von S2B
Mal OT: Ich frage mich schon die ganze Zeit, was an globalen Variablen so schlimm sein soll? Kann mir das vielleicht jemand erklären?

Soviel ich weiß entsprechen globale Variablen nicht dem OOP-Prinzip der Kapselung. Auch Variablen die in einer Unit nach dem implementation deklariert werden, sind nicht sauber, deshalb:
Globale Variablen: Public-Membervariablen der Klasse
Lokale Variablen: Private-Membervariablen der Klasse
Ich hoffe ich habe jetzt keinen Blödsinn geredet.

alanblack 3. Mai 2004 17:49

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Hi,

Ich habe die Codes ausprobiert funktionieren tun sie zwar (project wird compilert) doch zählen tut es nicht... :roll:

Ich erkläre nochmal genau was ich will :stupid:

Also:

In meinen Project taucht (öffnet sich von alleine) die Form2 auf und schließt sich wieder. Auf einen Klick von einem Button möchte ich das im Label angezeigt wird wie viele bereits geöffnet worden sind!

Wie bekomme ich das hin?

Vielen Dank

alanblack

faux 3. Mai 2004 18:01

Re: Zählen wie oft eine Form aufgerufen worden ist
 
so übersteht das auch ein schließen des programms:
Delphi-Quellcode:
procedure TForm1.IntToReg(path, name: string; wert: integer);
var regist: TRegistry;
begin
     try
        regist := TRegistry.Create;
        regist.RootKey := HKEY_CURRENT_USER;
        regist.OpenKey(path, true);
        regist.WriteInteger(name, wert);
     finally
        regist.Free;
     end;
end;

function TForm1.RegToInt(path, name: string): integer;
var regist: TRegistry;
begin
    Try
      try
        regist := TRegistry.Create;
        regist.RootKey := HKEY_CURRENT_USER;
        regist.OpenKey(path, true);
        result := regist.ReadInteger(name);
      finally
        regist.Free;
      end;
     Except
        result := -1;
     end;
end;

Procedure TForm1.FormCreate(Sender: TObject);
const
  path = 'Software\alanblack\Programm\1.0';
begin
  if RegToInt(path, 'opens') = -1 then
    IntToReg(path, 'opens', 1)
  else
    IntToReg(path, 'opens', RegToInt(path, 'opens') + 1);
end;

alanblack 3. Mai 2004 18:04

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Hoi,

mhm ne das brauch ich eigentlich nich das er sich die ziffer "merkt"

ich lasse einfach die OnCreate Procedure weg, geht das?

Also die Ziffer soll nich gespeichert werden

Nicolai1234 3. Mai 2004 18:10

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Kannst du nicht an der Stelle, wo Form2 geöffnet wird (timer, button etc.) des QT mit einbauen und wenn ihr keine Globale Variable wollt könnte man doch folgendes machen:
Delphi-Quellcode:
inc(form2.tag);
Wenn der Tag nicht schon anderweitig verwendet wird!

alanblack 3. Mai 2004 18:35

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Da kommt eine Fehlermeldung:

Zitat:

Der linken Seite kann nichts zugewiesen werden
:wiejetzt:

faux 3. Mai 2004 18:46

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Also:

Angenommen Form1 ist die Hauptform:

Form6 soll gezählt werden:

Delphi-Quellcode:
...
interface
...
public
  Form6Zahl: Integer;
...
TForm1.FormCreate(Sen....blabla);
begin
 Form6Zahl := 0;
end;
Delphi-Quellcode:
TForm6.FormShow(Sender..blabla);
begin
  inc(Form1.Form6Zahl);
end;

TForm6.ButtonClick(Sen....);
begin
  ShowMessage('Die Form6 wurde '+IntToStr(Form1.Form6Zahl)+' mal aufgerufen.');
end;

Sebastian Nintemann 3. Mai 2004 19:03

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Zitat:

inc(form2.tag);
Funktioniert nicht da Tag eine property ist, du also intern über die Get / Set-Methoden drauf zugreifst.
Delphi-Quellcode:
Form2.Tag := Form2.Tag + 1;
sollte klappen :-D

Weiß jetzt nicht ob dus gebrauchen kannst (hab nicht alles gelesen), nur zur Info wegen
Zitat:

Der linken Seite kann nichts zugewiesen werden
;)

Viele Grüße, Sebastian

alanblack 3. Mai 2004 19:36

Re: Zählen wie oft eine Form aufgerufen worden ist
 
Hm hoi,

sieht gut aus nur wie lässt man das in einem label anzeigen? denn

Label1.Caption := Form2.Tag := Form2.Tag + 1;

kann ja nich funzen

mfg

kiar 3. Mai 2004 19:39

Re: Zählen wie oft eine Form aufgerufen worden ist
 
label1.caption:= inttostr(form2.tag)


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