AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Forms umschalten - ohne zwischendurch Desktop zu sehen?
Thema durchsuchen
Ansicht
Themen-Optionen

Forms umschalten - ohne zwischendurch Desktop zu sehen?

Ein Thema von mcmichael · begonnen am 16. Okt 2016 · letzter Beitrag vom 17. Okt 2016
Antwort Antwort
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 16. Okt 2016, 08:43
Hallo Experten,

in meiner Anwendung empfange ich den Benutzer mit einem Begrüßungs-Form mit einem START-Knopf.
Der Button soll unter anderem vom Begrüßungs-Form umschalten auf ein anderes Form.
Das geschieht auch, ABER: zwischen dem verschwinden des Begrüßungs-Forms und dem Darstellen
des neuen Forms ist eine Verzögerung, bei der bei schwachen Computern der Desktop für
fast eine Sekunde sichtbar ist.
Gibt's Wege, bei denen ich verzugslos umschalten kann?

Danke schon mal,
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#2

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 16. Okt 2016, 10:15
zwischen dem verschwinden des Begrüßungs-Forms und dem Darstellen
des neuen Forms ist eine Verzögerung, bei der bei schwachen Computern der Desktop für
fast eine Sekunde sichtbar ist.
Gibt's Wege, bei denen ich verzugslos umschalten kann?
Zeig doch erst einmal, wie du jetzt die Umschaltung vornimmst.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#3

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 16. Okt 2016, 11:04
Da fällt mir spontan ein ...

Delphi-Quellcode:
const
 WM_FORM_VISIBLE = WM_USER + 1;

type
 TDeineAnwendung = class(TForm)
 // ....
 private
  bFormVisibleChecked: Boolean;
  procedure WMFormVisible(var msg: TMessage); message WM_FORM_VISIBLE;
 public
 // ....
end;

implementation

// ....

procedure TDeineAnwendung.FormCreate(Sender: TObject);
begin
 bFormVisibleChecked := False;
end;

procedure TDeineAnwendung.WMFormVisible(var msg: TMessage);
begin
 if not bFormVisibleChecked then
  begin
   showmessage('Zweites Formular ist jetzt komplett sichtbar - verstecke Formular eins!');
   bFormVisibleChecked := True;
  end;
end;

procedure TDeineAnwendung.FormPaint(Sender: TObject);
begin
 if not bFormVisibleChecked then
  PostMessage(Handle, WM_FORM_VISIBLE, 0, 0);
end;
Die showmessage() wird erst angezeigt, wenn Formular 2 komplett sichtbar ist.
In WMFormVisible kannst du jetzt den Begrüßungsbildschirm ausblenden, schließen oder was auch immer machen.
  Mit Zitat antworten Zitat
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 16. Okt 2016, 11:53
Also momentan mache ich es so:

in der dpr alle Application.CreateForm

Delphi-Quellcode:

//Im Ereignis-Code des "START" Buttons:
ControlForm.Hide; //das ist das "Begrüßungs-Form"
Form1.Show; //hier soll es weitergehen
Form1.Left:=0;
Form1.Top:=0;
Form1.width:=1024;
Form1.height:=768;
tc:=GetTickcount;
repeat
      Application.ProcessMessages;
until (GetTickcount-tc)>200;
MainUnit.MainLoop; //hier werden einige GDI+ Grafikroutinen aufgerufen die auf dem Form1 zeichnen
...
  Mit Zitat antworten Zitat
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 16. Okt 2016, 11:57
Wenn ich Form1.Show vor dem ControlForm.hide aufrufe, ist der Inhalt von Form1
unvollständig. Und das impliziert dein Ansatz doch, oder?


Da fällt mir spontan ein ...
...
Die showmessage() wird erst angezeigt, wenn Formular 2 komplett sichtbar ist.
In WMFormVisible kannst du jetzt den Begrüßungsbildschirm ausblenden, schließen oder was auch immer machen.
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#6

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 16. Okt 2016, 12:15
Zitat:
Wenn ich Form1.Show vor dem ControlForm.hide aufrufe, ist der Inhalt von Form1
unvollständig. Und das impliziert dein Ansatz doch, oder?
Ne. ControlForm.Hide darf erst in WMFormVisible aufgerufen werden. Bis dahin ist Form1 schon komplett sichtbar.

WMFormVisible nicht mit FormShow verwechseln. Setz mal eine ShowMessage in FormShow und WMFormVisible.
Du wirst sehen, dass die MessageBox in FormShow kommt, bevor das Formular sichtbar ist. Die MessageBox in WMFormVisible kommt erst, nachdem das Formular komplett gezeichnet wurde und somit sichtbar ist.

Wenn du also ControlForm.Hide; in WMFormVisible machst, verschwindet der Begrüßungsbildschirm erst wenn dein Haupt-Formular komplett sichtbar ist.

Im Anhang mal ein Beispiel.
Angehängte Dateien
Dateityp: zip WMFormVisible.zip (624,0 KB, 13x aufgerufen)

Geändert von Jim Carrey (16. Okt 2016 um 12:24 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von mcmichael
mcmichael

Registriert seit: 5. Jun 2008
Ort: Bremen
79 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 17. Okt 2016, 19:58
@Jim Carrey:
perfekt.
so läuft's einwandfrei!

Vielen Dank!
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#8

AW: Forms umschalten - ohne zwischendurch Desktop zu sehen?

  Alt 17. Okt 2016, 21:37
Vielen Dank für die Rückmeldung.

Der Ehrlichkeit halber muss ich gestehen: ich weiß nicht, ob das eine saubere und gute Lösung ist.
Aber ich hatte damit von Windows XP bis Windows 10 noch nie Probleme.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:31 Uhr.
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