AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Form mit bsSingle unter Aero zu groß

Ein Thema von uligerhardt · begonnen am 19. Apr 2011 · letzter Beitrag vom 19. Apr 2011
Antwort Antwort
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#1

Form mit bsSingle unter Aero zu groß

  Alt 19. Apr 2011, 13:05
Hallo miteinander!

Mir ist gerade aufgefallen, dass meine Form mit BorderStyle = bsSingle unter Windows 7/Aero um 10 Pixel zu hoch gezeichnet wird. Wenn ich also Height := 100 setze, erhalte ich auf dem Bildschirm eine Höhe von 110 Pixeln. (Vermutlich ist das das gleiche Problem wie in http://www.delphipraxis.net/114442-v...t-angeben.html.) Mit BorderStyle = bsSizeable habe ich den Effekt nicht, und unter Windows Classic oder Aero Basic auch nicht.

Blöd ist das u.a. deshalb, wenn ich einer bsSizeable-Form die gleiche Größe wie der bsSingle-Form verpassen will. Wenn ich einfach Form2.Height := Form1.Height setze, wird die zweite Form 10 Pixel kleiner als die erste.

Hat jemand eine Idee, wie ich die "Spezialbehandlung" ausschalten kann, oder wenigstens einen Workaround?

EDIT: Ich hab mittlerweile das und das gefunden.

EDIT2:
Delphi-Quellcode:
const
  DWMWA_EXTENDED_FRAME_BOUNDS = 9;

function DwmGetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HResult; stdcall;
  external 'dwmapi.dll';


 var
  r: TRect;
begin
  DwmGetWindowAttribute(Handle, DWMWA_EXTENDED_FRAME_BOUNDS, @r, SizeOf(r));
liefert tatsächlich ein Rechteck, das in jeder Richtung um 5 Pixel über BoundsRect hinausgeht.
Uli Gerhardt

Geändert von uligerhardt (19. Apr 2011 um 13:57 Uhr)
  Mit Zitat antworten Zitat
-187-

Registriert seit: 24. Sep 2005
483 Beiträge
 
Delphi 2010 Architect
 
#2

AW: Form mit bsSingle unter Aero zu groß

  Alt 19. Apr 2011, 13:25
Setzt du die Attribute erst zur Laufzeit ?
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Form mit bsSingle unter Aero zu groß

  Alt 19. Apr 2011, 13:39
Setzt du die Attribute erst zur Laufzeit ?
Die von der ersten Form (die mit der falschen Größe gezeichnet wird) nicht. Die Größe der zweiten Form wird hier gesetzt:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Form2: TForm2;
begin
  Form2 := TForm2.Create(Self);
  try
    Form2.Height := Height;
    Form2.Width := Width;
    Form2.Top := Top;
    Form2.Left := Left + 20;
    Form2.ShowModal;
  finally
    Form2.Free;
  end;
end;
Der Rest kommt ebenfalls aus der DFM.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.746 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Form mit bsSingle unter Aero zu groß

  Alt 19. Apr 2011, 15:07
Hier mal mein Testprojekt:
  1. Neues VCL-Projekt anlegen.
  2. Im OI Form1.Height auf 100 und Form1.BorderStyle auf bsSingle setzen.
  3. Neues Formular hinzufügen (Form2).
  4. Button auf Form1 mit folgendem OnClick-Handler:
    Delphi-Quellcode:
    const
      DWMWA_EXTENDED_FRAME_BOUNDS = 9;

    function DwmGetWindowAttribute(hwnd: HWND; dwAttribute: DWORD; pvAttribute: Pointer; cbAttribute: DWORD): HResult; stdcall;
      external 'dwmapi.dll';

    procedure TForm1.Button1Click(Sender: TObject);
    var
      Form2: TForm2;
      r: TRect;
    begin
      //DwmGetWindowAttribute(Handle, DWMWA_EXTENDED_FRAME_BOUNDS, @r, SizeOf(r));
      r := BoundsRect;
      OffsetRect(r, 20, 0);

      Form2 := TForm2.Create(Self);
      try
        Form2.BoundsRect := r;
        Form2.ShowModal;
      finally
        Form2.Free;
      end;
    end;
Das liefert folgendes:big.png
Kommentiert man die Zeile r := BoundsRect; aus und aktiviert dafür den Dwm-Aufruf, so erhält man:dwm.png

Wäre nett, wenn das mal jemand unter Delphi XE ausprobieren könnte - vielleicht ist das Problem da ja gar nicht mehr vorhanden.
Uli Gerhardt
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:51 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