![]() |
AW: Lightbox-Effekt für Form
Ich bekomme die Fehlermeldung "Aus einem sichtbaren Fenster kann kein modales gemacht werden" ?!
Was is denn überhaupt mit parent Form gemeint? Ich hab doch nur 1 Form ?! |
AW: Lightbox-Effekt für Form
Das Parent Form soll wohl das sein, das abgedunkelt wird. Das eigentlich anzuzeigende ist dann das Form.
|
AW: Lightbox-Effekt für Form
Habs hinbekommen.
Hab das ShowModal rausgenommen und auch die 2 Zeilen bei "finally", da ich den Dimmeffekt ja erst ausschalten will, wenn die ladeaktion beendet ist. Die dynamisch erstellte Form geb ich dann frei wenn das Programm zu Ende geladen hat.
Delphi-Quellcode:
Danke :-D
function TForm1.ShowModalDimmed(Form, ParentForm: TForm): TModalResult;
var Back: TForm; i: Byte; begin Back := TForm.Create(nil); try Back.Position := ParentForm.Position; Back.BorderStyle := ParentForm.BorderStyle; Back.BorderIcons := []; Back.AlphaBlend := true; Back.AlphaBlendValue := 0; Back.Color := clBlack; with ParentForm do Back.SetBounds(Left, Top, Width, Height); Back.Show; for i := 1 to 185 do begin Back.AlphaBlendValue := i; Sleep(2); end; Form.Left := ParentForm.left + ((ParentForm.Width - Form.Width) div 2); Form.Top := ParentForm.Top + ((ParentForm.Height - Form.height) div 2); finally Temp := Back; end end; |
AW: Lightbox-Effekt für Form
Sorry, dass ich das Thema aus der Vergessenheit zurückhole, aber ich habe hier zum Testen eine Unit für den Lightbox-Effekt (basierend auf den Vorschlägen) umgeschrieben und wollte es Euch nicht vorenthalten.
Der Dimm-Effekt ist damit animiert, ohne die Anwendung zu blockieren.
Delphi-Quellcode:
Die Verwendung ist dann nach diesem Schema:
unit FormUtils;
interface uses SysUtils, Classes, Forms, Graphics, Controls, ExtCtrls; function ShowModalDimmed(Form: TForm): TModalResult; implementation type TDimmFormController = class(TComponent) private FFadeTimer: TTimer; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FadeTimer(Sender: TObject); public constructor Create(Owner: TComponent); override; end; function ShowModalDimmed(Form: TForm): TModalResult; var Back, ParentForm: TForm; begin ParentForm := Screen.ActiveForm; Back := TForm.Create(nil); try Back.Position := ParentForm.Position; Back.BorderStyle := ParentForm.BorderStyle; Back.BorderIcons := []; Back.PopupParent := ParentForm; Back.AlphaBlend := True; Back.AlphaBlendValue := 0; Back.Color := clBlack; with ParentForm do Back.SetBounds(Left, Top, Width, Height); Back.Show; TDimmFormController.Create(Back); Result := Form.ShowModal; finally Back.Close; ParentForm.SetFocus; end end; { TDimmFormController } constructor TDimmFormController.Create(Owner: TComponent); begin inherited Create(Owner); FFadeTimer := TTimer.Create(Self); FFadeTimer.Interval := 25; FFadeTimer.OnTimer := FadeTimer; TForm(Owner).OnClose := FormClose; end; procedure TDimmFormController.FadeTimer(Sender: TObject); const FadeTo: Integer = 120; var Form: TForm; begin Form := TForm(Owner); if Form.AlphaBlendValue < FadeTo then Form.AlphaBlendValue := Form.AlphaBlendValue + 10; FFadeTimer.Enabled := Form.AlphaBlendValue < FadeTo; end; procedure TDimmFormController.FormClose(Sender: TObject; var Action: TCloseAction); begin FFadeTimer.Enabled := FALSE; Action := caFree; end; end.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var SubForm: TForm1; begin SubForm := TForm1.Create(Self); try ShowModalDimmed(SubForm); finally SubForm.Free; end; end; |
AW: Lightbox-Effekt für Form
Huhu,
ich klinke mich hier mal ein. Ich habe den Code von Chris verwendet, möchte aber das Selbe machen wie Oli. Also eine "Wird geladen Anzeige. Im Grunde funktioniert es auch. Das Fenster wird abgedunkelt, mein Ladefenster wird gezeigt - aber das wars. Das ich das am Ende free'n muss, per Hand, ist mir klar. Ich möchte aber das mein Programm solange das Ladefenster auf ist, genau das tut. "darunter" eine andere Form öffnen und das onCreate von dieser ausführen. Also weiterarbeiten. Das passiert aber leider nicht. Warum? Application.ProcessMessages; hilft leider auch nicht... Gruß, Andreas |
AW: Lightbox-Effekt für Form
Na durch ShowModal wird der verwendete Thread (in diesem Bsp.: Hauptthread) gestoppt, bis das Modal abgeschlossen....oder??!
|
AW: Lightbox-Effekt für Form
Wie könnte ich das lösen? Einfaches .show; ? Aber bleibt dann trotzdem unter dem Ladefenster alles "unklickbar"? Das wär mir wictig...
(Bin grade nicht zu Hause, sonst würde ich es testen.) |
AW: Lightbox-Effekt für Form
Du könntest den Ladeprozess in Dein transparentes Formular verlagern.
Ansonsten hatte shark mal etwas ähnliches gebastelt - glaube ich: ![]() |
AW: Lightbox-Effekt für Form
Ladeprozess verlagern ginge leider nur mit viel Aufwand, weil ich mir das als Ladebildschirm basteln möchte, den ich in verschiedenen Situationen nutzen kann.
Aber danke für den Hinweis auf das von Shark, ich schau mir das mal an :). |
AW: Lightbox-Effekt für Form
@Satyr
stahli's Idee ist trotzdem gut und richtig. Du musst ja das laden selbst nicht ausslagern, sondern dem Construktor nur einen optionalen Zeiger auf eine Prozedur/Methode mitgeben die er aufrufen kann. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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