AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Fenster Größe ändern ohne Border

Ein Thema von freak24 · begonnen am 31. Mai 2005 · letzter Beitrag vom 23. Jul 2006
Antwort Antwort
freak24
(Gast)

n/a Beiträge
 
#1

Fenster Größe ändern ohne Border

  Alt 31. Mai 2005, 18:15
Ist es irgendwie möglich, dass der Anwender die Größe eines Fensters ändern kann, wenn Border auf "None" steht? Oder kann man Titelzeile und den dicken Rahmen bei Border = Sizeable ausblenden?
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: Fenster Größe ändern ohne Border

  Alt 31. Mai 2005, 18:22
Ja, es ist möglich, allerdings nicht so einfach. Vielleicht solltetst su etwas über WM_NCxxx-Messages lesen, da kannst du Non-Client Bereich verwalten.
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: Fenster Größe ändern ohne Border

  Alt 31. Mai 2005, 18:27
eigentlich ganz einfach wenn man weiß wie:
Delphi-Quellcode:
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
[...]
procedure TSBMainForm.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  DefaultHandler(Msg);
  with Msg do
        // TOP
    if PtInRect(Rect(0, 0, Width, 4), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTop
        // LEFT
    else if PtInRect(Rect(0, 0, 4, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htLeft
        // BOTTOM
    else if PtInRect(Rect(0, Height - 4, Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottom
        // RIGHT
    else if PtInRect(Rect((Width - 4), 0, Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htRight
        // TOPLEFT
    else if PtInRect(Rect(0, 0, 4, 4), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTopLeft
        // TOPRIGHT
    else if PtInRect(Rect((Width - 4), 0, Width, 4), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTopRight
        //BOTTOMLEFT
    else if PtInRect(Rect(0, (Height - 4), 4, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottomLeft
        // BOTTOMRIGHT
    else if PtInRect(Rect((Width - 4), (Height - 4), Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottomRight

      // Bewegen ohne Titlebar
    //else if RESULT = HTCLIENT then
    // RESULT := htCaption
    else
      inherited;
end;
die 4 steht für den Bereich in welchem das ganze anfassbar ist zum strecken. Das diagonale Strecken ist allerdings hier noch nicht drinn, ist aber einfach zu erweitern..
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
freak24
(Gast)

n/a Beiträge
 
#4

Re: Fenster Größe ändern ohne Border

  Alt 31. Mai 2005, 18:33
Zitat von SirThornberry:
eigentlich ganz einfach wenn man weiß wie:
Jetzt weiß ich wie
Danke

PS:
Zitat von SirThornberry:
die 4 steht für den Bereich in welchem das ganze anfassbar ist zum strecken. Das diagonale Strecken ist allerdings hier noch nicht drinn, ist aber einfach zu erweitern..
Ein bisschen kann ich ja auch noch selber machen...
  Mit Zitat antworten Zitat
Benutzerbild von Coder90
Coder90

Registriert seit: 8. Nov 2004
Ort: Ebhausen, BW
44 Beiträge
 
Delphi 2007 Architect
 
#5

Re: Fenster Größe ändern ohne Border

  Alt 23. Jul 2006, 17:10
Hi
Vielen Dank für den Code!
Wie schon gesagt funktionierte das diagonale Strecken nicht.

Hier der korrigierte Code mit allen 8 Streckrichtungen:
Delphi-Quellcode:
procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;

...

procedure TForm1.WMNCHitTest(var Msg: TWMNCHitTest);
begin
  DefaultHandler(Msg);
  with Msg do
      // TOPLEFT
    if PtInRect(Rect(0, 0, 4, 4), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTopLeft
      // TOPRIGHT
    else if PtInRect(Rect((Width - 4), 0, Width, 4), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTopRight
      // BOTTOMLEFT
    else if PtInRect(Rect(0, (Height - 4), 4, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottomLeft
      // BOTTOMRIGHT
    else if PtInRect(Rect((Width - 4), (Height - 4), Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottomRight
      // TOP
    else if PtInRect(Rect(0, 0, Width, 4), Point((XPos - Left), (YPos - Top))) then
      RESULT := htTop
      // LEFT
    else if PtInRect(Rect(0, 0, 4, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htLeft
      // BOTTOM
    else if PtInRect(Rect(0, Height - 4, Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htBottom
      // RIGHT
    else if PtInRect(Rect((Width - 4), 0, Width, Height), Point((XPos - Left), (YPos - Top))) then
      RESULT := htRight
      // Bewegen ohne Titlebar
    {else if RESULT = HTCLIENT then
      RESULT := htCaption}

    else
      inherited;
end;
Danke nochmal!

MfG, Coder90
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:22 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