Vista Rahmen

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

Vista Rahmen

Beitragvon nkoehring » 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?
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Beitragvon veers » 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:

Beitragvon nkoehring » 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...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Vista Rahmen

Beitragvon Leonidas » 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

Re: Vista Rahmen

Beitragvon skypa » 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

Beitragvon BlackJack » Freitag 21. Dezember 2007, 13:33

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

Re: Vista Rahmen

Beitragvon Leonidas » 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

Beitragvon skypa » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: Vista Rahmen

Beitragvon gerold » 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

Beitragvon 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

Beitragvon skypa » 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.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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:

hab ich ganz vergessen...

Beitragvon nkoehring » 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()
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » 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.

Wer ist online?

Mitglieder in diesem Forum: __deets__