Autor Beitrag
stiftmaster
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: Mi 28.09.05 16:10 
Hallo Leute,

in meiner Applikation kommt es vor, dass Prozeduren mehrere Sekunden brauchen (Zugriffe aufs Internet / Datenbanken usw.) Daher möchte ich gerne so einen "Warte-Screen" anzeigen doch hab ich keine Ahnung, wie ich das am sinnvollsten löse.

Die Forderungen wären:
- Warte-Screen modal anzeigen
- mehrere Funktionen hintereinander abarbeiten
- Warte-Screen beenden

Ich hab keine Ahnung, wie ich das intelligent lösen soll, weil

WaitScreen.StartModal;
Function 1;
function 2;
WaitScreen.Close;

läuft nicht - der hängt natürlich nach StartModal - weil dann erstmal die Sachen dort abgearbeitet werden. Wenn ich die Funktionen in WaitScreen.OnShow einbaue, läuft der Close-Funktion nicht... ich bin mit meinem Wissen am Ende

Danke für euer Feedback

Stefan
Raffo
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 300



BeitragVerfasst: Mi 28.09.05 16:27 
dann mach einfach WarteForm.Show;

...

WarteForm.Hide;

Ich persönlich hab mir ne Routine geschrieben, die auch den HinweisString übergibt:

Hinweis('Bitte warten...');

... Abarbeitung...

Hinweis('');

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:
function Hinweis(const Msg:string):bool;
begin
if msg='' then
   begin
   try
   WarteForm.Hide;
   except
   end;
   WarteFormCaption:='';
   Screen.Cursor:=crDefault;
   exit;
   end;

WarteFormCaption:=msg;
Screen.Cursor:=crHourglass;
Application.ProcessMessages;
try
if warteForm.canFocus then
WarteForm.Show;
except
end;
Application.ProcessMessages;
end;


Moderiert von user profile iconChristian S.: Quote- durch Delphi-Tags ersetzt
stiftmaster Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 149



BeitragVerfasst: Mi 28.09.05 20:54 
Hi,

im Grunde läuft dein Ansatz ja auf folgendes heraus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm.Button1Click(Sender: TObject);
begin
  if WaitForm.canFocus then
    WaitForm.Show;
  FUNCTOINS;
  Form2.Close;
end;


Das hat jetzt auch wunderbar geklappt - das Problem scheint wohl zu sein, wenn ich WaitForm.ShowModal aufrufe - anstelle von WaitForm.Show;

Bei ShowModal ruft er das Fenster modal auf, dann wartet er und erst wenn ich das Fenster schließe werden die Functions ausgelöst.

Wie schaffe ich es nun, dass das Fenster trotzdem modal ist - eine Möglichkeit wäre folgende:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm.Button1Click(Sender: TObject);
begin
  Enabled := False;
  if WaitForm.canFocus then
    WaitForm.Show;
  FUNCTOINS;
  Form2.Close;
  Enabled := True;
end;


Gibt es da noch n' elegantere Möglichkeit?

Stefan