Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit mehreren Forms und ShowModal (https://www.delphipraxis.net/28744-problem-mit-mehreren-forms-und-showmodal.html)

jfheins 29. Aug 2004 16:32


Problem mit mehreren Forms und ShowModal
 
Ich habe ein Hauptformular (Form1).
Daraus wird per ShowModal ein zweites Formular geöffnet.
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.FormStyle := fsNormal;
Form2.FormStyle := fsStayOnTop;
Form2.ShowModal;
Form2.FormStyle := fsNormal;
Form1.FormStyle := fsStayOnTop;
refreshed;
end;
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.

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.

mytar 29. Aug 2004 16:41

Re: Problem mit mehreren Forms und ShowModal
 
Ein Teil deindes Codes:

Delphi-Quellcode:
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;
Du löst hier Refresh im OnShow-Event des Forms auf, vielleicht wäre eine bessere Codeformatierung und eine bessere Bezeichnerauswahl angebracht :-D

Wieso sleepst du eigentlich?

jfheins 29. Aug 2004 16:47

Re: Problem mit mehreren Forms und ShowModal
 
Zitat:

Zitat von mytar
vielleicht wäre eine bessere Codeformatierung und eine bessere Bezeichnerauswahl angebracht :-D

Möchtest du mal den Code sehen, bevor ich das alles in eine prozedur gepackt habe ???

Zitat:

Zitat von mytar
Wieso sleepst du eigentlich?

Weil ich dem Benutzer mit wenig programmiertechnischen aufwand die Möglichkeit geben möchte, zu sehen, was passiert.
Sonst würde das Ergebnis erscheinen und Millisekunden später schon wieder weg sein ...

mytar 29. Aug 2004 16:51

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:
sleep (1000);
Application.ProcessMessages;
und ein anderes mal:
Delphi-Quellcode:
Application.ProcessMessages;
sleep (1000);

jfheins 29. Aug 2004 17:15

Re: Problem mit mehreren Forms und ShowModal
 
Zitat:

Zitat von mytar
einmal machst du:
Delphi-Quellcode:
sleep (1000);
Application.ProcessMessages;
und ein anderes mal:
Delphi-Quellcode:
Application.ProcessMessages;
sleep (1000);

Ist das schlimm ???
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.

jfheins 30. Aug 2004 13:59

Re: Problem mit mehreren Forms und ShowModal
 
Ich pushe ja sonst nicht (*schleim*), aber das muss jetzt mal sein ...
Hat keiner mehr eine Idee ???

nailor 30. Aug 2004 14:02

Re: Problem mit mehreren Forms und ShowModal
 
nee. so direkt nicht. aber lass mal das verändern des formstyles weg.

Luckie 30. Aug 2004 14:03

Re: Problem mit mehreren Forms und ShowModal
 
Also was mir als erstes in sAuge springt ist die Tatsache, dass du den Delphi-Referenz durchsuchenFormStyle zur Laufzeit änderst. In meiner Delphi Hilfe steht dazu:
Zitat:

Note: It is not advisable to change FormStyle at runtime.

jfheins 30. Aug 2004 14:10

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.

Leuselator 30. Aug 2004 14:13

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 in diesem Thread an - das sollte Dein Problem lösen.
Gruß


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:44 Uhr.
Seite 1 von 2  1 2      

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