Eigene Kennungen ausblenden, Win95-Menüs, verschiebbares Hauptfenster bei offenem Dialog u. a.
Windows-Build / windows-exe (push) Canceled after 53m28s
Windows-Build / windows-exe (push) Canceled after 53m28s
Neu: - Eigene Kennungen (eigene Filiale) ausblenden: nicht angezeigt, nicht mitgerechnet, nicht exportiert; per Rechtsklick, Händler-Menü oder Import-Bericht; Händler-Zuordnung hat Vorrang - Menüs im Win95-Stil: wechseln beim Überfahren der Menüleiste, Tastatur, Kontextmenü gleich - Dialoge sperren nur den Inhalt: Hauptfenster bleibt verschiebbar/maximierbar; Dialoge haben eigenen Taskleisten-Eintrag; Klick auf gesperrten Inhalt holt den Dialog nach vorn (blinkt) - Trennlinie zwischen Händler- und Positionsliste sichtbar und ziehbar, Position wird gemerkt - Strg+Rücktaste / Strg+Entf löschen ganze Wörter in allen Eingabefeldern Behoben: - Gedrückte Knöpfe zeigten keine Beschriftung (activeForeground gehört in Tk zur Klasse Background) - Tipp des Tages: Text lief aus dem sichtbaren Bereich - Größenänderung: breiterer Griffbereich mit Ecken, Zeiger wird zuverlässig zurückgesetzt, flüssiger; Verschieben über Windows selbst (inkl. Andocken), Minimieren über Windows - Zeichen, die MS Sans Serif nicht hat (…, ▸, →, •), durch Win95-übliche ersetzt - Menü/Tooltip/Dialog: Größe+Position zusammen setzen (Tk ignoriert sonst die Position) - Suche reagiert erst nach kurzer Tipp-Pause (flüssigeres Tippen) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
69c2a108a9
commit
807a38622c
15 files changed
+1217
-187
No files matched your search
@@ -50,6 +50,20 @@ def user32():
|
||||
u.GetTopWindow.restype = wintypes.HWND
|
||||
u.BringWindowToTop.argtypes = [wintypes.HWND]
|
||||
u.BringWindowToTop.restype = wintypes.BOOL
|
||||
u.GetWindowLongW.argtypes = [wintypes.HWND, ctypes.c_int]
|
||||
u.GetWindowLongW.restype = ctypes.c_long
|
||||
u.SetWindowLongW.argtypes = [wintypes.HWND, ctypes.c_int, ctypes.c_long]
|
||||
u.SetWindowLongW.restype = ctypes.c_long
|
||||
u.ReleaseCapture.argtypes = []
|
||||
u.ReleaseCapture.restype = wintypes.BOOL
|
||||
u.SendMessageW.argtypes = [wintypes.HWND, wintypes.UINT, wintypes.WPARAM, wintypes.LPARAM]
|
||||
u.SendMessageW.restype = wintypes.LPARAM
|
||||
u.ShowWindow.argtypes = [wintypes.HWND, ctypes.c_int]
|
||||
u.ShowWindow.restype = wintypes.BOOL
|
||||
u.IsIconic.argtypes = [wintypes.HWND]
|
||||
u.IsIconic.restype = wintypes.BOOL
|
||||
u.FlashWindow.argtypes = [wintypes.HWND, wintypes.BOOL]
|
||||
u.FlashWindow.restype = wintypes.BOOL
|
||||
_u32 = u
|
||||
return _u32
|
||||
|
||||
@@ -82,6 +96,62 @@ def nach_vorn(fenster: tk.Misc) -> None:
|
||||
user32().BringWindowToTop(h)
|
||||
|
||||
|
||||
GWL_EXSTYLE, WS_EX_APPWINDOW, WS_EX_TOOLWINDOW = -20, 0x00040000, 0x00000080
|
||||
|
||||
|
||||
def hat_taskleisteneintrag(fenster: tk.Misc) -> bool:
|
||||
h = hwnd(fenster)
|
||||
if not h:
|
||||
return False
|
||||
stil = user32().GetWindowLongW(h, GWL_EXSTYLE)
|
||||
return bool(stil & WS_EX_APPWINDOW) and not (stil & WS_EX_TOOLWINDOW)
|
||||
|
||||
|
||||
def taskleisteneintrag(fenster: tk.Misc) -> bool:
|
||||
"""Eigener Eintrag in Taskleiste/Alt+Tab (rahmenlose Tk-Fenster haben sonst keinen).
|
||||
Wirkt erst nach erneutem Einblenden – gibt True zurück, wenn das nötig ist."""
|
||||
h = hwnd(fenster)
|
||||
if not h:
|
||||
return False
|
||||
stil = user32().GetWindowLongW(h, GWL_EXSTYLE)
|
||||
neu = (stil & ~WS_EX_TOOLWINDOW) | WS_EX_APPWINDOW
|
||||
if neu != stil:
|
||||
user32().SetWindowLongW(h, GWL_EXSTYLE, neu)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def nativ_verschieben(fenster: tk.Misc) -> bool:
|
||||
"""Windows übernimmt das Ziehen (flüssig, mit Andocken am Bildschirmrand). True bei Erfolg."""
|
||||
h = hwnd(fenster)
|
||||
if not h:
|
||||
return False
|
||||
user32().ReleaseCapture()
|
||||
user32().SendMessageW(h, 0x00A1, 2, 0) # WM_NCLBUTTONDOWN, HTCAPTION
|
||||
return True
|
||||
|
||||
|
||||
def minimieren(fenster: tk.Misc) -> bool:
|
||||
"""Direkt über Windows minimieren – Tk verweigert das bei rahmenlosen Fenstern. Eigene Popups
|
||||
(Dialoge) werden dabei von Windows mit ausgeblendet und beim Wiederherstellen mit eingeblendet."""
|
||||
h = hwnd(fenster)
|
||||
if not h:
|
||||
return False
|
||||
user32().ShowWindow(h, 6) # SW_MINIMIZE
|
||||
return True
|
||||
|
||||
|
||||
def ist_minimiert(fenster: tk.Misc) -> bool:
|
||||
h = hwnd(fenster)
|
||||
return bool(user32().IsIconic(h)) if h else False
|
||||
|
||||
|
||||
def blinken(fenster: tk.Misc) -> None:
|
||||
h = hwnd(fenster)
|
||||
if h:
|
||||
user32().FlashWindow(h, True)
|
||||
|
||||
|
||||
def besitzer_setzen(fenster: tk.Misc, besitzer: tk.Misc) -> None:
|
||||
h, b = hwnd(fenster), hwnd(besitzer)
|
||||
if h and b:
|
||||
|
||||
Reference in new issue
Block a user