| Autor |
Beitrag |
rob87
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 12.02.09 10:59
Moin!
Such mal nach SPLASH SCREEN oder PASSWORT FORMULAR, damit solltest du weiter kommen.
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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:
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;
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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Do 12.02.09 11:40
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:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| begin frmCheck := TfrmCheck.Create(Application); frmCheck.Show; frmCheck.Update; end; |
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| procedure TfrmCheck.FormShow(Sender: TObject); begin 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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Fr 13.02.09 08:38
zuma hat folgendes geschrieben : | 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:
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;
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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Fr 13.02.09 09:25
rob87 hat folgendes geschrieben : |
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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Fr 13.02.09 10:26
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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
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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Fr 13.02.09 10:42
|
|
zuma
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: Fr 13.02.09 11:14
_________________ Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Fr 13.02.09 11:30
|
|
rob87 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Fr 13.02.09 13:11
zuma hat folgendes geschrieben : | 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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 
      
Beiträge: 461
Win Me, Win XP Home, Win XP Prof
Delphi 2007 Enterprise
|
Verfasst: Fr 13.02.09 14:00
zuma hat folgendes geschrieben : | 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
      
Beiträge: 660
Erhaltene Danke: 21
Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
|
Verfasst: 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!
|
|