AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare
Thema durchsuchen
Ansicht
Themen-Optionen

Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

Ein Thema von dstein · begonnen am 16. Dez 2022 · letzter Beitrag vom 19. Dez 2022
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#11

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 16. Dez 2022, 18:02
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:
{ -----------------------------------------------------------------------------
  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;
CodeSiteLogging habe ich nicht, deine eigene DsUnitXE3 fehlt leider auch im Download.
Wenn ich beides auskommentiere und entsprechende Zeilen ändere kann ich Dein Projekt starten.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#12

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 16. Dez 2022, 18:10
Ps: Zum testen hatte ich Deiner Hauptform einen Style mit minimieren Button ausgestattet
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#13

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 16. Dez 2022, 18:15
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.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 16. Dez 2022, 19:33
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.
Das ding ist, solange es nur ein button auf der taskbar gibt, verhalten sich alle fenster entsprechend des hauptfensters, mit meiner obigen methode wird dieses verhalten auf den kopf gestellt und jedes weitere fenster von dieser klasse bekommt sein eigenen taskbar button spendiert, entkoppelt vom hauptfenster, das einzige was die noch zusammenhält ist ein schließen des hauptfensters.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#15

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 16. Dez 2022, 19:44
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?
Seit etlichen Delphi-Versionen ist das Mainform der Anwendung (das erste mit Application.CreateForm erzeugte Form im DPR-File) der API-Owner aller weiteren Forms, und das ist die Ursache des beschriebenen Verhaltens. Windows stellt dadurch sicher, daß alle sekundären Forms versteckt werden, wenn das Mainform minimiert oder selbst versteckt wird.

Man kann dieses Verhalten ändern, in dem man im DPR-File die Zeile

Application.MainformOnTaskbar := true; auf false ändert, aber das hat unschöne Nebenwirkungen (seit Windows Vista); das Taskbar-Icon funktioniert dann nicht mehr richtig.

Besser ist es, wie in KodeZwerks Beispiel die CreateParams-Methode des sekundären Forms zu überschreiben.

Params.ExStyle := Params.ExStyle or WS_EX_APPWINDOW; Das gibt dem Form einen eigenen Taskbar-Button.

**Params.WndParent := 0; 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...
Peter Below
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 17. Dez 2022, 18:16
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.
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
704 Beiträge
 
Delphi 12 Athens
 
#17

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 17. Dez 2022, 19:38
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.
Schon richtig, man kann die Zeile auch weglassen. Aber dann kommt man nicht mehr an das Fenster, wenn es von sichtbaren Hauptfenster überdeckt wird.
Peter Below
  Mit Zitat antworten Zitat
dstein

Registriert seit: 28. Jul 2005
Ort: Dormagen
55 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#18

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 17. Dez 2022, 20:03
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.
Dirk
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
650 Beiträge
 
Delphi 11 Alexandria
 
#19

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 18. Dez 2022, 18:01
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.
Schon richtig, man kann die Zeile auch weglassen. Aber dann kommt man nicht mehr an das Fenster, wenn es von sichtbaren Hauptfenster überdeckt wird.
Wenn er doch aber meinen Vorschlag nutzt, ist das Hauptfenster ja garnie sichtbar (Dimension 0x0) und ein normales Child Fenster übernimmt die Funktion des Hauptfensters. Will man die ganze App minimieren, müsste dieses Fenster die Befehle an das unsichtbare Hauptformular senden nud so ein Hauptformular imitieren. Müsste doch so gehen.

Geändert von Rolf Frei (18. Dez 2022 um 18:04 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#20

AW: Ausblenden des Hauptformulars(SDI), aber nicht daraus erzeugte Child Formulare

  Alt 19. Dez 2022, 12:44
Aber zurück zum Thema: ich sehe nicht dass er irgendwo MDI nutzt.
Schande über mein Haupt. Irgendwie habe ich SDI mit MDI zusammen geworfen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  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 19:09 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