Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MessageBox onTop bei aufruf möglich? (https://www.delphipraxis.net/134344-messagebox-ontop-bei-aufruf-moeglich.html)

BAMatze 20. Mai 2009 10:26


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?

jaenicke 20. Mai 2009 10:35

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.

BAMatze 20. Mai 2009 10:39

Re: MessageBox onTop bei aufruf möglich?
 
Zitat:

Zitat von jaenicke
Dein SplashScreen ist aber nicht auf StayOnTop, oder? :shock:

Ne ist nicht StayonTop, hab ebend selber nochmal schnell den Quellcode überflogen und auch suchen lassen. Ärgern will ich ja keinen damit :D. Deswegen hab ich mich auch gewundert, dass die MessageBox nicht im Vordergrund erscheint.

Bringt mir das NormalizeTopMosts/ RestoreTopMosts dann etwas, wenn das Splash nicht auf StayonTop ist?

jaenicke 20. Mai 2009 10:42

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

BAMatze 20. Mai 2009 10:55

Re: MessageBox onTop bei aufruf möglich?
 
Ich zeige dir mal die Erzeugung meines SplashScreens, vieelicht siehst du etwas auffälliges:

Delphi-Quellcode:
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;
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:

Delphi-Quellcode:
procedure TBedienForm.FormCreate(Sender: TObject);
begin
  BedienForm.Enabled := false;
  LoaderForm := TLoaderForm.Create(Application);
  LoaderForm.Show;
  LoaderForm.Refresh;
end;

jaenicke 20. Mai 2009 11:38

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?

BAMatze 20. Mai 2009 12:16

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 13:46 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