Deutsch
Wünsche und Anregungen

Idee: Negative Größenangabe für Window und CreateWindow/Dlg

 
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
window 100,100 - 100,100
rectangle 0,0 - 99,99
waitInput
end

erzeugt logischerweise:



Wobei wünschenswert wäre, wenn es nun ein "xprofanes" Gegenmittel gäbe. Also im Prinzip sowas  [...]  hier.

5 kB
Hochgeladen:04.12.2008
Ladeanzahl196
Herunterladen
 
04.12.2008  
 




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.
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
30.05.2018  
 




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 X3
Intel 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.
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.05.2018  
 




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.
 
31.05.2018  
 




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...
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.05.2018  
 



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.
 
31.05.2018  
 




Jörg
Sellmeyer
Das bliebe dann nachzumessen...
 
XProfan X3
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
31.05.2018  
 




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  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

6.496 Betrachtungen

Unbenanntvor 0 min.
Stringray05.01.2022
Rolf Koch15.01.2020
Thomas Zielinski06.09.2019
Pedro Miguel17.05.2019
Mehr...

Themeninformationen

Dieses Thema hat 3 Teilnehmer:

Jörg Sellmeyer (6x)
iF (3x)
RGH (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie