Forum | | | | - Seite 1 - |
| GDL | Hallo, kann mir bitte jemand sagen, wie man unter Profan das Windowsdesign abfrägt? siehe Bildanhang.Danke.
Servus Georg |
| | | | |
| | | | | - 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 |
| | | | |
| | GDL | Das letzte Problem ist nun, wie ich es hinbekomme, dass die Desktopikonen fixiert bleiben.
Servus Georg |
| | | | |
| | 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 |
| | | | |
| | | Starte die cpl als Parameter für die Control.Exe statt runDLL die control.exe starten zu lassen. |
| | | | |
| | GDL | | | | | |
| | | | - Seite 2 - |
| | Rolf Koch | Nein Georg leider nix - kein Dialog. |
| | | | |
| | GDL | ohje,was mach ich nun ? Magste bitte mal ohne desk.cpl guggen, ob wenigstens die Systemeinstellungen starten.
Servus Georg |
| | | | |
| | Rolf Koch | auch nur control.exe rennt nicht. |
| | | | |
| | GDL | Soweit bin ich schon, KompilierenMarkierenSeparierenCode 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 |
| | | | |
| | | 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) |
| | | | |
| | 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: KompilierenMarkierenSeparierenIch 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? |
| | | | |
|
AntwortenThemenoptionen | 5.130 Betrachtungen |
ThemeninformationenDieses Thema hat 7 Teilnehmer: |