| |
|
|
| Idee: Gibt man bei Window bei den Parametern für die Größe, einen negativen Wert an, dann sind die inneren Ausmasse gemeint.
SetWindowPos ebenfalls mit diesem "Feature" ausstatten wäre imho auch sinnvoll.
Das Beispiel hier verdeutlicht das Problem: KompilierenMarkierenSeparieren erzeugt logischerweise:
Wobei wünschenswert wäre, wenn es nun ein "xprofanes" Gegenmittel gäbe. Also im Prinzip sowas [...] hier. |
|
|
| |
|
|
|
Jörg Sellmeyer | Keine Ahnung, warum das hier auf erledigt steht. Ich finde die Idee super. Vielleicht nicht mit negativen Zahlen, sondern mit einem zusätzlichen Parameter. Oder Meinetwegen auch mit Set("Client",1). danach werden dann alle Fenster, so erzeugt, dass die Größenangabe als Clientgröße gewertet wird. |
|
|
| |
|
|
|
RGH | ... und schon gibt es Ideen für ein mögliches XProfan X5! ;)
Da müsste ich mal schauen, ob die Wondows-API so etwas hergibt.
(Aber erst mache ich mal die USB-Sticks für die Abonnenten fertig und wende mich dann mal wieder den FreeProfan-Versionen zu ...)
Gruß Roland |
|
|
| XProfan X3Intel Duo E8400 3,0 GHz / 4 GB RAM / 1000 GB HDD - ATI Radeon HD 4770 512 MB - Windows 7 Home Premium 32Bit - XProfan X4 | 31.05.2018 ▲ |
|
|
|
|
Jörg Sellmeyer | Mit AdjustWindowRect erreicht man da schon Einiges. Leider wird das Menü zur Clientarea gerechnet und ich such grad, wo man die Menühöhe auslesen kann. |
|
|
| |
|
|
|
Jörg Sellmeyer | So kann man schonmal die Standardsachen erschlagen:
$H Windows.ph
$H structs.ph
'RECT = Left&,Top&,Right&,Bottom&;
' WS_BORDER = $800000;
' WS_DLGFRAME = $400000;
' WS_VSCROLL = $200000;
' WS_HSCROLL = $100000;
' WS_SYSMENU = $80000;
' WS_THICKFRAME = $40000;
' WS_DLGFRAME = $400000;
' WS_EX_CLIENTEDGE = $200;
' WS_EX_STATICEDGE = $20000;
Struct AdjustWindowRect = ~Rect
SubProc Create.XWindow
'Parameters Handle hParent, String sClass, sText ,Int iLeft, iTop, iWidth, iHeight,fMenu
traceoff
If %pcount = 4
Parameters Handle hParent, String sText ,Int iWidth, iHeight
Declare Int iLeft, iTop
Var Int fCenter = 1
Else
Parameters Handle hParent, String sClass, sText ,Int iLeft, iTop, iWidth, iHeight
EndIf
Declare Mem WindowSize,Int fMenu
Dim WindowSize,AdjustWindowRect
With WindowSize
.Left& = iLeft
.Top& = iTop
.Right& = iWidth + iLeft
.Bottom& = iHeight + iTop
EndWith
With WindowSize
If hParent = 0
fMenu = Not((%windowstyle & %10000))
~AdjustWindowRect(WindowSize,~WS_CAPTION | ~WS_THICKFRAME,fMenu)
'fMenu gibt an, ob ein fenstermenü vorhanden ist
If SizeOf(fCenter) > 0
Window (.Right& - .Left&),(.Bottom& - .Top&)
Else
Window .Left&,.Top& - (.Right& - .Left&),(.Bottom& - .Top&)
EndIf
SetText %hwnd,sText
Return %hwnd
ElseIf Upper$(sClass) = "DIALOG"
~AdjustWindowRect(WindowSize,~WS_CAPTION | ~WS_DLGFRAME,fMenu)
Return Create("Dialog",hParent,sText,.Left&,.Top&,(.Right& - .Left&),(.Bottom& - .Top&))
ElseIf Upper$(sClass) = "WINDOW"
~AdjustWindowRect(WindowSize,~WS_CAPTION | ~WS_THICKFRAME,fMenu)
Return Create("Window",hParent,sText,.Left&,.Top&,(.Right& - .Left&),(.Bottom& - .Top&))
ElseIf Upper$(sClass) = "CHILDWINDOW"
~AdjustWindowRect(WindowSize,~WS_CAPTION | ~WS_THICKFRAME,fMenu)
Return Create("ChildWindow",hParent,sText,.Left&,.Top&,(.Right& - .Left&),(.Bottom& - .Top&))
EndIf
EndWith
EndProc
If &GetTickCount Mod 2
WindowStyle %11111
Var Handle hwnd = Create("XWindow",0,"","Hauptfenster",100,100,800,600)
Else
WindowStyle %11111
Var Handle hwnd = Create("XWindow",0,"Hauptfenster zentriert",800,600)
EndIf
Print bin$(%windowstyle & ~WS_CAPTION)
Var Handle hDlg1 = Create("XWindow",%hwnd,"Dialog","Dialog",%winleft + 250,%wintop + 150,400,300)
Var Handle hDlg2 = Create("XWindow",%hwnd,"Window","Fenster",%winleft + 350,%wintop + 300,330,240)
Var Handle hDlg3 = Create("XWindow",%hwnd,"ChildWindow","ChildWindow",50,350,300,200)
Print "Hauptfenster:",%winleft,%wintop,Width(hwnd),Height(hwnd)
Print "Dialog",Width(hDlg1),Height(hDlg1)
Print "Window",Width(hDlg2),Height(hDlg2)
Print "ChildWindow",Width(hDlg3),Height(hDlg3)
While 1
WaitInput
Wend
Mühsamer wirds, die ganzen möglichen Stilarten zu berücksichtigen. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 31.05.2018 ▲ |
|
|
|
|
| Würde man einfach die inneren Maße von den Äußeren abziehen, dann müsste man die ganzen Stile oder Randdicken nicht mehr auswerten da die Differenzen das Notwendige schon hergeben. |
|
|
| |
|
|
|
Jörg Sellmeyer | Ja - aber vor der Erstellung des Fensters, sind die inneren Maße ja noch nicht bekannt. Und die werden dann eben durch AdjustWindowRect mittels der Stile gesetzt. Man kann natürlich ganz brachial erst das jeweilige Fenster erstellen und dann mit SetWindowPos korrigieren. Aber schön ist anders... |
|
|
| |
|
|
|
| Schon klar,
es bleibt die Abwägung ob "schneller" und "einfacher", ein Control erst unsichtbar zu erzeugen und dann an die richtige Stelle zu bringen statt viele Werte (möglicherweise aus der Registry) zu ermitteln im Unwissen ob auf allen OS das so auch gleichermaßen ausreichend ist.
Meiner Vermutung nach ist ein simples Window- und Clientrect einfach "effizienter" und eine doch recht analoge Messung. |
|
|
| |
|
|
|
Jörg Sellmeyer | Das bliebe dann nachzumessen... |
|
|
| |
|
|
|
Jörg Sellmeyer | Ach ja: um das Auslesen der Menühöhe kommst du nicht herum, da das Menü ja zur Client-Area zählt. |
|
|
| Windows XP SP2 XProfan X4... und hier mal was ganz anderes als Profan ... | 07.06.2018 ▲ |
|
|
|