![]() |
MessageBox onTop bei aufruf möglich?
Also meine Messagebox mit einer Fehlermeldung liegt leider beim Aufrufen hinter meinem SplashScreen. Kann ich es irgendwie beim Aufruf schon zwingen onTop (bringtofront) zu gehen?
|
Re: MessageBox onTop bei aufruf möglich?
Dein SplashScreen ist aber nicht auf StayOnTop, oder? :shock:
Wenn doch: Wen willst du denn mit dem Programm ärgern? Du kannst mittels Application.NormalizeTopMosts diese Fenster vorher zurückpfeifen und nach dem Dialog mit RestoreTopMosts wiederherstellen. Benutzen würde ich so ein Tool allerdings nicht. Ein SplashScreen auf StayOnTop ist ungefähr eine der nervigsten Sachen, die es gibt. |
Re: MessageBox onTop bei aufruf möglich?
Zitat:
Bringt mir das NormalizeTopMosts/ RestoreTopMosts dann etwas, wenn das Splash nicht auf StayonTop ist? |
Re: MessageBox onTop bei aufruf möglich?
Dann machst du etwas bei der Anzeige des SplashScreen ungünstig. Wenn ich das Splashfenster normal erzeuge und anzeige, dann werden alle MessageBoxen davor angezeigt. (Deshalb bin ich ja nur auf die Idee gekommen. ;-))
Beispiel:
Delphi-Quellcode:
frmSplashScreen := TfrmSplashScreen.Create(nil);
frmSplashScreen.Show; Application.MessageBox('Test', 'Test', 0); frmSplashScreen.Close; // Action in OnClose auf caFree |
Re: MessageBox onTop bei aufruf möglich?
Ich zeige dir mal die Erzeugung meines SplashScreens, vieelicht siehst du etwas auffälliges:
Delphi-Quellcode:
auf caFree setze ich das erst wieder bei der Destroy-Funktion, kann es eventuell daran liegen? Die LoaderForm wird geladen, nachdem die HauptForm unsichtbar geöffnet wird. Sieht in der Create-Fkt so aus:
procedure TLoaderForm.FormActivate(Sender: TObject);
var i: Integer; oleVoice: OLEVariant; begin // wird aufgerufen, wenn Form auf dem Schirm "sichtbar" ist. (ist ja noch transparent) // In Schleife einblenden for i := 0 to 230 do begin LoaderForm.AlphaBlendValue := i; Application.ProcessMessages; end; sleep(500); // eine halbe Sek. warten (kann natürlich entfernt werden) end; procedure TLoaderForm.FormClose(Sender: TObject; var Action: TCloseAction); var i: Integer; begin // Wenn Form geschlossen wird, ausblenden und "Self.Free" machen for i := 230 downto 0 do begin LoaderForm.AlphaBlendValue := i; Application.ProcessMessages; end; Action := caFree; end; procedure TLoaderForm.FormCreate(Sender: TObject); begin AnzeigeLabel.Caption := ''; end; procedure TLoaderForm.FormShow(Sender: TObject); begin LoaderForm.AlphaBlendValue := 0; LoaderForm.AlphaBlend := true; // Form ist nun trasparent (=unsichtbar) end;
Delphi-Quellcode:
procedure TBedienForm.FormCreate(Sender: TObject);
begin BedienForm.Enabled := false; LoaderForm := TLoaderForm.Create(Application); LoaderForm.Show; LoaderForm.Refresh; end; |
Re: MessageBox onTop bei aufruf möglich?
Eventuell solltest du nicht Application sondern dein Hauptfenster oder nil als Besitzer angeben beim Erzeugen des Splashscreens.
OnActivate wird ja nicht unbedingt nur einmal aufgerufen, aber genauer habe ich gerade keine Zeit zu überlegen was da in der Form schief gehen kann. Ich werde es mir heute Abend, wenn ich wieder zu Hause bin anschauen, dann sehe ich sicher woran das liegt. Benutzt du eigentlich Application.MessageBox? |
Re: MessageBox onTop bei aufruf möglich?
Also wenn ich als Owner die MainForm nehme, ändert sich ersteinmal nichts, also die MessageBox bleibt immer noch im Hintergrund. Auch die Application.Message ändert nichts. Aber mir ist aufgefallen, dass das SplashScreen im Vordergrund bleibt, wenn ich hier FireFox anklicke, also muss doch irgendwo versteckt noch ein StayOnTop irgendwio sein.
Edit1: Ok hab das StayOnTop gefunden. Hatte ich etwas versteckt in meiner MainForm reingeschrieben. Thanks @jaenicke für die Hilfe MfG BAMatze |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:43 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