Deutsch
Forum

Windows Design visueller Stil Theme

 
- Seite 1 -



GDL
Hallo,
kann mir bitte jemand sagen, wie man unter Profan das Windowsdesign abfrägt?
siehe Bildanhang.Danke.

Servus
Georg

182 kB
Hochgeladen:01.10.2007
Ladeanzahl321
Herunterladen
 
Windows7 Xprofan 8,9,10 [...]  [...] 
01.10.2007  
 



 
- Seite 1 -



RGH
Hallo, um diese API nach XProfan umzusetzten, mußt Du zunächst wissen, in welcher Windows-DLL sie steckt. Das ist in der API-Hilfe für gewöhnlich angegeben und in diesem Fall die uxtheme.dll.

Der Rückgabewert ist ein Wert des Typs HTHEME. Das H als erster Buchstabe beudet Handle und in einem 32-Bit-Betriebssystem ist dieses ein 32-Bit-Wert, also ein Longint. Der Parameter HWND ist das Handle des zu untersuchenden Fensters. Will man die Funktion in XProfan also für das Hauptfenster aufrufen, so lautet sie:
KompilierenMarkierenSeparieren
Ich fürchte aber, sie bringt Dich nicht weiter. Zum einen gibt es die DLL erst ab Windows XP und zum anderen gibt sie auch bei einer Standard-XP-Oberfläche 0 zurück.

Dir geht es vermutlich in der Hauptsache darum, herauszubekommen, ob die Titel- und Menüzeilen die korrekte Gröe der klassischen Bildschirmdarstellung haben, damit die Dialogelemente korrekt auf die Dialoge passen. Da helfen Dir die XProfan-Systemvariablen %cyCaption und %cyMenu weiter. Wenn deren Wert größer ist, als bei Deiner klassischen Darstellung ist entweder ein XP- oder Vista-Stil im Einsatz, oder die Anzeige wurde anderweitig angepaßt. (Auch unter Win2000 und früher, konnte man die Ansicht so verändern, dass die Größen nicht mehrt stimmten, also etwa doppel hohe Titelzeilen bei Fenstern, etc.)
(Bei XP im XP-Look hat %cyCaption z.B. den Wert 26.)

Gruß
Roland
 
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
02.10.2007  
 




GDL
Gut dann nehme ich %cyCaption.
Wird sowieso noch ne langwierige Geschichte.Zwei Rechner meiner Testanlagen können nur 1024*768 mit 256 Farben.Muss alle festen Farbzuweisungen in Variablen umwandeln und durch 2 unterschiedliche Dateien laden.
Ebenso können diese Graphikkarten max. 300 Farbbuttons (SKcontrol) darstellen.
Anscheinend benötigt WinME von den 16 Mb Graphikspeicher zuviel.Bei normalen Windowsbuttons gibt es keine Probleme.
Ach Abwärtskompatibel wie bist du schön.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
02.10.2007  
 




GDL
Das letzte Problem ist nun, wie ich es hinbekomme, dass die Desktopikonen fixiert bleiben.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.10.2007  
 




GDL
Möchte wenn dieser Dialog gestartet wird,
KompilierenMarkierenSeparieren
das dieser immer im Vordergrund bleibt, oder das Hauptprogramm angehalten bleibt.

Habe bereits mit winexecwait
KompilierenMarkierenSeparieren
versucht. Dies geht zwar einwandfrei, nur wenn man das Theme wechselt,dauert dies fast 2min. bis das Hauptprogramm weitermacht.Denkt jeder gleich an einen Programmabsturz.

Ohne winexecwait und mittels einer Schleife in der mit findwindow nachgesehen wird, ob der Dialog noch läuft geht auch nicht, da dieser in den verschiedenen WinVer. unterschiedliche Fenstertitel trägt.
Gibt es da noch ne Möglichkeit?

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
03.10.2007  
 



Starte die cpl als Parameter für die Control.Exe statt runDLL die control.exe starten zu lassen.
 
04.10.2007  
 




GDL
kann bitte jemand mit Vista prüfen ob es den Desktopdialog startet.Danke.
KompilierenMarkierenSeparieren
Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
05.10.2007  
 



 
- Seite 2 -



Rolf
Koch
Nein Georg leider nix - kein Dialog.
 
05.10.2007  
 




GDL
ohje,was mach ich nun ? Magste bitte mal ohne desk.cpl guggen, ob wenigstens die Systemeinstellungen starten.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
05.10.2007  
 




Rolf
Koch
auch nur control.exe rennt nicht.
 
05.10.2007  
 




GDL
Soweit bin ich schon,
KompilierenMarkierenSeparieren
Code ist ausm Zusammenhang von Hauptmenü gerissen
Grundcode von A.Miethe und XProfan Comunity Mitgliedern
Bei richtigen Einstellungen passiert nichts
 {$CLEQ}
declare l_ende%,l_farbwert&,l_farbwertalt&,l_x&,l_dev#,l_xaufloesungalt&,l_yaufloesungalt&
declare l_farbtiefealt&,t$,n$,horizontal%,los%,hor%,vert%,tx&[10],uname&,abr&
declare fenstergroesse&,design%,weiter%,l_dlg&
dim l_dev#,156
Def RunControl(2) WinExec(Add$(Add$(
RUNDLL32 SHELL32.DLL,Control_RunDLL ,$(1)),.CPL ),$(2),1)
usermessages 16
@Set(AutoPaint,1)
windowstyle 31
window 0,0 - %maxx,%maxy
usefont Courier new,15,8,0,0,0
setdialogfont 1
windowtitle Hauptmenue GDL 2006
==============================

proc fgroesse

    fenstergroesse&=%cyCaption

endproc

=======================================================

proc windowsdesign

    RunControl(DESK,)

endproc

=================================================================

proc farbtiefe

    Höchste Farbtiefe für 1024 ermitteln

    While ~Enumdisplaysettings(0,l_x&,l_dev#)

        if Str$(Long(l_dev#,108))=1024

            horizontal%=1
            l_farbwert&=Long(l_dev#,104)
            case l_farbwert& > l_farbwertalt& : l_farbwertalt&=l_farbwert&

        endif

        Inc l_x&

    Wend

    ifnot horizontal%=1

        Let t$=Graphikkarte
        Let n$=Ihre Graphikkarte kann keine 1024*768 Auflösung.
        Programm wird beendet.
        MessageBox(n$,t$,64)
        dispose l_dev#
        end

    endif

    l_farbwert&=l_farbwertalt&

endproc

================================================================

proc umschalten

    Umschalten
    settimer 10
    waitinput
    killtimer
    Long l_dev#,40 = ~Dm_pelsheight | ~Dm_pelswidth | ~Dm_bitsperpel
    Long l_dev#,104 = l_farbwert&
    Long l_dev#,108 = hor%
    Long l_dev#,112 = vert%

    If ~Changedisplaysettings(l_dev#,~Cds_updateregistry) = ~Disp_change_restart

        External(setupapi.dll,SetupPromptReboot,0,0,0)

    Endif

    sonst wird Fenster nicht angepasst
    ShowMin
    ShowMax

endproc

====================================================================

proc rueckschalten

    Rückschalten
    l_farbwert&=l_farbtiefealt&
    hor%=l_xaufloesungalt&
    vert%=l_yaufloesungalt&
    umschalten

endproc

========================================================

proc textanzeige

    settext tx&[1], Aktuelle horizontale Auflösung : +str$(~Getdevicecaps(~Getdc(0),~Horzres))+   soll : 1024
    settext tx&[2], Aktuelle vertikale   Auflösung :  +str$(~Getdevicecaps(~Getdc(0),~Vertres))+   soll :  768

endproc

==================================================================

proc dmalen

    startpaint l_dlg&

    if tx&[1] > 0

        destroywindow(tx&[1])
        destroywindow(tx&[2])
        destroywindow(tx&[3])
        destroywindow(tx&[4])
        destroywindow(tx&[5])
        destroywindow(tx&[6])
        destroywindow(tx&[7])
        destroywindow(uname&)
        destroywindow(abr&)

    endif

    if (~Getdevicecaps(~Getdc(0),~Horzres) <> 1024) or (~Getdevicecaps(~Getdc(0),~Vertres) <> 768)

        cls RGB(208,0,0)

    else

        case design%=0:cls RGB(0,194,0)

    endif

    if fenstergroesse& <> 19

        design%=1
        cls RGB(208,0,0)
        tx&[5]=create(text,l_dlg&, Das Windowstheme ist nicht auf Windows - klassisch  ,30,200,530,20)
        tx&[6]=create(text,l_dlg&, eingestellt. - Bitte in folgendem Dialog einstellen.,30,220,530,20)
        tx&[7]=create(text,l_dlg&, Dieser Dialog wird am Schluss erneut gestartet.,30,240,530,20)

    else

        if weiter%=1

            l_ende%=1

        endif

    endif

    tx&[1]=create(text,l_dlg&, Aktuelle horizontale Auflösung : +str$(l_xaufloesungalt&)+   soll : 1024,30,40,530,20)
    tx&[2]=create(text,l_dlg&, Aktuelle vertikale   Auflösung :  +str$(l_yaufloesungalt&)+   soll :  768,30,60,530,20)
    tx&[3]=create(text,l_dlg&, Bei falscher Auflösung und autmat.Umschaltung wird,30,90,530,20)
    tx&[4]=create(text,l_dlg&, am Programmende auf die alten Werte rückgewechselt,30,110,530,20)
    uname&=create(button,l_dlg&,Umschalten,450,150,110,20)
    abr&=create(button,l_dlg&,Beenden,450,330,110,20)

    ifnot (l_xaufloesungalt& <> 1024) or (l_yaufloesungalt& <> 768)

        enablewindow uname&,0
        weiter%=1

    endif

    endpaint

endproc

====================================================================

proc deinstellungen

    windowstyle 8
    l_dlg&=create(window,%hwnd,Desktopeinstellungen,100,100,600,400)
    usefont Courier new,17,10,1,0,0
    setdialogfont 1
    die alten Einstellungen ermitteln und speichern
    l_farbtiefealt& = ~Getdevicecaps(~Getdc(0),~Bitspixel)
    l_xaufloesungalt& =~Getdevicecaps(~Getdc(0),~Horzres)
    l_yaufloesungalt& =~Getdevicecaps(~Getdc(0),~Vertres)
    fgroesse
    dmalen

    ifnot l_xaufloesungalt& =1024

        hor%=1024
        vert%=768
        farbtiefe
        enablewindow uname&,1

    endif

    clear l_ende%
    case (weiter%=1) and (design%=0):l_ende%=1
    case design%=1:windowsdesign

    whilenot l_ende%

        waitinput

        if (%umessage=16) or (clicked(abr&))

            l_ende%=1

        elseif clicked(uname&)

            umschalten
            horizontal%=1
            dmalen
            textanzeige
            enablewindow uname&,0

        ELSEIF %wmPaint

            dmalen

        endif

    wend

    destroywindow(l_dlg&)
    windowstyle 31

endproc

===============================================================================
deinstellungen

whilenot 0

    waitinput

    if %umessage = 16

        case horizontal%=1:rueckschalten
        case design%=1:windowsdesign
        dispose l_dev#
        end

    endif

wend


Letzte Problem ist, das die Desktobikons nicht am alten Platz bleiben.

Servus
Georg
 
Windows7 Xprofan 8,9,10 [...]  [...] 
05.10.2007  
 



Dich ärgert hier möglicherweise nur das Cds_updateregistry -Flag, und - wofür brauchst den Neustart?

Ich ziehe die Neustartfrage zurück, hab das if übersehen. (und das passiert mir)
 
05.10.2007  
 




Frank
Abbing
RGH
Hallo, um diese API nach XProfan umzusetzten, mußt Du zunächst wissen, in welcher Windows-DLL sie steckt. Das ist in der API-Hilfe für gewöhnlich angegeben und in diesem Fall die uxtheme.dll.

Der Rückgabewert ist ein Wert des Typs HTHEME. Das H als erster Buchstabe beudet Handle und in einem 32-Bit-Betriebssystem ist dieses ein 32-Bit-Wert, also ein Longint. Der Parameter HWND ist das Handle des zu untersuchenden Fensters. Will man die Funktion in XProfan also für das Hauptfenster aufrufen, so lautet sie:
KompilierenMarkierenSeparieren
Ich fürchte aber, sie bringt Dich nicht weiter. Zum einen gibt es die DLL erst ab Windows XP und zum anderen gibt sie auch bei einer Standard-XP-Oberfläche 0 zurück.

[...]
Gruß
Roland


Wenn die API in dem Fall 0 zurück liefert, mit welchen Handle muss man denn dann weiter arbeiten, wenn man weitere uxtheme-Funktionen benutzen will?
 
01.06.2008  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.089 Betrachtungen

Unbenanntvor 0 min.
Paul Glatz11.01.2015
Ernst21.04.2014
Torsten Boo12.07.2013
iF03.07.2012
Mehr...

Themeninformationen



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