Vista Rahmen

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dienstag 19. Juni 2007, 17:05

Hallo...

ich hab mich mal gefragt, ob man diesen schicken bunten Rahmen nicht komplett als Fenster darstellen und direkt "bemalen" bzw "beschreiben" koennte...

M$-Programme wie der WMP nutzen dieses transparente-schicke Zeugs ja auch fuer ihre Toolleisten usw.

Kann man sowas in wxPython oä vielleicht auch realisieren?
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Dienstag 19. Juni 2007, 18:12

Welcher schicke bunte Rahmen? Zur Transparenz unter Linux Systemen ist das mit pygtk möglich, unter Windows weis ich es nicht.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dienstag 19. Juni 2007, 20:03

habmich auch n bissl bloed ausgedrueckt...

Die Frage bezieht sich ja eher auf die Moeglichkeit, direkt die WindowsAPIs zum Fensteraufbau zu nutzen, damit man eben diesen "Glas-Rahmen" auch direkt bemalen kann...
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 6. Juli 2007, 17:37

nkoehring hat geschrieben:M$-Programme wie der WMP nutzen dieses transparente-schicke Zeugs ja auch fuer ihre Toolleisten usw.
Also in WMP 7 war die Transparenz ein Usability-Horror. Aber Transparenz insgesammt bekommst du wenn nicht mit wxPython alleine, dann sicher mit dem Modul ``win32gui`` und/oder ctypes hin.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Freitag 21. Dezember 2007, 13:19

Leonidas hat geschrieben:
nkoehring hat geschrieben:M$-Programme wie der WMP nutzen dieses transparente-schicke Zeugs ja auch fuer ihre Toolleisten usw.
Also in WMP 7 war die Transparenz ein Usability-Horror. Aber Transparenz insgesammt bekommst du wenn nicht mit wxPython alleine, dann sicher mit dem Modul ``win32gui`` und/oder ctypes hin.
Ach echt? Ja tolle Bockwurst, gut zu wissen, dann brauch ich ja erst gar net anfangen mit wxPython ne GUI zu erstellen.

Kann mir jemand sagen ob ich mit PyQt sowohl unter Xp, Vista + Linux
solch ähnlichen transparent GUIs erstellen kann?
Möchte halt GUIs erstellen mit Style, und nich den Standard 0815 Kram benutzen.


MfG
BlackJack

Freitag 21. Dezember 2007, 13:33

Das solltest Du nicht von Toolkits erwarten, die plattformübergreifend benutzbare GUIs anbieten wollen.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 21. Dezember 2007, 13:50

skypa hat geschrieben:Möchte halt GUIs erstellen mit Style, und nich den Standard 0815 Kram benutzen.
Aufgezwungene Transparenz hat keinen Stil, das hat höchstens Nerv-Faktor. Ich als User will nicht, dass mein Desktop durch das Fenster zu sehen ist - wenn ich das wollte dann würde ich Compiz und Murrine nutzen.

Was Stil hat: dem User die Wahl lassen, wie er die Widgets angezeigt haben will.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Freitag 21. Dezember 2007, 14:34

Hm das geht in Richtung dynamisches Design, das versuch ich im augenblick mit nem Kollegen als Webdesign Toolkit, bzw ist es eins der kommenden Projekte. Wird aber vermutlich in Javascript von uns geschrieben.

Naja, und son dynamisches Design hat ich später dann mal vor, wo man eben auch auf Transparenz umstellen kann und zu dem die Transparenz prozentual eben einstellen kann.

Kann mir denn mal einer sagen jetzt was ich am besten nehme?
wxPython oder PyQt?! oder was anders?! :?
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 21. Dezember 2007, 14:55

skypa hat geschrieben:Transparenz
Hallo!

http://wxwidgets.org/manuals/stable/wx_ ... ransparent

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 21. Dezember 2007, 15:04

nkoehring hat geschrieben:Kann man sowas in wxPython oä vielleicht auch realisieren?
Hallo nkoehring!

Ich habe kein Vista und kann dir nicht sagen, ob sich diese Threads wirklich um das drehen was du haben möchtest:
- http://thread.gmane.org/gmane.comp.pyth ... thon/48076
- http://thread.gmane.org/gmane.comp.pyth ... thon/48367
- http://thread.gmane.org/gmane.comp.pyth ... thon/46582

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
BlackJack

Freitag 21. Dezember 2007, 15:24

@skypa: Ich glaube das meinte Leonidas nicht damit. Der Benutzer soll nicht in jedem Programm irgendwas umstellen können/müssen, sondern zentral für alle. Wenn ich z.B. transparente Rahmen haben möchte, ist das eine Einstellung beim Fenstermanager und nicht bei einzelnen Applikationen. Und selbst wenn man das bei bestimmten Programmen ausschalten möchte ist das immer noch Aufgabe des Fenstermanagers. Anwendungsprogrammierer sollten sich nur um eine benutzbare GUI kümmern, sprich sinnvoll aufgeteilt, benutzbare Tab-Reihenfolge und Tastaturkürzel, und nicht um grafische Spielereien.
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Freitag 21. Dezember 2007, 15:48

Mag ja sein, aber ich mach das eben als hobby, und verdien damit.. im falle von webdesign sogar bisschen was nebenbei. ich will halt möglichst alles mal gemacht haben.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 21. Dezember 2007, 16:10

Versuchs mal mit KI-Programmierung. Ist sicherlich eine persönlich mehr bereichernde Erfahrung als transparente Fenster ;)
Insgesamt findet man in der Theoretischen Informatik viele interessante Sachen, in die man sich einlesen könnte. Es wird nur leider oft schnell kompliziert.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Dienstag 15. Januar 2008, 15:53

Hallo,

hab ganz vergessen zu posten, dass ich es geschafft habe per direktem DLL-Aufruf transparente Fenster zu erstellen.

Hier ein bissl Code. Urspruenglich wurde hier einfach per Win32-Extensions ein Fenster erstellt. Ich habe das Beispiel um Transparenz per DWMAPI erweitert.

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-

import win32gui
import win32con
import win32api
import ctypes
import struct


class win32Window(object):
    def __init__(self):
        self.g_registeredClass = 0
        win32gui.InitCommonControls()
        self.message_map = {}
        self.hinst = win32api.GetModuleHandle(None)
    
    def _RegisterWndClass(self):
        className = "testApp"
        if not self.g_registeredClass:
            wc = win32gui.WNDCLASS()
            wc.SetDialogProc() # Make it a dialog class.
            self.hinst = wc.hInstance = win32api.GetModuleHandle(None)
            wc.lpszClassName = className
            wc.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW
            wc.hCursor = win32gui.LoadCursor( 0, win32con.IDC_ARROW )
            wc.hbrBackground = win32con.COLOR_WINDOW + 1
            wc.lpfnWndProc = self.message_map # could also specify a wndproc.
            wc.cbWndExtra = win32con.DLGWINDOWEXTRA + struct.calcsize("Pi")
            icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE
            try:
                wc.hIcon = win32gui.LoadImage(self.hinst,
                    g_iconPathName,
                    win32con.IMAGE_ICON,
                    0,
                    0,
                    icon_flags
                )
            except:
                print "cannot find icon... using standard icon"
                wc.hIcon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION)
            classAtom = win32gui.RegisterClass(wc)
            self.g_registeredClass = 1
        return className
        
    def _GetDialogTemplate(self, dlgClassName):
        style = win32con.WS_THICKFRAME | \
                    win32con.WS_POPUP | \
                    win32con.WS_VISIBLE | \
                    win32con.WS_CAPTION | \
                    win32con.WS_SYSMENU | \
                    win32con.DS_SETFONT | \
                    win32con.WS_MINIMIZEBOX
        cs = win32con.WS_CHILD | win32con.WS_VISIBLE
        title = "TestWindow"
        dlg = [
            [
                title,
                (20, 20, 210, 250),
                style,
                None,
                (8, "MS Sans Serif"),
                None,
                dlgClassName
            ],
        ]
        #self.hinst = win32api.GetModuleHandle(None)
        #win32gui.CreateDialogIndirect(hinst, dlg, 0, self.message_map)
        return dlg

    def DoModal(self):
        message_map = {
            win32con.WM_SIZE: self.OnSize,
            #win32con.WM_COMMAND: self.OnCommand,
            #win32con.WM_NOTIFY: self.OnNotify,
            win32con.WM_INITDIALOG: self.OnInitDialog,
            win32con.WM_CLOSE: self.OnClose,
            win32con.WM_DESTROY: self.OnDestroy,
            win32con.WM_ERASEBKGND: self.OnEraseBackground,
        }
        dlgClassName = self._RegisterWndClass()
        template = self._GetDialogTemplate(dlgClassName)
        
        return win32gui.DialogBoxIndirect(self.hinst, template, 0, message_map)
        
    def OnInitDialog(self, hwnd, msg, wparam, lparam):
        self.hwnd = hwnd
        self.rect = win32gui.GetClientRect(hwnd)
        print self.rect
        
        # trying to usw dwmapi.dll to draw a glass client area
        margins = struct.pack("@iiii", 0, 0, 0, 1500)
        dwmapi = ctypes.windll.LoadLibrary("dwmapi")
        dwmapi.DwmExtendFrameIntoClientArea(hwnd, margins)
        
    def OnEraseBackground(self, *args):
        # funny... we dont need to do anything here except ``return 1``
        return 1

    def OnClose(self, hwnd, msg, wparam, lparam):
        win32gui.EndDialog(hwnd, 0)

    def OnDestroy(self, hwnd, msg, wparam, lparam):
        print "Window destroyed..."
        win32gui.PostQuitMessage(0) # Terminate the app.

    def OnSize(self, hwnd, msg, wparam, lparam):
        x = win32api.LOWORD(lparam)
        y = win32api.HIWORD(lparam)
        return 1
        
    def OnNotify(self, hwnd, msg, wparam, lparam):
        format = "iiiiiiiiiii"
        buf = win32gui.PyMakeBuffer(struct.calcsize(format), lparam)
        hwndFrom, idFrom, code, iItem, iSubItem, uNewState, uOldState,\
            uChanged, actionx, actiony, lParam = struct.unpack(format, buf)
        code += 0x4f0000 # hrm - wtf - commctrl uses this, and it works with mfc.  *sigh*
        if code == commctrl.NM_DBLCLK:
            print "Double click on item", iItem+1
        return 1

if __name__ == '__main__':
    win = win32Window()
    win.DoModal()
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Dienstag 15. Januar 2008, 16:31

Hallo nkoehring!

Zeile 33: Dieser Name existiert nicht.

lg
Gerold
:-)

PS: So einfach erstellt man ein Programm, das nur mehr mit Vista läuft. :roll:
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten