AGB  ·  Datenschutz  ·  Impressum  







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

Form2 NICHT modal anzeigen - XE2

Ein Thema von Guido Eisenbeis · begonnen am 7. Nov 2011 · letzter Beitrag vom 9. Nov 2011
Antwort Antwort
Seite 2 von 2     12   
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#11

AW: Form2 NICHT modal anzeigen - XE2

  Alt 7. Nov 2011, 13:56
...
- ist das die Application.Form, dann sieht man nix (nur eine leere Form)
Ah, kapiert. Danke.

Er will doch nicht das Verhalten in TDE ändern, sondern das in XE2.
Janz jenau.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.135 Beiträge
 
Delphi 12 Athens
 
#12

AW: Form2 NICHT modal anzeigen - XE2

  Alt 7. Nov 2011, 15:11
Ups, stümmt ja (bin nach dem gegangen, was er im Profil stehn hat ).
OK, dort könnte man bestimmt schon etwas machen ... irgendwie muß man ja das Klickverhalten ändern können.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: Form2 NICHT modal anzeigen - XE2

  Alt 8. Nov 2011, 08:17
.
Ok, hier eine Zusammenfassung der bisherigen Tipps.


================================================== =====================
----------------------------------------------------
.. Form2 NICHT modal anzeigen
----------------------------------------------------

Quellen:
http://www.delphipraxis.net/164292-f...eigen-xe2.html
http://forum.delphi-treff.de/showthr...l=1#post168156
http://www.delphiforum.de/viewtopic.php?t=107604

Zusammenstellung der folgenden Tipps: Guido Eisenbeis, 2011-11-07.
================================================== =====================


Bis Delphi 2006 (und Turbo Delphi) wird standardmäßig das unsichtbare Applikations-Fenster in der Taskbar angezeigt.

Ab Delphi 2007 wird standardmäßig die MainForm in der Taskleiste angezeigt. Dadurch werden einige Darstellungs-Features
von Windows Vista und 7 ermöglicht, wie z. B. WinFlip. (Ungetestet: Möglicherweise wird in der Win 7 Superbar in der
Fenstervorschau eine leere Form angezeigt.)

Als Nachteil ergibt sich aber eine Beeinflussung der Z-Order zwischen der MainForm und allen weiteren Forms, denn die
werden modal zur MainForm angezeigt. (Siehe in der Delphi-Hilfe für "Application.MainFormOnTaskBar").

Ein simples Beispiel-Projekt hat zwei Forms: Form1 und Form2. Wird das Projekt gestartet und z. B. mit einem Button die
Form2 gezeigt, so lässt sich die MainForm (Form1) NICHT in den Vordergrund bringen. Selbst wenn Form1 aktiv ist, bleibt
sie dennoch hinter Form2.

Will man dieses Verhalten ändern, so dass jeweils Form1 oder Form2 in den Vordergrund kommt, wenn sie aktiv wird, gibt
es mehrere Möglichkeiten.


Möglichkeit 1: In der Projektdatei stellt man Application.MainFormOnTaskBar := False.

Vorteil: Sehr einfach zu implementieren: Muss nur an einer Stelle angegeben werden.

Nachteil: Die oben genannten Features von Vista und Win 7 werden beeinträchtigt, und es wird der Applikations-Titel
in der Taskbar und an anderen Stellen gezeigt, anstatt der Titel der MainForm.



Möglichkeit 2: Per CreateParams kann man die weiteren Forms unabhängig von der MainForm machen.

Vorteil: Die oben genannte Kompatibilität zu Vista und Win 7 bleibt erhalten.

Nachteil: Der Code muss in jeder Form eingefügt werden, außer in der MainForm.

Beispiel:
Delphi-Quellcode:
type
  TForm2 = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

...

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  //Params.WndParent := HWND_DESKTOP; // mit Taskbar-Button
  Params.WndParent := Application.Handle; // ohne Taskbar-Button
end;


Möglichkeit 3: Die MainForm unsichtbar machen und die Form2 als Ersatz-MainForm benutzen, die im FormClose die echte
MainForm schließt und damit das Programm beendet. Dabei wird auch der Taskbar-Eintrag von der Form2 übernommen.

Vorteil: Die oben genannte Kompatibilität zu Vista und Win 7 bleibt erhalten, und Code muss nur in Form1 und
Form2 implementiert werden. Alle weiteren Forms können ohne Veränderung benutzt werden. Nützlich, wenn ein Projekt
viele Forms enthält.

Nachteil: Etwas mehr Code muss implementiert werden, und die echte MainForm ist "außer Betrieb".

Beispiel:

In Form1:
Delphi-Quellcode:
        procedure TForm1.FormCreate(Sender: TObject);
procedure TForm1.FormCreate(Sender: TObject);
begin
   // Hauptfenster verstecken
   Application.ShowMainForm := false;
end;
In Form2:
Delphi-Quellcode:
type
  TForm2 = class(TForm)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

...

uses Unit1;

procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent := HWND_DESKTOP; // mit Taskbar-Button
  //Params.WndParent := Application.Handle; // ohne Taskbar-Button
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Self.Visible := True;
end;

procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  Form1.Close;
end;

Lob, Kritik und Anregungen willkommen.

Guido.
  Mit Zitat antworten Zitat
blauweiss

Registriert seit: 19. Jun 2007
142 Beiträge
 
#14

AW: Form2 NICHT modal anzeigen - XE2

  Alt 8. Nov 2011, 13:01

Lob, Kritik und Anregungen willkommen.

Guido.
Lob !!!
Auch ohne jetzt Deine Möglichkeit 3 auszuprobieren, finde ich Deine Zusammenstellung klasse, sowohl inhaltlich als auch in der Qualität der Aufbereitung. Respekt !

Gruß,
blauweiss
  Mit Zitat antworten Zitat
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Form2 NICHT modal anzeigen - XE2

  Alt 9. Nov 2011, 13:25
Vielen Dank! Lob ist eines meiner liebsten Dinge.

Guido.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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