Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi MainForm minimieren - UnterForm sichtbar (https://www.delphipraxis.net/206-mainform-minimieren-unterform-sichtbar.html)

Yheeky 19. Jun 2002 20:29


MainForm minimieren - UnterForm sichtbar
 
Hi,

ich habe bei einem Projekt eine 2.Form, die ich mit dem Start von Form1 anzeigen lasse. Wenn ich aber nun die MainForm Form1 minimiere, wird auch automatisch Form2 minimiert, was ich aber garnicht möchte. Wie kann ich das verhindern?

Gruß Yheeky

Daniel B 19. Jun 2002 20:32

Hi,

du könntest im OnShow von Form2, form1.Hide oder minimize, schreiben.

Grüsse, Daniel :)

Yheeky 19. Jun 2002 20:37

Beide Formen werden aber zur gleichen Zeit angezeigt. Das geht ja dann so garnicht. Ich habe die beiden Formen vor mir und möchte Form1 minimieren und dann minimiert sich Form2, was sie aber nicht soll.

Gruß Yheeky

Daniel B 19. Jun 2002 20:48

Hi,

habs misverstanden, sorry.
Du könntest aber im OnMinimize von Form1, Form2.Show; schreiben. Ich kanns nicht ausprobieren, sollte aber gehen.

Grüsse, Daniel :)

Yheeky 19. Jun 2002 21:38

Eine Form hat kein OnMinimize Ereignis oder muss ich das irgendwie in den Quellcode schreiben?

Gruß Yheeky

Daniel B 19. Jun 2002 21:58

Neuer Versuch. Ich hab leider kein Dlephi da und kann deswegen nicht nachschauen.

das Ereignis OnHide tritt auf, wenn das Formular verborgen wird, also auch dann, wenn Close mit caHide aufgerufen wird.

Probiers mal. Ich bin mir nicht sicher ob Onhide auftritt wenn man es minimiert. Vielleicht kann mal jemand in der OH nachschauen, ich kanns nicht.

Grüsse, Daniel :)

MrSpock 20. Jun 2002 06:46

Hallo yheeky,

es kommt darauf an, wie du das Hauptformular minimierst. Nutzt du dazu die Minimize Methode von TApplication werden auch die anderen Formulare, die ja Kinder von Application sind minimiert.

Du kannst aber folgendes in OnCreate machen:

[code:1:c4de3a7777]
procedure TForm1.FormCreate(Sender: TObject);
begin

Yheeky 20. Jun 2002 12:45

Hi,

hat leider auch beides nicht funktioniert :(
Weiss noch jemand was?

Gruß Yheeky

toms 20. Jun 2002 13:11

Hi,

Überschreibe die CreateParams und weise dem Parent-Handle der 2. Form
den Desktop zu.

Code:
unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;

type
  TForm2 = class(TForm)
  private
   { Private-Deklarationen }
   procedure CreateParams(var Params: TCreateParams); override;
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.DFM}

procedure TForm2.CreateParams(var params: TCreateParams);
begin
  inherited CreateParams(params);
  params.ExStyle := params.ExStyle or WS_EX_APPWINDOW;
  params.WndParent := GetDesktopwindow;
end;

end.

MrSpock 20. Jun 2002 14:21

Hallo Yheeky,

ich habe den Code bei mir ausprobiert (den mit WindowState) und er funktioniert. Was passiert denn bei dir? Wie wird deine Form2 (die, die nicht verkleinert werden soll) erzeugt? Automatisch oder erzeugst du sie manuell mit TForm.Create? Falls letzteres zutrifft, welchen Parameter übergibst du bei Create?

Yheeky 20. Jun 2002 18:20

@Mr.Spock: Also ich habe es so komischerweise nicht hinbekommen, aber wenn du sagst, dass der Code geht, scheine ich da noch irgendwas falsch zu machen.

@Toms: Funzt einwandfrei! Danke!

@All: Trotzdem danke für eure Bemühungen!

Gruß Yheeky

Nachtrag: Eine Frage hätte ich noch: Wie kann ich den Eintrag in der Taskbar verstecken? Ich denke mal, dass das möglich ist, oder?

MathiasSimmack 20. Jun 2002 19:07

So z.B.
Code:
ShowWindow(Application.Handle,SW_HIDE);
Oder, wie Luckie sagen würde: Stil auf "bsToolWindow" einstellen.
Code:
SetWindowLong(Application.Handle,
  GWL_EXSTYLE,
  GetWindowLong(Application.Handle,GWL_EXSTYLE) or
    WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);

Yheeky 20. Jun 2002 19:59

Sorry, falsch ausgedrückt :o
Ich möchte den Taskbareintrag von der Form2 ausblenden, nicht von der Application allgemein.

Gruß Yheeky

MathiasSimmack 21. Jun 2002 10:52

:idea: ... Achtung, Ironie! - Wenn ich ein Programmierer wäre, dann würde ich testen, ob die Änderung von "Application.Handle" in "Form2.Handle" was bringt ... :idea:

Yheeky 21. Jun 2002 12:10

Witzbold...*applaus* geht natürlich net...hab das natürlich als erstes getestet, ging aber nicht. Er hat die Form dann garnicht mehr angezeigt...

Ich hoffe mir kann noch jemand helfen, von - Entschuldigung - "dummen" Kommentaren kann ich mir nichts kaufen. Sorry @MathiasSimmack, aber das hätte man auch anders formulieren können.

Gruß Yheeky

toms 21. Jun 2002 12:21

Zitat:

@Toms: Funzt einwandfrei! Danke!

+

Zitat:

Ich hoffe mir kann noch jemand helfen
= ?

MathiasSimmack 21. Jun 2002 12:27

@Yheeky:

Da du offenbar die CreateParams-Methode von toms benutzt, zitiere ich an der Stelle einfach mal das PSDK:
Zitat:

WS_EX_APPWINDOW
Forces a top-level window onto the taskbar when the window is visible.
Ich denke, dies dürfte dein Ansatzpunkt sein.

------------

Nachtrag: Außerdem gibt´s in deiner ganzen Idee (vielleicht) einen Widerspruch. Ist die Form2 ein Dialog? Ein Toolwindow? Oder ist sie ein ganz normales Fenster mit den Buttons Minimieren, Maximieren. Dann wär´s interessant zu erfahren, wie der User die minimierte Form wieder erscheinen lassen soll, wenn du ihm keinen Knopf in der Taskbar zugestehst?

Yheeky 21. Jun 2002 14:37

Yo, ist ein Ansatzpunkt. Steht da auch im PSDK wie man den Eintrag in der Taskleiste verbergen kann?

@Toms: Die Frage hat sich auf meinen Nachtrag - ein paar Postings vorher - bezogen...

Gruß Yheeky

Luckie 21. Jun 2002 14:47

ToolWindows haben keinen Button in der Taskleiste.

MathiasSimmack 21. Jun 2002 15:59

Zitat:

Zitat von Yheeky
Steht da auch im PSDK wie man den Eintrag in der Taskleiste verbergen kann?

Ich bin mir ziemlich sicher, dass sich derartige Informationen im PSDK befinden. Und damit du nicht wieder sagst, dass du dir von -Entschuldigung- dummen Kommentaren nichts kaufen kannst, hier etwas zu lesen. Direkt aus dem PSDK:
Zitat:

Managing Taskbar Buttons
The Shell creates a button on the taskbar whenever an application creates a window that isn't owned. To ensure that the window button is placed on the taskbar, create an unowned window with the WS_EX_APPWINDOW extended style. To prevent the window button from being placed on the taskbar, create the unowned window with the WS_EX_TOOLWINDOW extended style. As an alternative, you can create a hidden window and make this hidden window the owner of your visible window.

The Shell will remove a window's button from the taskbar only if the window's style supports visible taskbar buttons. If you want to dynamically change a window's style to one that doesn't support visible taskbar buttons, you must hide the window first (by calling ShowWindow with SW_HIDE), change the window style, and then show the window.

The window button typically contains the application icon and title. However, if the application does not contain a system menu, the window button is created without the icon.

If you want your application to get the user's attention when the window is not active, use the FlashWindow function to let the user know that a message is waiting. This function flashes the window button. Once the user clicks the window button to activate the window, your application can display the message.
Dem ist, denke ich, nichts hinzuzfügen.


Editiert von MathiasSimmack für Yheeky

Yheeky 21. Jun 2002 16:47

Könnte mir das jemand sagen? Hab das PSDK nicht...

Gruß Yheeky

Yheeky 21. Jun 2002 17:10

Erstmal folgendes...ich fand deinen ironischen Kommentar einfach nicht so gut gelungen. Ich habe hier was gefragt und wenn ich es wüsste, würde ich nicht fragen. Logisch war es, ja, aber ich hatte es auch schon getestet und es hatte nicht funktioniert. Hätte das geklappt, hätte ich das schon gepostet...
Naja, aber egal...mit dem Auszug aus der PSDK hast du mir jedenfalls sehr geholfen :lol:
Funktioniert jetzt alles!
DANKE!

Gruß Yheeky

Christian Seehase 21. Jun 2002 17:24

Moin Yheeky,

bezogen auf Dein Posting, welches zu Mathias' Ironie-Kommentar führte:
In so einem Falle ist es ganz hilfreich die Dinge, die Du schon getestet hast zu erwähnen, ggf. natürlich inclusive des Resultates.
Da jeder wohl auch mal das offensichtlichste übersieht, war der Hinweis auf Form2.Handle ja nicht verkehrt.
' ist halt das Problem bei schriftlicher Kommunikation:
Schreiben ist langwieriger als sprechen, so dass man gerne mal was weglässt.

Yheeky 21. Jun 2002 18:30

Ja klar, aber die Art, wie er es rübergebracht hat, hat mich gestört. Ein einfaches "probiere es mal mit Form2.Handle" hätte es ja auch getan...aber wie gesagt -ist jetzt egal, hat sich für mich erledigt 8).

Gruß Yheeky


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 Uhr.

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