AGB  ·  Datenschutz  ·  Impressum  







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

Form auf Form (nötig?)

Ein Thema von Mysterio08 · begonnen am 2. Jan 2011 · letzter Beitrag vom 4. Jan 2011
Antwort Antwort
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#1

Form auf Form (nötig?)

  Alt 2. Jan 2011, 16:48
Hallo,

unter besonderen Umständen soll eine Form "disabled" sein, aber auf meine ganz eigene Weise. Das heißt: Es soll sich über die ganze Form ein weißer "Schleier" legen, wie im Bild im Anhang dargestellt (mit einem Bildbearbeitungsprogramm realisiert).
Mit einem TImage klappt dies nicht, weil ich keine halbtransparente Grafik ohne den Effektverlust laden kann.
Mein nächster Ansatz war nun, selbst eine Komponente zu erstellen, ich habe an TForm gedacht. Mein bisheriger Versuch sieht so aus:
Delphi-Quellcode:
  Form := TForm.Create(Self);
  Form.Parent := Self;
  Form.Name := 'FormTest';
  Form.BorderStyle := bsNone;
  Form.Position := poMainFormCenter;
  Form.AlphaBlend := False;
  Form.Caption := '';
  Form.Left := 10;
  Form.Top := 10;
  Form.Width := 100;
  Form.Height := 100;
  Form.Color := clBlack;
Allerdings hat sich optisch noch nichts getan. Woran liegt das?
Und fahre ich mit einer eigenen TForm-Komponente am besten. Oder doch vielleicht eine ganz anderen? - Und wenn ja, welche?

mfg.
Miniaturansicht angehängter Grafiken
beispiel.gif  
  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
 
#2

AW: Form auf Form (nötig?)

  Alt 2. Jan 2011, 17:16
Dürfte sich IMHO nur über ein rahmenloses "Alphaform" realisieren lassen welches über den Clientbereich gelegt wird, Focuswechsel, Moving, Resizing etc. werden dann die nächsten Kandidaten, wenn kein modaler Dialog drübergelegt, oder das Hauptform diabled wird.
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
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#3

AW: Form auf Form (nötig?)

  Alt 3. Jan 2011, 09:26
Wie genau realisiere ich denn eine "'randlose' Alphaform"?. Heißt doch: "AlphaBeld" auf "True" und dann den Wert "AlphaBlendValue" auf einen gewünschten Wert einstellen, oder?
Wenn dem so ist, dann habe ich daran ja auch schon gedacht. Das Problem ist eben, dass ich die Form nicht erstellt bekomme und weiß nicht weshalb. Denn wenn das klappt, sind ja die "AlphaBlend" Properties nur noch Einstellungssache.
  Mit Zitat antworten Zitat
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#4

AW: Form auf Form (nötig?)

  Alt 3. Jan 2011, 16:52
Ok, bei obigem Code fehlte noch das "Form.Show". Jetzt wird mir immerhin schonmal die gewünschte Form angezeigt.
Doch damit sind meine Probleme noch nicht gelöst: Die Form wird mir nur angezeigt, wenn "BoderStyle" auf "bsDialog" steht, ein anderer Style wird nicht toleriert ("bsNone" bräuchte ich). Natürlich komme ich mit "AlphaBlend" und "AlphaBlendValue" dem gewünschten Ergebnis näher - man kann ja das verschieben der Form verhinden, die Caption der Hauptform übernehmen, weil die ja immer überlagert wird. Was das nächste Problem darstellt, mit dem "Schließen-X" oben rechts (man muss zweimal klicken, um die Hauptanwendung zu schließen...).

Richtig elegant und das herbeigesehnte Ergebnis ist es also noch nicht.
Was kann ich anders / besser machen?
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Form auf Form (nötig?)

  Alt 3. Jan 2011, 17:32
Denkanstoß:
Das darübergelegte Form als Kind des MainForms gestalten (Form.Parent:=MainForm), Borderstyle:=bsNone, die Größe nur so, dass der Clientbereich des Hauptforms bedeckt ist (Top:=0, Left:=0, Width:=MainForm.Clientwidth, Height:=MainForm.ClientHeight) und das ganze über Show anzeigen.
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  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
 
#6

AW: Form auf Form (nötig?)

  Alt 3. Jan 2011, 17:48
mit
Form.Parent:=MainForm ist das Alphablend weg....
Show geht auch mit Borderstyle=bsNone
Die Position und Größe musst Du Dir rausrechnen, dies auch beim "Sizen" und "Moven" des Mainforms + BringToFront, wenn Du nicht Modal anzeigst.
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
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Form auf Form (nötig?)

  Alt 3. Jan 2011, 18:15
mit
Form.Parent:=MainForm ist das Alphablend weg....
Stimmt.
Andere Möglichkeit:
Kein zweites Form, sondern ein TImage.
In die Uses TPNGImage eintragen und das TImage mit einem entsprechenden png-Bild mit einer bestimmten Transparenz laden. So würde ich vorgehen
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  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
 
#8

AW: Form auf Form (nötig?)

  Alt 3. Jan 2011, 18:23
Auch nicht, Wincontrols bekommst Du so nicht abgedeckt....
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
Mysterio08

Registriert seit: 11. Jan 2009
142 Beiträge
 
#9

AW: Form auf Form (nötig?)

  Alt 4. Jan 2011, 16:04
Ich hab es jetzt geschafft. Ich poste mal den ganzen dazugehörigen Code:
Delphi-Quellcode:
procedure TFormMain.ShowDarkLayer;
(*Create a new form that covers all components (except the status bar). Set black background but transparent*)
var
  Buffer: Integer; //Pseudo variable since the parameter list of "FormConstrainedResize" requires a variable
begin
  FormLayer := TForm.Create(FormMain);
  FormLayer.Name := 'FormLayer';
  FormLayer.BorderStyle := bsNone;
  FormLayer.AlphaBlend := True;
  FormLayer.AlphaBlendValue := 100;
  FormLayer.Color := clBlack;
  FormLayer.BringToFront;
  FormLayer.Cursor := crNo;
  FormLayer.Show;
  FormLayer.Hint := 'This form is closed since no connection is established';
  FormLayer.ShowHint := True;
  Application.HintPause := 0;
  FormConstrainedResize(Self, Buffer, Buffer, Buffer, Buffer);
end;

procedure TFormMain.FormConstrainedResize(Sender: TObject; var MinWidth, MinHeight, MaxWidth, MaxHeight: Integer);
(*This procedure is necessary if the dark layer is available and the form is resized or moved!*)
begin
  if FormLayer <> nil then begin
    FormLayer.Left := Left + 7;
    FormLayer.Top := Top + 28;
    FormLayer.Width := ClientWidth+2;
    FormLayer.Height := ClientHeight + 5
  end
end;
Die einzige noch bestehende "Schwachstelle": Wenn man unter Windows 7 mit dem Fenster wackelt, sodass sich alle vorher auf diese Weise minimierten Fenster wieder einblenden, bleibt die schwarze "Folie" über der Form in paar Pixel weiter weg. Aber damit kann ich leben. Bewegt oder verändern man die Größe ist alles wieder korrekt

Geändert von Mysterio08 ( 4. Jan 2011 um 16:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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:24 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