Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form nur beim ersten mal starten anzeigen (https://www.delphipraxis.net/28804-form-nur-beim-ersten-mal-starten-anzeigen.html)

HW764 30. Aug 2004 15:26


Form nur beim ersten mal starten anzeigen
 
Wie realisiere ich das, dass zB. Form10 nur beim ersten Starten des Programmes kommt?
Also nur beim 1 Mal.


Gruss HW764

alcaeus 30. Aug 2004 15:32

Re: Form nur beim ersten mal starten anzeigen
 
Hi Kevin!

Überprüf beim Start eine Ini-Datei, in welcher ein Wert gesetzt sein muss, damit Form10 nicht angezeigt wird. Diese Überprüfung kannst du auch in der dpr-Datei deines Projektes erledigen, und dann mit einer if-Abfrage das richtige Form erstellen und anzeigen.

Greetz
alcaeus

Golze 30. Aug 2004 16:08

Re: Form nur beim ersten mal starten anzeigen
 
Hi,
kann mir mal jemand auf die Sprünge helfen. Habe gerade die Frage und die Antwort gelesen. Eine Form10 soll einmal angezeigt werden. Verstehe ich nicht oder ist mir das zu einfach. Die Lösung mit der Ini-Datei kapiere ich auch nicht. Mann kann ja auch ein Thread generieren, der nach einer bestimmten Zeit ein Spawn-Prozeß erzeugt, der den Hauptprozeß dann killt. Wo ist also das Problem?
Kay

HW764 30. Aug 2004 16:12

Re: Form nur beim ersten mal starten anzeigen
 
Beim ersten Starten des Programms soll ein Konfigurationsmanager gestartet werden (Form10)
Diese soll beim 2 ten Start nicht mehr kommen.

Gruss HW764

alcaeus 30. Aug 2004 16:18

Re: Form nur beim ersten mal starten anzeigen
 
Hi Kay, Hi Kevin,

die Lösung ist einfacher als ihr denkt.
Sehen wir uns mal eine dpr-Datei an:
Delphi-Quellcode:
program Project1;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.
Natürlich werden in Kevins Projekt mehrere Units in der uses-Klausel stehen. Das Hauptprogramm muss nun so geändert werden, dass je nach Bedarf Form1 oder Form10 angezeigt wird:
Delphi-Quellcode:
begin
  Application.Initialize;
  if (Bedingung) then
    Application.CreateForm(TForm1, Form1)
  else
    Application.CreateForm(TForm10, Form10);
  Application.Run;
end.
Die Bedingung wäre hier ein Flag in einer ini-Datei, welches du mit Hilfe der Unit IniFiles und dem TIniFile-Typ auslesen kannst. Dazu müsste es hier genug geben.
Da ich heute aber einen guten Tag (und nicht zu tun ;)) habe, will ich hier noch ein bisschen Source springen lassen
Delphi-Quellcode:
uses Forms,..., IniFiles;
var
  IniFile: TIniFile;
  ProgRun: Boolean;
begin
  Application.Initialize;
  IniFile := TIniFile.Create(Pfad_zur_Datei)
  ProgRun := IniFile.ReadBool('Section', 'ProgRun', False);
  if ProgRun then
    Application.CreateForm(TForm1, Form1)
  else
    Application.CreateForm(TForm10, Form10);
  IniFile.WriteBool('Section', 'ProgRun', True);
  IniFile.Free;
  Application.Run;
end.
Auf Resourcenschutzblöcke habe ich der Einfachkeit halber verzichtet.

Hoffe das klärt eure Probleme...

Greetz
alcaeus

Bowler 30. Aug 2004 16:20

Re: Form nur beim ersten mal starten anzeigen
 
Naja, wenn es sowieso schon um einen Konfigurations-Dialog geht, dann mach es doch so.

Wo auch immer Du die Konfiguration speichern willst (INI, Registry, oder eigene Datei), prüfst Du beim Starten der Anwendung, ob diese Konfigurations-Daten vorhanden sind (z.B. per fileexists, bei Dateien), wenn nicht, dann öffnest du den Dialog, damit eine Konfiguration eingestellt wird, ansonsten liest du die vorhandene Konfiguration ein, und startest die Anwendung.

Ich denke, Du solltest als Kriterium nicht den allerersten Start nehmen, sondern die Verfügbarkeit der Konfigurationsdaten.

Gruß

alcaeus 30. Aug 2004 16:25

Re: Form nur beim ersten mal starten anzeigen
 
Hi Christian!

Du hast natürlich Recht, als Kriterium sollte nicht der erste Start, sondern das Vorhandensein der Konfigurationsdaten verwendet werden.
Dieser Code
Delphi-Quellcode:
ProgRun := IniFile.ReadBool('Section', 'ProgRun', False);
Liefert allerdings auch False zurück, falls der Eintrag nicht vorhanden ist. Wenn ich nun das Programm ausführe, dann beende, die Ini-Datei bearbeite und den Eintrag "ProgRun" lösche, so wird beim nächsten Start wieder Form10 angezeigt. Die Lösung mit FileExists würde dem Code natürlich noch den letzten Schliff verleihen :zwinker:

greetz
alcaeus

Bowler 30. Aug 2004 16:29

Re: Form nur beim ersten mal starten anzeigen
 
Hi alcaeus,

da hast Du natürlich Recht, sehe ich genauso, wir haben unsere Beiträge anscheinend zeitgleich geschrieben. :lol: Zumindestens habe ich Deinen Beitrag noch nicht gesehen, als ich auf "Anworten" geklickt habe.

Eigentlich sollte Deine Lösung schon ausreichen.....

Gruß

HW764 30. Aug 2004 16:45

Re: Form nur beim ersten mal starten anzeigen
 
Also, wie geht die source von:

1. Suche im Ordner in dem du bist die ini "einstellungen.ini"
2. Lese aus der ini: "[Einstellungen] Firststart=true"
3. Dann zeige form10 an.
4. Wenn ["Einstellungen] Firststart=false" steht
5. Zeige form 1 an.

alcaeus 30. Aug 2004 16:49

Re: Form nur beim ersten mal starten anzeigen
 
Hi Kevin,

Zitat:

Zitat von HW764
Also, wie geht die source von:

1. Suche im Ordner in dem du bist die ini "einstellungen.ini"
2. Lese aus der ini: "[Einstellungen] Firststart=true"
3. Dann zeige form10 an.
4. Wenn ["Einstellungen] Firststart=false" steht
5. Zeige form 1 an.

Ich will ja jetzt nicht zu sarkastisch/ironisch/wasweißichwas wirken, aber ich habe einen ziemlich detaillierten Source gepostet. Wenn du damit immer noch nicht weiterkommst, dann sieh dir einfach mal die Delphi-Hilfe zu den verwendeten Typen (Boolean, TIniFiles) an, oder verwend auch mal die Suche zum Thema IniFiles. Ich habe jetzt wirklich nicht Lust, den Code an deine Vorlieben anzupassen :roll:

Sorry, das musste raus

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 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-2025 by Thomas Breitkreuz