![]() |
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): ![]() Bild (von PSP7): ![]() Lässt sich das vermeiden bzw. so einrichten wie bei PSP7 und wenn ja, wie? :gruebel: Grüße, Mario |
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. |
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: |
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: |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Muss es denn bsToolWindow sein? Oder reicht nicht auch folgendes?
Delphi-Quellcode:
BorderStyle := bsDialog;
ClientHeight := 0; |
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 ... :?
|
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...
|
Re: Form mit bsToolWindow-BorderStyle und Height := 0
OK, danke für den Tip, werd ich gleich mal tun.
|
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Hab grad mal mit dem Winspector geschaut (
![]() Bild (Overview markiert): ![]() :gruebel: |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Hmm, #32770 ist der Klassename für eine DialogBox... (
![]() |
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 |
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; |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Hmm, scheint aber auch nicht zu funktionieren, wenn man diese Klasse in CreateWindowsEx benutzt...
LUUUCKIEEEE!!! |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Zitat:
|
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): ![]() |
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; |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Zitat:
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; |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Zitat:
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. |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Delphi-Quellcode:
wär doch richtig, oder?
ClientHeight := 0;
|
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Zitat:
resp. abgeschnitten. |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Delphi-Quellcode:
<>
ClientHeight := 0;
BorderStyle := bsToolWindow;
Delphi-Quellcode:
:mrgreen:
BorderStyle := bsToolWindow;
ClientHeight := 0; |
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 |
Re: Form mit bsToolWindow-BorderStyle und Height := 0
Zitat:
|
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