Autor Beitrag
Stefan S.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 184


D5
BeitragVerfasst: Mi 22.12.04 18:13 
@Christian S.: OK, Thread Nr.1! ^^

Wenn man bei meinen Programmen bei einem Formular, das nicht von Anfang an da war, sondern erst durch "Form1.Hide + Form2.Show" aufgerufen wurde, auf "Minimieren" klickt, dann ist da nicht nur das zum Programm gehörende Rechteck in der Taskleiste unten, sondern auch noch gleich darüber, ganz links, eine kleine Extra-Leiste für das Fenster. Da aber in dem Programm nie mehrere Formulare gleichzeitig angezeigt werden, will ich, dass das jeweilige Fenster auch so behandelt wird, als wäre es das einzige, sprich, beim Minimieren soll nur das Rechteck in der Taskleiste sein. Aber wie geht das?


Moderiert von user profile iconChristian S.: Topic aus Sonstiges verschoben am Mi 22.12.2004 um 17:15
Coder
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1383
Erhaltene Danke: 1

WinXP
D2005 PE
BeitragVerfasst: Mi 22.12.04 19:30 
Normalerweise sollte das nicht so sein. :gruebel:
Vergleich mal im Objektinspektor deine Form mit einer neu erstellten Form, um zu sehen ob du irgendwas falsches verstellt hast. :nixweiss:
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 23.12.04 10:21 
Hi
Form1 ist in der Regel das Hauptformular deiner Anwendung. Wenn Du nun einfach schreibst
ausblenden Quelltext
1:
2:
form1.Hide;
form2.Show;

versteckst du zwar das erste Formular, aber es ist trotzdem immer noch vorhanden. Und weil das erste Fenster als Hauptfenster deiner Anwendung agiert, ist es solange vorhanden wie deine Anwendung läuft. Wenn du nun ein zweites, unabhängiges fenster öffnest und dann minimierst, wird in der Taskleiste dein laufendes Programm angezeigt und darüber das minimierte Fenster.
Zur Abhilfe könntest du z. B. aus deinem Programm ein MDI-Programm machen (Hauptfenster.Formstyle auf MDIForm) und alle untergeordneten Fenster als MDIChilds.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
Stefan S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 184


D5
BeitragVerfasst: Do 23.12.04 17:48 
LCS hat folgendes geschrieben:
Zur Abhilfe könntest du z. B. aus deinem Programm ein MDI-Programm machen (Hauptfenster.Formstyle auf MDIForm) und alle untergeordneten Fenster als MDIChilds.


Dann werden aber von Anfang an auch alle "MDIChild"-Fenster angezeigt ("Visible" kann man dann nicht mehr auf "False" stellen) und das sollen sie nicht... Gibt es eine andere Lösung?
Nochmal zur Verdeutlichung, so sieht das aus, wenn ich Form2 minimiert habe:

user defined image

Das unten rechts ist für das ganze Programm und das oben links nur für das eine Fenster. Und das soll weg.
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 23.12.04 19:10 
Hi

DaSteve hat folgendes geschrieben:

Dann werden aber von Anfang an auch alle "MDIChild"-Fenster angezeigt ("Visible" kann man dann nicht mehr auf "False" stellen) und das sollen sie nicht... Gibt es eine andere Lösung?


Nicht wenn du sie zur Laufzeit dynamisch erzeugst und beim schliessen wieder freigibst.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
EUOCheffe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 124



BeitragVerfasst: So 26.12.04 19:25 
Zwei Möglichkeiten:

1. Fenster dynamisch erstellen und statt Create einfach CreateParented(GetDesktopWindow) aufrufen.

2. Fenster normal von Delphi erstellen lassen, in der Fensterklasse aber noch folgende Prozedur deklarieren:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
type
  TForm2 = class(TForm)
    procedure CreateParams(var Params: TCreateParams); override;
  end;


die dann so aussieht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm2.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.WndParent:=GetDesktopWindow;
end;


Bei meinen Landsleuten hätte es die Lösung auch gegeben, nur ist der DB-Server grad down, deshalb hab ichs halt selber eingetippt.

Zitat:
www.swissdelphicente.../showcode.php?id=547

...untergeordnete Formulare in die Taskbar minimieren? [Oberfläche]
26.05.2001
Hits: 8729
Stefan S. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 184


D5
BeitragVerfasst: Do 30.12.04 15:48 
@EUOCheffe: Hm, aber irgendwie funktioniert das nicht so, wie ich mir das vorgestellt hab: Wenn man dann unten drauf klickt, nachdem man es minimiert hat, dann öffnet sich da so ein Popup-Menü, wo ich dann beide Fenster auswählen kann: Das Startfenster - wenn ich da draufklicke passiert gar nichts - und Form2, das ich dann per Klick öffnen kann. Ich hätte das am liebsten so, dass er einfach so tut, als wären alle Forms gleich, nur das halt mal die eine geöffnet ist und die andere geschlossen und umgekehrt, will sagen, da soll einfach immer nur ein einziges "Rechteck" sein, mit dem ich das jeweilige Fenster wieder öffnen kann... Mach ich vielleicht auch irgendwas falsch? Oder hat das alles vielleicht auch was speziell mit meinem PC zu tun, also, dass das nur bei mir so ist?