Hi Leute
gibt es eine Möglichkeit die Titelleiste des Gui immer in gleicher Größe anzeigen zu lassen , zb win7 und win10 oder wenn man in windows das design ändert.
thx
Titelleiste systemunabhängig immer gleiche Größe Topic is solved
Moderator: jNizM
Re: Titelleiste systemunabhängig immer gleiche Größe
Moin,
ich glaube, es gibt eine Systemeinstellung für die Höhe der Titelleiste, aber die würde sich auf alle Fenster auswirken. Welchem Zweck soll das dienen?
ich glaube, es gibt eine Systemeinstellung für die Höhe der Titelleiste, aber die würde sich auf alle Fenster auswirken. Welchem Zweck soll das dienen?
Re: Titelleiste systemunabhängig immer gleiche Größe
Ja stimmt es gibt eine Systemeinstellung in windows für die Höhe der Titelleiste, aber wie du sagst würde sich das auf alle Fenster auswirken daher suche ich das nicht.
Der Zweck ist das coords immer gleich bleiben.
Meine jetztige Lösung ist mit -caption die Titelleiste zu entfernen und via button ein x zum schliessen , dachte es gibt vll wie in c# "CaptionHeight"...
Der Zweck ist das coords immer gleich bleiben.
Meine jetztige Lösung ist mit -caption die Titelleiste zu entfernen und via button ein x zum schliessen , dachte es gibt vll wie in c# "CaptionHeight"...
Re: Titelleiste systemunabhängig immer gleiche Größe
Wofür sollen welche "coords" immer gleich bleiben?
Re: Titelleiste systemunabhängig immer gleiche Größe
Im Gui Fenster ist ein ActiveX Fenster das ich mit ControlClick,xy anklicke , leider stimmen bei Wechsel von win7 und win10 aufgrund der Titelleiste die coords nicht mehr.
Re: Titelleiste systemunabhängig immer gleiche Größe
Das trifft mitunter selbst bei wechsel der darstellungsform innerhalb des selben OS zu. Hatte vor gefühlt 100 jahren damit zu kämpfen, als im office der wechsel von XP auf win7 anstand, und deshalb der komplette semi-automatisierte billing process re-konfiguriert werden musste.tm6464 wrote:Im Gui Fenster ist ein ActiveX Fenster das ich mit ControlClick,xy anklicke , leider stimmen bei Wechsel von win7 und win10 aufgrund der Titelleiste die coords nicht mehr.
Re: Titelleiste systemunabhängig immer gleiche Größe
Moin,
Du könntest auf Deinem Entwicklungssystem die Distanzen (Deltas) zwischen den oberen linken Ecken des Fensters und des Clientbereichs bestimmen:Wenn dann auf dem Zielsystem abweichende Werte ermittelt werden, kannst Du die Position für ControlClick entsprechend anpassen.
Du könntest auf Deinem Entwicklungssystem die Distanzen (Deltas) zwischen den oberen linken Ecken des Fensters und des Clientbereichs bestimmen:
Code: Select all
#NoEnv
Gui, +hwndHGUI -DPIScale
Gui, Show, w600 h400, Test
WinGetPos, WX, WY, , , ahk_id %HGUI%
WinGetClientPos(HGUI, CX, CY)
DeltaX := CX - WX
DeltaY := CY - WY
MsgBox, DeltaX: %DeltaX% - DeltaY: %DeltaY%
Return
GuiClose:
ExitApp
WinGetClientPos(HWND, ByRef X := "", ByRef Y := "", ByRef W := "", ByRef H := "") {
VarSetCapacity(RECT, 16, 0)
If DllCall("GetClientRect", "Ptr", HWND, "Ptr", &RECT) && DllCall("ClientToScreen", "Ptr", HWND, "Ptr", &RECT) {
X := NumGet(RECT, 0, "Int")
Y := NumGet(RECT, 4, "Int")
W := X + NumGet(RECT, 8, "Int")
H := Y + NumGet(RECT, 12, "Int")
Return True
}
Return False
}
Re: Titelleiste systemunabhängig immer gleiche Größe
Danke für die Lösung habs getestet
Ganz erlich, ich finde mit -caption einfach die Titelleiste zu entfernen weit aus besser, da stimmen die coords immer , bisher
Ganz erlich, ich finde mit -caption einfach die Titelleiste zu entfernen weit aus besser, da stimmen die coords immer , bisher
Re: Titelleiste systemunabhängig immer gleiche Größe
Ganz ehrlich, die Titelleiste komplett zu entfernen ist für mich die absolute Notlösung, wenn man keine zusätzlichen Gründe dafür hat.
Re: Titelleiste systemunabhängig immer gleiche Größe
Hast natürlich recht ist eine Notlösung.
Ohne Titelleiste kann man zb das Fenster nicht mehr verschieben, habe dafür bisher noch keine gute Lösung...
Ohne Titelleiste kann man zb das Fenster nicht mehr verschieben, habe dafür bisher noch keine gute Lösung...
Re: Titelleiste systemunabhängig immer gleiche Größe Topic is solved
Dafür gibt es schon lange eine gute Lösung, die wohl ursprünglich von SKAN stammt.
Beispiel:
Alternativ mit mehrteiliger 'Titelleiste' (macht die Klickunterscheidung Titel/CloseButton einfacher):
Beispiel:
Code: Select all
#NoEnv
; Der 'extended style' 0x02000000 (WS_EX_COMPOSITED) bewirkt, dass überlappende Controls in der Reihenfolge unten->oben
; gezeichnet werden.
Gui, -Caption -DPIScale +Border +E0x02000000
Gui, Margin, 0, 0
; Weißer Hintergrund für die simulierte Titelleiste (0x0006 = SS_WHITERECT).
; Der Stil +0x0100 (SS_NOTIFY) bewirkt, dass Mausklicks dem Control auch ohne g-Label zugeordnet werden.
Gui, Add, Text, w400 h20 vTitelleiste +0x0006 +0x0100
; Text für die simulierte Titelleite.
; Der Stil 0x0200 (SS_CENTERIMAGE) bewirkt, dass der Text vertikal zentriert wird.
Gui, Add, Text, xp yp wp hp +0x0200 +BackgroundTrans +hwndHCTL, % " Simulierte Titelleiste"
; Der Text muss 'nach oben' gebracht werden, damit er sichtbar ist.
DllCall("BringWindowToTop", "Ptr", HCTL)
; Close-Button für die simulierte Titelleiste, geht auch 'viel schöner'.
Gui, Add, Text, x380 y0 w20 h20 gGuiClose cRed Center +0x0200 +0x0100 +hwndHCTL +BackGroundTrans, X
; Der 'Button' muss 'nach oben' gebracht werden, damit er sichtbar ist.
DllCall("BringWindowToTop", "Ptr", HCTL)
; Und noch ein Control.
Gui, Add, Edit, x10 y+10 w380 h100, Edit Control als Beispiel!
; Für den unteren Freiraum (10 Pixel).
Gui, Add, Text, x0 y+0 w400 h10
Gui, Show, , TestGui
OnMessage(0x0201, "WM_LBUTTONDOWN")
Return
GuiClose:
GuiEscape:
ExitApp
WM_LBUTTONDOWN() {
; Bei einem Linksklick auf die simulierte Titelleiste wird die Nachricht NC_LBUTTONDOWN (0xA1) mit wParam HTCAPTION (2)
; und lParam 0 (relative Koordinaten 0/0) an das "last-found window" (in diesem Fall das aktive GUI-Fenster) gesendet.
; Das geht dann davon aus, dass in eine 'echte' Titelleiste geklickt wurde, und verhält sich entsprechend.
If (A_GuiControl = "Titelleiste")
PostMessage, 0xA1, 2, 0
}
Code: Select all
#NoEnv
HWhite := CreateDIB(0x3399FF)
HClose := LoadPicture("Shell32.dll", "GDI+ Icon132 h16 w16", ImageType)
GuiWidth := 400
Gui, -Caption -DPIScale +Border
Gui, Margin, 10, 10
; Simulierte Titelleiste, Gesamtbreite 400 Pixel (GuiWidth) ----------------------------------------------------------------------
; Weißes Textfeld für den linken Freiraum (10 Pixel), nicht klickbar.
Gui, Add, Pic, x0 y0 w10 h20, HBITMAP:*%HWhite%
; Weißer Hintergrund für den Titelbereich.
; Der Stil +0x0100 (SS_NOTIFY) bewirkt, dass Mausklicks dem Control auch ohne g-Label zugeordnet werden.
; Gui, Add, Text, x+0 yp w370 h20 vTitelBereich +0x0006 +0x0100
Gui, Add, Pic, x+0 yp w370 h20 vTitelBereich +0x0100, HBITMAP:*%HWhite%
; Fenstertitel
; Der Stil 0x0200 (SS_CENTERIMAGE) bewirkt, dass der Text vertikal zentriert wird.
Gui, Add, Text, xp yp wp hp cWhite +0x0200 +BackgroundTrans vTitel, Simulierte Titelleiste
; Weißer Hintergrund für den Close Button.
Gui, Add, Pic, x380 yp w20 h20 gGuiClose, HBITMAP:%HWhite%
; Icon für den Close Button
Gui, Add, Pic, xp+2 yp+2 wp-4 hp-4 +BackgroundTrans, HICON:%HClose%
; Controlbereich -----------------------------------------------------------------------------------------------------------------
Gui, Add, Edit, xm y30 w380 h100, Edit Control als Beispiel!
Gui, Show, w%GuiWidth%, TestGui
OnMessage(0x0201, "WM_LBUTTONDOWN")
Return
GuiClose:
GuiEscape:
ExitApp
WM_LBUTTONDOWN() {
; Bei einem Linksklick auf die simulierte Titelleiste wird die Nachricht NC_LBUTTONDOWN (0xA1) mit wParam HTCAPTION (2)
; und lParam 0 (relative Koordinaten 0/0) an das "last-found window" (in diesem Fall das aktive GUI-Fenster) gesendet.
; Das geht dann davon aus, dass in eine 'echte' Titelleiste geklickt wurde, und verhält sich entsprechend.
If (A_GuiControl = "TitelBereich")
PostMessage, 0xA1, 2, 0
}
; ==================================================================================================================================
; Modified version of a function by SKAN, 01-Apr-2014, autohotkey.com/boards/viewtopic.php?t=3203
; Creates an uni-colored bitmap of 1 * 1 pixels.
; ==================================================================================================================================
CreateDIB(Color) {
VarSetCapacity(BMBITS, 4, 0)
, Numput(Color, BMBITS, "UInt")
, HBM := DllCall("CreateBitmap", "Int", 1, "Int", 1, "UInt", 1, "UInt", 24, "Ptr", 0, "UPtr")
, HBM := DllCall("CopyImage", "Ptr", HBM, "UInt", 0, "Int", 0, "Int", 0, "UInt", 0x2008, "UPtr")
, DllCall("SetBitmapBits", "Ptr", HBM, "UInt", 4, "Ptr", &BMBITS)
Return HBM
}
Re: Titelleiste systemunabhängig immer gleiche Größe
Danke is echt super gelöst
Who is online
Users browsing this forum: No registered users and 46 guests