AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lightbox-Effekt für Form

Offene Frage von "Satyr"
Ein Thema von Codewalker · begonnen am 28. Sep 2009 · letzter Beitrag vom 6. Dez 2012
Antwort Antwort
Seite 2 von 3     12 3      
xOli30

Registriert seit: 15. Dez 2010
5 Beiträge
 
#11

AW: Lightbox-Effekt für Form

  Alt 25. Aug 2011, 09:30
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 ?!

Geändert von xOli30 (25. Aug 2011 um 09:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#12

AW: Lightbox-Effekt für Form

  Alt 25. Aug 2011, 10:05
Das Parent Form soll wohl das sein, das abgedunkelt wird. Das eigentlich anzuzeigende ist dann das Form.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
xOli30

Registriert seit: 15. Dez 2010
5 Beiträge
 
#13

AW: Lightbox-Effekt für Form

  Alt 25. Aug 2011, 10:12
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
  Mit Zitat antworten Zitat
WladiD

Registriert seit: 27. Jan 2006
Ort: Celle
135 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Lightbox-Effekt für Form

  Alt 26. Apr 2012, 14:49
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;
Waldemar Derr
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Lightbox-Effekt für Form

  Alt 5. Dez 2012, 16:48
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
  Mit Zitat antworten Zitat
Benutzerbild von borncrush
borncrush

Registriert seit: 18. Dez 2005
Ort: Berlin
115 Beiträge
 
Delphi XE7 Enterprise
 
#16

AW: Lightbox-Effekt für Form

  Alt 5. Dez 2012, 18:51
Na durch ShowModal wird der verwendete Thread (in diesem Bsp.: Hauptthread) gestoppt, bis das Modal abgeschlossen....oder??!
Delphi programming
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#17

AW: Lightbox-Effekt für Form

  Alt 5. Dez 2012, 23:11
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.)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#18

AW: Lightbox-Effekt für Form

  Alt 5. Dez 2012, 23:41
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
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Satyr

Registriert seit: 8. Feb 2012
Ort: Essen
305 Beiträge
 
Delphi 10.4 Sydney
 
#19

AW: Lightbox-Effekt für Form

  Alt 6. Dez 2012, 13:56
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 .
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#20

AW: Lightbox-Effekt für Form

  Alt 6. Dez 2012, 15:27
@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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 21:42 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