Autor Beitrag
rob87
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Do 12.02.09 09:44 
Hallo,

ich habe folgenden Sachverhalt: Ich möchte vor dem Hauptformular ein Formular starten, in welchem Einstellungen überprüft werden. Der Benutzer hat dann bei erfolgreicher Prüfung die Möglichkeit zum Hauptformular zu gelangen. Wenn die Prüfung nicht erfolgreich ist, hat der Benutzer diese Möglichkeit eben nicht und er hat nur die Möglichkeit das Programm zu beenden.

Wie würdet ihr das "handeln"?

Vorformular schließen und anschließend Hauptformular öffnen funktioniert nicht. Denn denn wird das Programm nach dem VorFormular beendet
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 12.02.09 10:59 
Moin!

Such mal nach Suche in: Delphi-Forum, Delphi-Library SPLASH SCREEN oder Suche in: Delphi-Forum, Delphi-Library PASSWORT FORMULAR, damit solltest du weiter kommen. :idea:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Do 12.02.09 11:39 
könntest auch das vorformular immer als erstes aus der Hauptanwendung starten (showmodal) und wenn nicht gestartet werden soll, gleich wieder das hauptformular beenden.
Ich machs in etwa so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 type TVorFormular = class(TForm)
  ....
 end;

 function zeigeVorformular : boolean; 

implementation

function zeigeVorformular : boolean;
begin
 result := True;
 Application.CreateForm(TVorFormular, VorFormular);
 try
   VorFormular.ShowModal;
   result := PrüfungenOk;
 finally
  VorFormular.Free;
 end;
end;

// im Hauptmenu dann einfach als erstes
 if not zeigeVorformular then
  Close;

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Do 12.02.09 11:40 
user profile iconNarses hat folgendes geschrieben Zum zitierten Posting springen:
Moin!

Such mal nach Suche in: Delphi-Forum, Delphi-Library SPLASH SCREEN oder Suche in: Delphi-Forum, Delphi-Library PASSWORT FORMULAR, damit solltest du weiter kommen. :idea:

cu
Narses


Danke. Irgendwie bin ich momentan etwas verwirrt. Es funktioniert zwar irgendwie schon aber ich bastel grad bissal durch und nun blick ich auch nimma durch. Ich poste mal etwas Quellcode:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
//Projekt-Quelltext
begin
  frmCheck := TfrmCheck.Create(Application);
  frmCheck.Show;
  frmCheck.Update;
  //...
end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TfrmCheck.FormShow(Sender: TObject);
begin
    //... Aufgaben abarbeiten

    if not LError.Visible then
    begin
      frmMain.Show;
    end;
end;


Und hier muss ahlt dafür Sorge getragen werden, dass entweder bei not LError.Visible automatisch oder meinetwegen auch nach kurzer Zeit das VorFormular geschlossen und das Main-Formular geöffnet wird.


Edit: Hat jemand noch nen Vorschlag zu meinem Code/Problem ??
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 08:38 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
könntest auch das vorformular immer als erstes aus der Hauptanwendung starten (showmodal) und wenn nicht gestartet werden soll, gleich wieder das hauptformular beenden.
Ich machs in etwa so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 type TVorFormular = class(TForm)
  ....
 end;

 function zeigeVorformular : boolean; 

implementation

function zeigeVorformular : boolean;
begin
 result := True;
 Application.CreateForm(TVorFormular, VorFormular);
 try
   VorFormular.ShowModal;
   result := PrüfungenOk;
 finally
  VorFormular.Free;
 end;
end;

// im Hauptmenu dann einfach als erstes
 if not zeigeVorformular then
  Close;


ich hät noch die ein oder andere Frage zu dem Quellcode.
- PruefungenOK ist vom Wert boolean oder? und global oder?
- wo rufst du die function zeigeVorfromular auf ?
- was meinst du mit "im Hauptmenü als erstes" ? erster befehl im formshow oder ?
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 13.02.09 09:25 
user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:


ich hät noch die ein oder andere Frage zu dem Quellcode.
- PruefungenOK ist vom Wert boolean oder? und global oder?
- wo rufst du die function zeigeVorfromular auf ?
- was meinst du mit "im Hauptmenü als erstes" ? erster befehl im formshow oder ?


1. Ja. Im Vorformular werden alle Prüfungen gemacht, das Ergebnis dieser Prüfungen hab ich hier mal als boolean definiert (ein Integer würde natürlich auch gehen, wenn man den Prüffehler näher spezifizieren will und im Hauptmenü dann auswerten möchte)

2/3. ZeigeVorformular ruf ich meistens im Formcreate des Hauptmenü's auf (erste Zeile nach dem inherited, als erster Aufruf im Formshow sollte aber auch gehen.

Kleine Fehler noch in meinem Beispiel: Statt Vorformular.free wäre Vorformular.release richtiger

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 10:26 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:


ich hät noch die ein oder andere Frage zu dem Quellcode.
- PruefungenOK ist vom Wert boolean oder? und global oder?
- wo rufst du die function zeigeVorfromular auf ?
- was meinst du mit "im Hauptmenü als erstes" ? erster befehl im formshow oder ?


1. Ja. Im Vorformular werden alle Prüfungen gemacht, das Ergebnis dieser Prüfungen hab ich hier mal als boolean definiert (ein Integer würde natürlich auch gehen, wenn man den Prüffehler näher spezifizieren will und im Hauptmenü dann auswerten möchte)

2/3. ZeigeVorformular ruf ich meistens im Formcreate des Hauptmenü's auf (erste Zeile nach dem inherited, als erster Aufruf im Formshow sollte aber auch gehen.

Kleine Fehler noch in meinem Beispiel: Statt Vorformular.free wäre Vorformular.release richtiger

Hmm.. das is mir irgendwie grad bissal zu kompliziert. steig da grad ned durch.

hät jemand eine lösung mit dem splash-screen für mich?
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 13.02.09 10:35 
Wieso kompliziert ?
eigentlich ganz einfach ...

du baust ein Fenster (Vorformular) nach der obigen Methode,
darin machste alle deine Prüfungen, wenn die alle ok sind,
setzt du das result der Aufruf-function auf True, sonst auf false;

Das Vorformular bindest du natürlich in dein Hauptformular ein (Uses-Anweisung);

dann machste im Formshow oder Formcreate des Hauptformulars

ausblenden Delphi-Quelltext
1:
2:
 if not zeigeVorformular then
  Close;


Wo genau ist dir das denn zu kompliziert bzw. wo haperts denn ? Kannste bissl Code zeigen ?

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 10:42 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
Wieso kompliziert ?
eigentlich ganz einfach ...

du baust ein Fenster (Vorformular) nach der obigen Methode,
darin machste alle deine Prüfungen, wenn die alle ok sind,
setzt du das result der Aufruf-function auf True, sonst auf false;

Das Vorformular bindest du natürlich in dein Hauptformular ein (Uses-Anweisung);

dann machste im Formshow oder Formcreate des Hauptformulars

ausblenden Delphi-Quelltext
1:
2:
 if not zeigeVorformular then
  Close;


Wo genau ist dir das denn zu kompliziert bzw. wo haperts denn ? Kannste bissl Code zeigen ?

Ich probiers mal. Bin grad etwas verwirrt. Ne andre Ffage. Spielt es ne Rolle, welches Formular in den Projektoptionen als Hauptformular eingestellt ist. VorForumlar oder das wirkliche HauptFormular?
Quellcode vom Programm.exe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
  frmCheck := TfrmCheck.Create(Application);
  frmCheck.Show;
  frmCheck.Update;

  Application.Initialize;
  ...
end.


VorFormular:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TfrmCheck.FormShow(Sender: TObject);
begin
   //Überprüfen

  if not LError.Visible then  //Das ist mein Prüf-Ergebnis: Entweder: Programm beenden, oder Button-Visible schalten, der dann des Hauptformular öffnet
  begin
    BtnOpen.Visible := true;
  end;  
end;


Hauptformular:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TfrmMain.FormShow(Sender: TObject);
begin
  //im Hauptmenü als erstes:
{  if not frmCheck.zeigefrmCheck then
    Close;
}

  //Rest...
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 13.02.09 11:14 
user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:

Ich probiers mal. Bin grad etwas verwirrt. Ne andre Ffage. Spielt es ne Rolle, welches Formular in den Projektoptionen als Hauptformular eingestellt ist. VorForumlar oder das wirkliche HauptFormular?
Quellcode vom Programm.exe:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
begin
  frmCheck := TfrmCheck.Create(Application);
  frmCheck.Show;
  frmCheck.Update;

  Application.Initialize;
  ...
end.



die ersten 3 Zeilen kannste löschen, werden nicht gebraucht.
bei der von mir beschriebenen Methode erzeugt sich das Formular selbst ;)


user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:

VorFormular:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TfrmCheck.FormShow(Sender: TObject);
begin
   //Überprüfen

  if not LError.Visible then  //Das ist mein Prüf-Ergebnis: Entweder: Programm beenden, oder Button-Visible schalten, der dann des Hauptformular öffnet
  begin
    BtnOpen.Visible := true;
  end;  
end;



die Aufrufmethode etwas anpassen :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function zeigefrmCheck : boolean;
begin
 result := True;
 Application.CreateForm(TfrmCheck, frmCheck);
 try
   frmCheck.ShowModal;
   result := BtnOpen.Visible;
 finally
  frmCheck.Release;
 end;
end;



Aufruf im Hauptformular dann so:

user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfrmMain.FormShow(Sender: TObject);
begin
  //im Hauptmenü als erstes:
  if not zeigefrmCheck then
    Close;
  //Rest...

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 11:30 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconrob87 hat folgendes geschrieben Zum zitierten Posting springen:

VorFormular:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TfrmCheck.FormShow(Sender: TObject);
begin
   //Überprüfen

  if not LError.Visible then  //Das ist mein Prüf-Ergebnis: Entweder: Programm beenden, oder Button-Visible schalten, der dann des Hauptformular öffnet
  begin
    BtnOpen.Visible := true;
  end;  
end;



die Aufrufmethode etwas anpassen :
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function zeigefrmCheck : boolean;
begin
 result := True;
 Application.CreateForm(TfrmCheck, frmCheck);
 try
   frmCheck.ShowModal;
   result := BtnOpen.Visible;
 finally
  frmCheck.Release;
 end;
end;



Was hast du da jetzt geändert? Des is doch genau mein Dingens. Ich komm mit der Methode zeigefrmCheck noch nicht klar. Wo rufst du die auf?
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 11:33 
Ich checks ned... Ich hab mein FormShow des Haupt-Formulars:
Dort mach ich zuerst die Prüfungen... Wenn dann alles passt (dass frag ich eben über LERROR.Visible ab), dann zeigt er den Button, der weiterführt.
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 13.02.09 13:05 
also, wenn ich dich richtig verstehe:

1. Hauptform macht prüfungen in formshow

2. Ergebnis der prüfungen wird in frmchck angezeigt

3. wenn BtnOpen sichtbar, waren prüfungen ok, (Haupt-) prog darf starten



ICH würde es so machen:


1. Hauptform ruft Prüf-Form auf (wie von mir beschrieben)

2. Prüf-Form macht alle Prüfungen

3. Prüfergebnis schaltet in Prüf-Form entweder Label oder Button sichtbar

4. Prüf-Form gibt an Hauptform, ob Button sichtbar war

5. Prüf-From-Rückgabe führt zu Progende oder Normalstart

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 13:11 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
also, wenn ich dich richtig verstehe:

1. Hauptform macht prüfungen in formshow

2. Ergebnis der prüfungen wird in frmchck angezeigt

3. wenn BtnOpen sichtbar, waren prüfungen ok, (Haupt-) prog darf starten



ICH würde es so machen:


1. Hauptform ruft Prüf-Form auf (wie von mir beschrieben)

2. Prüf-Form macht alle Prüfungen

3. Prüfergebnis schaltet in Prüf-Form entweder Label oder Button sichtbar

4. Prüf-Form gibt an Hauptform, ob Button sichtbar war

5. Prüf-From-Rückgabe führt zu Progende oder Normalstart


*lol* Dein SOLL-Vorschlag ist mein IST-Zustand *g*

1.) Ich rufe als allererstes das frmCheck auf, dass macht alle Prüfungen selbstständig.

2.) Wenn diese Prüfungen in ORdnung sind, wird der ButtonClick angezeigt, welcher nun das Hauptformular aufruft, andernfalls wird die Fehlermeldung ausgegeben (und der Benutzer kann nur das Programm schlie0en)

3.) Von seitens des Hauptformular ist keine Kommunikation zum frmCheck (während dem Programm-Laden)

Lösung:
1.) klappt wunderbar
2.) klappt auch, mit dem Mängel, dass halt das Hauptformular VOR das check-Formular erscheint, alles soweit ganz gut, nur will ich das Check-Formular noch komplett wegbringen. Aktuell sind halt dann zwei Fenster offen. Natürlich kann ich beim Schließen des Hauptformulares das frmCheck mit schließen und das Programm beenden. Der gesamte Aufwand dieses Threads besteht darin, dass ich zwei Fenster/Formulare in der Taskleiste bzw. am Bildschirm hab *g* Ich hoff nun ist es nochmal verständlicher geworden
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 13.02.09 13:25 
dann mach den aufruf
if zeigefrmChck ...
mal vor dem inherited im Formshow deines Hauptformulares,
das sollte dann verhindern, das die Hauptform
angezeigt wird.

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
rob87 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 461

Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
BeitragVerfasst: Fr 13.02.09 14:00 
user profile iconzuma hat folgendes geschrieben Zum zitierten Posting springen:
dann mach den aufruf
if zeigefrmChck ...
mal vor dem inherited im Formshow deines Hauptformulares,
das sollte dann verhindern, das die Hauptform
angezeigt wird.


Alles irgendwie seltsam... Also aktuell ist folgendes:
- In den Projektoptionen steht als Hauptformular auch das RICHTIGE Hauptformular drin
- Das Formular frmCheck lädt wie es sich gehört am Anfang als einziges Formular. Aber wenn ich nun auf den Button Klicke, führt er frmMain.Show; aus. er sagt, er führt es aus, aber das Fromular ist für mich nicht sichtbar.

Ich mach mal schnell ein neues kleines Delphi-Projekt zum Testen, das lad ich dann mal hoch...
Einloggen, um Attachments anzusehen!
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Fr 13.02.09 16:18 
Hab dein Testprog mal eben angepasst, funzt bei mir einwandfrei.
Mach gleich feierabend, am besten du diffst die Unterschiede,
falls du dann noch fragen an mich hast: bin Montag wieder hier im df anzutreffen ;)
Einloggen, um Attachments anzusehen!
_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!