Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Lightbox-Effekt für Form (https://www.delphipraxis.net/140886-lightbox-effekt-fuer-form.html)

xOli30 25. Aug 2011 08:30

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 ?!

DeddyH 25. Aug 2011 09:05

AW: Lightbox-Effekt für Form
 
Das Parent Form soll wohl das sein, das abgedunkelt wird. Das eigentlich anzuzeigende ist dann das Form.

xOli30 25. Aug 2011 09:12

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:
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;
Danke :-D

WladiD 26. Apr 2012 13:49

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:
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.
Die Verwendung ist dann nach diesem Schema:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SubForm: TForm1;
begin
  SubForm := TForm1.Create(Self);
  try
    ShowModalDimmed(SubForm);
  finally
    SubForm.Free;
  end;
end;

Satyr 5. Dez 2012 15:48

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

borncrush 5. Dez 2012 17:51

AW: Lightbox-Effekt für Form
 
Na durch ShowModal wird der verwendete Thread (in diesem Bsp.: Hauptthread) gestoppt, bis das Modal abgeschlossen....oder??!

Satyr 5. Dez 2012 22:11

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.)

stahli 5. Dez 2012 22:41

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:
http://www.delphipraxis.net/156662-t...-fluessig.html

Satyr 6. Dez 2012 12:56

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 :).

Bummi 6. Dez 2012 14:27

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.
Seite 2 von 3     12 3      

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