Announcement

Collapse
No announcement yet.

Fenster minimiert nicht richtig

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Fenster minimiert nicht richtig

    Hallo,

    schätze mal ich habe ein typischen Anfängerproblem (weiß aber nicht wonach ich suchen sollte, um es zu lösen).

    Situation:
    mehrere Fenster
    Das zuerst sichtbare Fenster ist form10 (stayontop, zur Passworteingabe) schließe ich mit close.
    Danach wird ein Form1 angezeigt. Das form1 wird auch in der Windows-Taskbar angezeigt.
    Bis hier ist alles ganz normal.

    Will ich jetzt Form1 über die Systembutton minimieren, dann macht es sich nicht unsichtbar (bis auf den Eintrag in der Taskbar), sondern dockt sich an die Taskbar an, so dass mindestens die 3 Systembuttons von Form1 sichtbar bleiben.

    Wie bekomme ich es hin, dass Form1 "normal" minimiert?

    Hinweis: Alle weiteren Forms, die ich aus Form1 aufrufe, herlassen keinen Taskbar-Eintrag. (keine Ahnung, ob das was zu bedeuten hat.)

    Gruß
    Werner

  • #2
    Hallo,

    für Delphi ist das erste Formular, das in der Projektdatei (*.dpr) erzeugt wird, das Hauptfenster der Anwendung. Allerdings ist für das Betriebssystem das unsichtbare TApplication-Fenster das Hauptfenster, so dass es zu dem geschilderten Verhalten kommen kann.

    In der Projektdatei muss das Hauptformular der Anwendung als 1. Formular erzeugt werden, d.h. das Login-Fenster darf an dieser Stelle nicht als erstes Fenster erzeugt werden:
    <pre>
    <b>program</b> Project1;
    <br>
    <b>uses</b>
    Forms,
    Unit1 <b>in</b> <font color="#9933CC">'Unit1.pas'</font> <font color="#003399"><i>{Form1}</i></font>,
    Unit2 <b>in</b> <font color="#9933CC">'Unit2.pas'</font> <font color="#003399"><i>{Form2}</i></font>;
    <br>
    <font color="#003399"><i>{$R *.res}</i></font>
    <br>
    <b>begin</b>
    Application.Initialize;
    Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
    Application.Run;
    <b>end</b>.
    </pre>
    Wenn die danach aufgerufenen nichtmodalen Fenster nicht oberhalb der Taskbarleiste abgelegt werden sollen, sondern direkt am unteren Rand des Hauptformulars (damit alles "an einem Ort" bleibt), kann man folgendes machen:
    <pre>
    <b>procedure</b> TForm1.Button1Click(Sender: TObject);
    <b>begin</b>
    Form2.ParentWindow := Form1.Handle;
    Form2.Show;
    <b>end</b>;
    </pre>
    Wenn die danach aufgerufenen nichtmodalen Formulare allerdings direkt in der Taskbarleiste sichtbar sein sollen, muss der Fenster-Stil entsprechend angepasst werden (WS_EX_APPWINDOW):
    <pre>
    <b>unit</b> Unit2;
    <br>
    <b>interface</b>
    <br>
    <b>uses</b>
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs;
    <br>
    <b>type</b>
    TForm2 = <b>class</b>(TForm)
    <b>private</b>
    <font color="#003399"><i>{ Private-Deklarationen }</i></font>
    <b>public</b>
    <font color="#003399"><i>{ Public-Deklarationen }</i></font>
    <b>procedure</b> CreateParams(<b>var</b> Params: TCreateParams); <b>override</b>;
    <br>
    <b>end</b>;
    <br>
    <b>var</b>
    Form2: TForm2;
    <br>
    <b>implementation</b>
    <br>
    <font color="#003399"><i>{$R *.dfm}</i></font>
    <br>
    <font color="#003399"><i>{ TForm2 }</i></font>
    <br>
    <b>procedure</b> TForm2.CreateParams(<b>var</b> Params: TCreateParams);
    <b>begin</b>
    <b>inherited</b> CreateParams(Params);
    Params.ExStyle := Params.ExStyle <b>or</b> WS_EX_APPWINDOW;
    <b>end</b>;
    <br>
    <b>end</b>.
    </pre&gt

    Comment


    • #3
      Hallo,

      das ist ja wunderbar.
      Mit der guten Erklärung habe ich das Problem lösen können.

      Gruß
      Werne

      Comment


      • #4
        Hallo,

        ich hatte genau das gleiche problem und habe es auf beschriebenem wege gelöst!
        NUR:
        Wenn das minimierte Fenster in der Taskbar ist und darunter ist ein geöffnetes childfenster mit einem DBgrid, dann reagiert die anwendung auf mausklicks im grid nicht!!!!

        schreibe ich die oben zitierte prozedure so:
        <pre>
        <b>procedure</b> TFormMainBike.CreateParams(var Params: TCreateParams);
        <b>begin</b>
        inherited CreateParams(Params);
        Params.ExStyle := Params.ExStyle;// or WS_EX_APPWINDOW;
        <b>end;</b>
        </pre>

        dann funzt das anklicken im Grid, aber wie oben richtig beschrieben, ist dann das fenster nicht mehr in der Taskbar!

        wie klappt beides?

        Gruß

        Marku
        Herzliche Grüße

        Markus Lemcke
        barrierefreies Webdesign

        Comment


        • #5
          habe nochmal ne frage zur CreateParams-prozedur!
          ich habe sie in ein testprojekt mit nichtchildfenster eingebaut und da verschwinden die fenster nicht in die tasbkar beim minimieren. warum
          Herzliche Grüße

          Markus Lemcke
          barrierefreies Webdesign

          Comment

          Working...
          X