Announcement

Collapse
No announcement yet.

Fenter ohne Titel und Bewegbar!

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

  • Fenter ohne Titel und Bewegbar!

    Hallo,
    kennt jemand eine Möglichkeit, den Fenstertitel auszublenden?
    das Fenster sollte trotzden verschiebbar bleiben. Hinweise
    Lösungen oder Tipps gern auch per EMail an [email protected]

    Danke

  • #2
    Hi,<p>
    dafür musst du die procedure CreateParams und die Nachricht WM_NCHITTEST abfangen und überschreiben.<br>
    Ein kleines Beispiel:<p>
    <code><pre>
    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    private
    { Private-Deklarationen }
    procedure CreateParams(VAR Params: TCreateParams); override;
    procedure WMNCHitTest(VAR Msg: TWMNcHitTest); message WM_NCHITTEST;
    public
    { Public-Deklarationen }
    end;</pre><pre>var
    Form1: TForm1;</pre><pre>implementation</pre><pre>{$R *.DFM}</pre><pre>procedure TForm1.CreateParams(VAR Params: TCreateParams);
    begin
    Inherited CreateParams(Params);
    WITH Params DO
    Style := (Style OR WS_POPUP) AND (NOT WS_DLGFRAME);
    end;</pre><pre>procedure TForm1.WMNCHitTest(var msg: TWMNCHitTest);
    begin
    inherited;
    if (msg.Result = htClient) then
    msg.Result := htCaption;
    end;</pre><pre>procedure TForm1.Button1Click(Sender: TObject);
    begin
    Close;
    end;</pre><pre>end.
    </pre></code>
    In der procedure TForm1.WMNCHitTest kannst du dann einstellen in welchem Bereich der Form eine Verschiebung möglich sein soll!<br>
    Im Beispiel ist das das ganze Fenster (<tt>msg.Result = htClient</tt>).<p>
    Gruß,<br>
    Marku

    Comment


    • #3
      Hallo Markus,
      Danke erstmal für die Hilfe, klappt alles soweit gut! Nur
      ist das Formular aber mit verschiedenen Komponenten u.a.
      Panels voll, so dass man nicht mehr das eigentliche Form
      einfangen (mit der Maus) kann. Ich hab am oberen Rand des
      Form ein Panel. Ich möchte nun das Panel dazu nutzen, um
      das Fenster zu verschieben, einfach linke Maustaste drauf
      und dann bewegen. Ist sowas auch machbar, wenn ja kannst
      Du mir auch sagen wie?
      Vielen Dan

      Comment


      • #4
        Hi Klaus,<p>
        wenn das so ist, kannst du dir das Abfangen von <tt>WM_NCHITTEST</tt> sparen!<br>
        Probier dann mal folgendes:<p>
        <pre><code>
        procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
        const
        SC_DRAGMOVE = $F012;
        begin
        if Button = mbLeft then
        begin
        ReleaseCapture;
        Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
        end;
        end;
        </code></pre>
        Wenn du diesen obigen Code beim MouseDown-Event von deinem Panel einfügst, sollte nur beim Klicken auf das Panel ein Verschieben möglich sein!<p>
        Gruß,<br>
        Marku

        Comment

        Working...
        X