Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Form mit bsToolWindow-BorderStyle und Height := 0 (https://www.delphipraxis.net/31569-form-mit-bstoolwindow-borderstyle-und-height-%3D-0-a.html)

Nuclear-Ping 11. Okt 2004 12:18


Form mit bsToolWindow-BorderStyle und Height := 0
 
Hallo,

ich habe eine Form, die als BorderStyle bsToolWindow hat. Wenn ich diese nun auf Height := 0 setze, bleibt irgendwie ein kleiner Rest von der ClientArea der Form sichtbar, es soll allerdings nur die Titelleiste sichtbar sein, wie es z.B. in PaintShopPro 7 der Fall ist.

Bild (von mir):
http://www.open-ware.de/tmp/bsToolWin_H0.jpg

Bild (von PSP7):
http://www.open-ware.de/tmp/bsToolWin_PSP7.jpg

Lässt sich das vermeiden bzw. so einrichten wie bei PSP7 und wenn ja, wie? :gruebel:

Grüße,
Mario

toms 11. Okt 2004 12:30

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hi,

Ist etwas seltsam. Auch das abfangen von WM_GETMINMAXINFO und das setzen von
ptMinTrackSize.Y brachte keinen Erfolg.

Stevie 11. Okt 2004 15:13

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
:wall: Uff, ich hab's auch nicht hinbekommen! :pale:
Scheinbar ist die Höhe der normalen Titelleiste ausschlaggebend für die Minimalgröße des Fensters. :gruebel:
Es gibt zwar in der Registry einige Einträge (HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics), z.B. SmCaptionHeight,
aber irgendwie juckt das überhaupt nicht, selbst, wenn ich mit CreateWindowEx ein Fenster mit dem Parameter WS_EX_TOOLWINDOW erstelle!
Mit GetSystemMetrics(SM_CYSMCAPTION) bekomme ich zwar bei mir 16 (Pixel) heraus, aber das Fenster ist trotzdem minimal 27 Pixel hoch! :wiejetzt:

Nuclear-Ping 11. Okt 2004 15:40

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Mmmmh ... danke für eure Mühen! :) :dp:

Das is ja beschränkend, um's mal gesittet auszudrücken. Würde mich mal interessieren, wie das die Jungs mit PSP dann hingekriegt haben, weil so kann ich das doch nicht den Leuten geben ... :wall:

Stevie 11. Okt 2004 15:46

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Muss es denn bsToolWindow sein? Oder reicht nicht auch folgendes?
Delphi-Quellcode:
BorderStyle := bsDialog;
ClientHeight := 0;

Nuclear-Ping 11. Okt 2004 16:01

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Yup, muss bsToolWindow sein. Bei dem einen Fenster zwar nicht unbedingt, aber ich hab noch 2 andere davon in meiner App und da sind auch eigene Caption-Buttons (ähnlich wie bei dem PSP7-Bild) mit drin, was auf bsDialog in Kombination mit dem Windows XP Style schrecklich ausschaut ... :?

Stevie 11. Okt 2004 16:03

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hast du Spy++ oder WinSight? Dann guck doch mal, was das für'n ToolWindow is bei PSP7 und ob da bestimmte Messages hingeschickt werden oder sowas...

Nuclear-Ping 11. Okt 2004 16:32

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
OK, danke für den Tip, werd ich gleich mal tun.

Nuclear-Ping 11. Okt 2004 20:14

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hab grad mal mit dem Winspector geschaut (http://www.windows-spy.com/) und der meint, dass es sich dabei um eine Fenster-Klasse #32770 handelt.

Bild (Overview markiert):
http://www.open-ware.de/tmp/PSP_OverviewWin.jpg

:gruebel:

Stevie 12. Okt 2004 06:23

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hmm, #32770 ist der Klassename für eine DialogBox... (Quelle)

Nuclear-Ping 12. Okt 2004 09:44

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Yup, I know. tHx für den Link, auf der Seite war ich vorher noch nicht. Hab das grad mal bisschen überflogen, die Frage die sich dabei jetzt aber stellt ist: Wie setz ich das in Delphi um und krieg da auch die Kompos drauf, die ich haben will? Bisher war mir "nonVCL" ein Buch mit sieben Siegeln und hab's vermieden, wo ich konnte. ;)

Grüße,
Mario

himitsu 12. Okt 2004 09:55

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Notfalls könntest du ja noch mir Regions den unteren Teil des Fensters abschneiden.

z.B.
Delphi-Quellcode:
Procedure TForm1.FormCreate(Sender: TObject);
  Begin
    SetWindowRgn(Handle, CreateRectRgn(0, 0, Width, 22), True);
  End;

Stevie 12. Okt 2004 09:58

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hmm, scheint aber auch nicht zu funktionieren, wenn man diese Klasse in CreateWindowsEx benutzt...

LUUUCKIEEEE!!!

Stevie 12. Okt 2004 10:01

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Zitat:

Zitat von himitsu
Notfalls könntest du ja noch mir Regions den unteren Teil des Fensters abschneiden.

Baaahh, wie hässlich!!! :mrgreen:

Nuclear-Ping 12. Okt 2004 10:16

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hehe, yo, mit SetWindowRgn (Handle, CreateRectRgn (0, 0, Width, GetSystemMetrics (SM_CYCAPTION)), True) schneidet er's genau bis unter die Titelleiste ab, aber es sieht dann auch entsprechend abgeschnitten aus. :zwinker:

Bild (mit SetWindowRgn):
http://www.open-ware.de/tmp/bsToolWin_Cut.jpg

toms 12. Okt 2004 12:16

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
So, habe damit ein wenig herumgespielt un habe ein Lösung entdeckt.
Deklariere einfach einen WM_WINDOWPOSCHANGING handler und mache dort nichts.
Dann kannst du eine beliebige Höhe setzen.
Frag mich bitte nicht warum das so funktioniert....

Delphi-Quellcode:
  private
    { Private declarations }
    procedure PosChange(var Msg: TWmWindowPosChanging);
  message WM_WINDOWPOSCHANGING;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   Height := GetSystemMetrics(SM_CYCAPTION) // + - dy ???;
end;

procedure TForm1.PosChange (var Msg: TWmWindowPosChanging);
begin

end;

Stevie 12. Okt 2004 12:29

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Zitat:

Zitat von toms
So, habe damit ein wenig herumgespielt un habe ein Lösung entdeckt.
Deklariere einfach einen WM_WINDOWPOSCHANGING handler und mache dort nichts.
Dann kannst du eine beliebige Höhe setzen.
Frag mich bitte nicht warum das so funktioniert....

SAUBER!!! :thumb:
Ich kann dir sagen, warum: Weil dann nicht überprüft wird, ob das Fenster nicht die Mindestgröße unterschreitet.

P.S: Besser wär so:
Delphi-Quellcode:
procedure TForm1.WMWindowPosChanging(var Message: TWMWindowPosChanging);
begin
  if BorderStyle <> bsToolWindow then
    inherited;
end;

toms 12. Okt 2004 12:35

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Zitat:

Height := GetSystemMetrics(SM_CYCAPTION) // + - dy ???;
Noch gibt's noch ein kleines Problem. Wenn die Höhe der Form gleich
GetSystemMetrics(SM_CYCAPTION) gesetzt wird, sieht man noch einen Teil der Form (etwa 2 Pixel)
Wenn ich den klassischen Style von Windows aktivert habe, dann stimmts glaub, wenn ich mich recht erinnere.

Stevie 12. Okt 2004 12:37

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Delphi-Quellcode:
ClientHeight := 0;
wär doch richtig, oder?

toms 12. Okt 2004 12:42

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Zitat:

ClientHeight := 0;
Ja klar! Hmm, funktioniert aber nur im XP Style aber im klassischen Style erscheint dann die Titelbar einige Pixel zu klein,
resp. abgeschnitten.

Stevie 12. Okt 2004 12:47

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Delphi-Quellcode:
ClientHeight := 0;
BorderStyle := bsToolWindow;
<>
Delphi-Quellcode:
BorderStyle := bsToolWindow;
ClientHeight := 0;
:mrgreen:

Nuclear-Ping 12. Okt 2004 12:53

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Jaaaaa! Es leeeebt! ES LEEEEBT! ... ääähh funktioniert! :party:

1.000 Dank euch allen, ich steh zutiefst in eurer Schuld! :cheers:

:corky: :dp:

Grüße,
Mario

Stevie 12. Okt 2004 13:09

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Zitat:

Zitat von Nuclear-Ping
1.000 Dank euch allen, ich steh zutiefst in eurer Schuld! :cheers:

Eine Erwähnung dieses tollen Forums in den Credits deiner Anwendung würde schon reichen! :mrgreen: :zwinker: :cheers: :drunken:

Nuclear-Ping 12. Okt 2004 15:27

Re: Form mit bsToolWindow-BorderStyle und Height := 0
 
Hehe, yo, gute Idee. :thumb: Kommt mit in die Credits!


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz