![]() |
Problem mit mehreren Forms und ShowModal
Ich habe ein Hauptformular (Form1).
Daraus wird per ShowModal ein zweites Formular geöffnet.
Delphi-Quellcode:
Wenn man auf den Button klickt, Sieht Form1 erstmal ganz komisch aus, (Graue Fläche, alle "Sachen" als weiße Löcher) und nach einiger Zeit (=nach dem alles ausgeführt wurde) wird Form2 angezeigt, es schließt sich jedoch nicht.
procedure TForm1.Button2Click(Sender: TObject);
begin Form1.FormStyle := fsNormal; Form2.FormStyle := fsStayOnTop; Form2.ShowModal; Form2.FormStyle := fsNormal; Form1.FormStyle := fsStayOnTop; refreshed; end; Hier der Quellcode für Form2:
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Inifiles, StrUtils, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ComCtrls, ExtCtrls; type TForm2 = class(TForm) IdHTTP1: TIdHTTP; ProgressBar1: TProgressBar; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure refresh; procedure FormShow(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; nach: array[0..8] of string; implementation uses Unit1; {$R *.dfm} procedure TForm2.refresh; const vfehler = 'Es trat ein Fehler bei der Internetverbindung auf !'; sfehler = 'Es trat ein Fehler bei der Speicherung der Wechselkurse auf !'; var Ini: TIniFile; quell: array[0..7] of string; z: integer; fehler: string; begin Progressbar1.Position := 0; Label1.Caption := 'Aktualisierung läuft ...'; Label1.Font.Color := clNavy; sleep (1000); Application.ProcessMessages; try // viele Anweisungen, Falls etwas schief geht steht eine Beschreibung des Fehlers in Fehler Label1.Caption := 'Erfolgreich Aktualisiert'; Label1.Font.Color := clGreen; except showmessage (fehler); Label1.Caption := 'Es sind Fehler aufgetreten !'; Label1.Font.Color := clRed; end; Application.ProcessMessages; sleep (1000); Form2.Close; end; procedure TForm2.FormCreate(Sender: TObject); begin nach[0] := 'USD'; nach[1] := 'GBP'; nach[2] := 'CHF'; nach[3] := 'NOK'; nach[4] := 'DKK'; nach[5] := 'SEK'; nach[6] := 'JPY'; nach[7] := 'XAU'; end; procedure TForm2.FormShow(Sender: TObject); begin refresh; end; end. |
Re: Problem mit mehreren Forms und ShowModal
Ein Teil deindes Codes:
Delphi-Quellcode:
Du löst hier Refresh im OnShow-Event des Forms auf, vielleicht wäre eine bessere Codeformatierung und eine bessere Bezeichnerauswahl angebracht :-D
procedure TForm2.refresh;
const vfehler = 'Es trat ein Fehler bei der Internetverbindung auf !'; sfehler = 'Es trat ein Fehler bei der Speicherung der Wechselkurse auf !'; var Ini: TIniFile; quell: array[0..7] of string; z: integer; fehler: string; begin Progressbar1.Position := 0; Label1.Caption := 'Aktualisierung läuft ...'; Label1.Font.Color := clNavy; sleep (1000); Application.ProcessMessages; try // viele Anweisungen, Falls etwas schief geht steht eine Beschreibung des Fehlers in Fehler Label1.Caption := 'Erfolgreich Aktualisiert'; Label1.Font.Color := clGreen; except showmessage (fehler); Label1.Caption := 'Es sind Fehler aufgetreten !'; Label1.Font.Color := clRed; end; Application.ProcessMessages; sleep (1000); Form2.Close; end; procedure TForm2.FormCreate(Sender: TObject); begin nach[0] := 'USD'; nach[1] := 'GBP'; nach[2] := 'CHF'; nach[3] := 'NOK'; nach[4] := 'DKK'; nach[5] := 'SEK'; nach[6] := 'JPY'; nach[7] := 'XAU'; end; procedure TForm2.FormShow(Sender: TObject); begin refresh; end; Wieso sleepst du eigentlich? |
Re: Problem mit mehreren Forms und ShowModal
Zitat:
Zitat:
Sonst würde das Ergebnis erscheinen und Millisekunden später schon wieder weg sein ... |
Re: Problem mit mehreren Forms und ShowModal
Jetzt ist mir klar!
Deine Prozedur Refresh wird mit dem OnShow-Event aufgerufen. Aber hier: einmal machst du:
Delphi-Quellcode:
und ein anderes mal:
sleep (1000);
Application.ProcessMessages;
Delphi-Quellcode:
Application.ProcessMessages;
sleep (1000); |
Re: Problem mit mehreren Forms und ShowModal
Zitat:
Das eine mal möchte ich, dass er schläft, alles was passiert ist aufarbeitet, und dann weitermacht. Das andere mal, dass er zum Schluss noch mal alles abarbeitet, und sich dann nach einer sekunde schließt. |
Re: Problem mit mehreren Forms und ShowModal
Ich pushe ja sonst nicht (*schleim*), aber das muss jetzt mal sein ...
Hat keiner mehr eine Idee ??? |
Re: Problem mit mehreren Forms und ShowModal
nee. so direkt nicht. aber lass mal das verändern des formstyles weg.
|
Re: Problem mit mehreren Forms und ShowModal
Also was mir als erstes in sAuge springt ist die Tatsache, dass du den
![]() Zitat:
|
Re: Problem mit mehreren Forms und ShowModal
Wenn ich das FormStyle weglasse, bleibt Form1, wie es ist, aber Form2 erscheint erst, wenn es fertig ist, ausserdem, schließt es sich immernoch nicht.
|
Re: Problem mit mehreren Forms und ShowModal
Lass den ganzen FormStyle-, Sleep- und App.ProcessMess-Scheiss weg und guck dir den Anhang zu meinem letzten Post
![]() Gruß |
Re: Problem mit mehreren Forms und ShowModal
Mmmh ... geht das nicht auch einfacher ???
|
Re: Problem mit mehreren Forms und ShowModal
Ja:
Delphi-Quellcode:
Form2.ModalResult := mrCancel;
//oder: Form2.ModalResult := mrOk; |
Re: Problem mit mehreren Forms und ShowModal
Wo muss das Hin ?
Etwa So?
Delphi-Quellcode:
Wäre imernoch das Problem, das das Form2 erst erscheint, wenn refresh; beendet ist ...
Form2.ModalResult := mrOk;
Form2.Close; |
Re: Problem mit mehreren Forms und ShowModal
Statt Close
|
Re: Problem mit mehreren Forms und ShowModal
Liste der Anhänge anzeigen (Anzahl: 1)
|
Re: Problem mit mehreren Forms und ShowModal
Liste der Anhänge anzeigen (Anzahl: 1)
Das ganze muss in das OnPaint Ereignis rein:
Delphi-Quellcode:
Im Anhang noch mal dein Projekt.
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls; type TForm2 = class(TForm) ProgressBar1: TProgressBar; procedure FormPaint(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form2: TForm2; bFirstTime: Boolean = True; implementation {$R *.dfm} procedure TForm2.FormPaint(Sender: TObject); var i: Integer; begin Application.ProcessMessages; if bFirstTime then begin bFirstTime := False; for I := 0 to 9 do begin Progressbar1.StepIt; Progressbar1.Repaint; Sleep(1000); end; end; end; end. Edit: Den Rest des Codes habe ich nicht durchgesehen. Aber da läßt sich bestimmt auch noch einiges verbessern. |
Re: Problem mit mehreren Forms und ShowModal
Ich habe alles hinbekommen, bis auf eines:
Da ich möchte, dass alles automatisch abläuft, geht es, bei einem mit ShowModal geöffneten Formular, dieses innerhalb von Form2.Activate wieder zu schließen ? (Mit anderen Worten: Gibt's da einen Trick? Ich würds sonst mit nem Timer machen ...) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 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