![]() |
Delphi-Version: 10.2 Tokyo
Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Die Älteren von euch werden bestimmt das ein oder andere Delphi Buch aus dem Hanser Verlag, C&L oder mitip kennen.
Auch das Internet ist recht spärlich zu diesem Thema. Leider finde ich zu meiner Frage keine für mich verständliche Antwort. Also traue ich mich hier in die Runde eine Anfängerfrage zustellen. Ich habe Hauptformular(SDI) und ein Childformular, vom Hauptformular aus erzeuge ich ein Childformular per: frmClient := TfrmClient.create(self); frmClient.show; Nun möchte ich das Hauptformular minimieren (evtl. später nur in der Taskleiste) aber das frmClient sollen weiterhin auf dem Desktop sichtbar bleiben. Leider verschwinden das frmClient ebenfalls wenn das Hauptformular minimiert wird. Ich habe verschiedenes ausprobiert, aber das ist ein stochern im Dunkeln. Habt ihr Literaturhinweise und Stichworte wo ich von lernen kann. Oder sogar praktische Beispiele wie so etwas gemacht wird? |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Hide ist das Stichwort, wenn Du es nicht anzeigen willst.
Code:
frmClient := TfrmClient.create(self);
frmClient.show; self.hide; |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Ja Danke,
aber mit hide ist das Mainformular nicht mehr greifbar, bei minimiert kann ich immer noch auf das Mainformular zugreifen |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Sowas dürfte einfach nicht gehen. Child kann man nicht sichtbar haben, wenn parent minimiert/versteckt ist.
Überleg dir mal ob du überhaupt noch auf MDI setzt. Praktisch kein Programm nutzt das mehr. Ist mehr oder minder ein Konzept aus dem letzten Jahrtausend. |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Upps das funktioniert auch:
self.WindowState:= wsMinimized; nee leider nicht, Client wird auch wsMinimized |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
ich verwende kein MDI sondern Hauptformular(SDI)
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
Ja das Konzept ist alt. Aber solange es keine brauchbare Alternative gibt nutze ich das weiterhin. Aber zurück zum Thema: ich sehe nicht dass er irgendwo MDI nutzt. |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Das Hauptformular übernimmt hier oft viele Eigenschaften, welche für die ganze Anwendung gelten, bzw. es fummelt (zu) oft eigenmächtig an solchen Einstellungen rum.
Mainform schließen = Anwendung beenden Mainform minimieren = Anwendung minimieren ... |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
Im OnClose der Form2 ein MainForm.Show und schon stehst Du wieder am Anfang. |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Liste der Anhänge anzeigen (Anzahl: 2)
Vieleicht hilft das weiter warum mich frage. In meinem Beispiel habe ich ein simples PostIT Tool gebaut. Das Programm und Basisverhalten entspricht meiner Vorstellung wie ohne Kopfzeile und Rahmenloses Clientformular das per Maus halten verschoben werden kann, kleine Feature StayOnTop Farben für Font und Background, zentrales speichern der Notizen in einer einfachen SQLite Tabelle usw..
Nur das Mainform minimieren, weil es zum normalen Gebrauch ausser per Doppelklick oder PopupMenu einen neuen PostIT-Zettel erstellen, nicht benötigt wird, bekomme ich nicht hin. Das im Mainform ein Grid mit allen PostIT-Zettel enthalten ist, ist nur eine Spielerrei. Am Rande bemerkt; Alles was ich mit Delphi mache ist Hobby weil es mir Spaß macht ohne kommerzielle Ambitionen. |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Ich weiß nicht genau ob es das ist wonach Du suchst aber zumindest kannst Du hiermit Dein Hauptfenster minimieren/verstecken und all Deine anderen Fenster bleiben offen.
Delphi-Quellcode:
CodeSiteLogging habe ich nicht, deine eigene DsUnitXE3 fehlt leider auch im Download.
{ -----------------------------------------------------------------------------
Unit Name: frClient Unit Pfad: C:\DelphiSourceXE\PostIt_2022 Projekt : PostIt Plattform: Uses: CodeSiteLogging, DsUnitXE3, ### ChangeLog 28.01.2021 28.01.2021 Createdatum ----------------------------------------------------------------------------- } unit frClient; interface uses //CodeSiteLogging, Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.Types, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.DBCtrls, Data.DB, DBAccess, Uni, MemDS; type TfrmClient = class(TForm) PopMnu: TPopupMenu; nmuDelete: TMenuItem; DBMmo: TDBMemo; Qry: TUniQuery; ds: TUniDataSource; QryIDNR: TIntegerField; QryFrmName: TStringField; QrysNotiz: TStringField; QryBKColor: TStringField; QryclTop: TIntegerField; QryclLeft: TIntegerField; QryclHeight: TIntegerField; QryclWidth: TIntegerField; QryiStayOnTop: TIntegerField; nmuStayOnTop: TMenuItem; dlgColor: TColorDialog; nmuColor: TMenuItem; QryftColor: TStringField; nmuFtColor: TMenuItem; procedure nmuDeleteClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure DBMmoChange(Sender: TObject); procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean); procedure nmuStayOnTopClick(Sender: TObject); procedure DBMmoMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure DBMmoMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure DBMmoMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure nmuColorClick(Sender: TObject); procedure nmuFtColorClick(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); protected procedure CreateParams(var Params: TCreateParams); override; private FInitialPos: TPoint; procedure SaveSetUp; { Private-Deklarationen } public PubiIDNR: Integer; bDel: Boolean; procedure SetData(iIDNR: Integer); end; var frmClient: TfrmClient; // frClient implementation uses frPostIt; {$R *.dfm} procedure TfrmClient.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Params.WndParent := 0; end; Wenn ich beides auskommentiere und entsprechende Zeilen ändere kann ich Dein Projekt starten. |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Ps: Zum testen hatte ich Deiner Hauptform einen Style mit minimieren Button ausgestattet :lol:
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Bin nicht sicher ob das auf einfache Art lösbar ist. Bin auch nicht sicher, ob das normales Windows- oder Delphi Verhalten ist (Minimierung des Hauptfensters). Ein Lösungsansatz könnte aber eventuell sein, ein spezielles unsichtbares Hauptformular zu untzen (ev. W=0/H=0, wenn Visble False nicht geht), welches dann das Anwendungshautpformular ist. Dein aktuelles Hauptformular würde dann auch zu einem "normalen" Formular und hätte keinen Einfluss mehr auf die anderen PostIt Fenster. Das ist mal so ein Ideenansatz, habe es selber aber nicht ausprobiert.
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
Man kann dieses Verhalten ändern, in dem man im DPR-File die Zeile
Delphi-Quellcode:
auf false ändert, aber das hat unschöne Nebenwirkungen (seit Windows Vista); das Taskbar-Icon funktioniert dann nicht mehr richtig.
Application.MainformOnTaskbar := true;
Besser ist es, wie in KodeZwerks Beispiel die CreateParams-Methode des sekundären Forms zu überschreiben.
Delphi-Quellcode:
Das gibt dem Form einen eigenen Taskbar-Button.
Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW;
Delphi-Quellcode:
Und das entkoppelt das Form vom Mainform, es steht damit auf der gleichen Ebene in der Z-Ordnung wie dieses. Nachteil: Damit kann das Mainform auch das sekundäre Form überdecken, was nicht unproblematisch ist...
**Params.WndParent := 0;
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Aber ist das wirklich das, was er will? Also ich möchte bei mir nicht für jedes einzelne PostIt ein eigenes Symbol auf der Taskabar haben.
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Erstmal Danke; Jeder Tipp ist willkommen.
Auf den ersten Blick sind die vielen Items in der Taskbar unschön. Aber es ist ein Schritt weiter. Nun habe ich einen Ansatz in welche Richtung ich mich schlau machen kann. |
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
|
AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 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