Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi XP Anzeigeeinstellungen (https://www.delphipraxis.net/103347-xp-anzeigeeinstellungen.html)

hedie 14. Nov 2007 16:39


XP Anzeigeeinstellungen
 
Hallo

Ich möchte ein programm schreiben, welches alle Funktionen die man hat wenn man auf dem Desktop rechte maustaste --> Eigenschaften macht hat.

Nun an der Registry darf ich nix verändern bzw kann dies nicht.

Habt ihr irgendwelche vorschläge oder tipps...

Das was benötigt wird ist, Desktop hintergrund und Darstellungs einstellungen alles andere
wäre nicht benötigt is aber super wenns auch geht :D


danke schonmal

liebe grüsse
Claudio

bitsetter 14. Nov 2007 17:41

Re: XP Anzeigeeinstellungen
 
Hi,

das Hintergrundbild ändern

hedie 14. Nov 2007 17:44

Re: XP Anzeigeeinstellungen
 
Danke... Hat super geklappt...

Jetzt fehlt nur noch die Funktion für die Darstellung...

Wichtig is einfach das ich auf das XP Design wechseln kann und die Fenster Farbe auf Oliv grün umstellen kan etc...

bitsetter 14. Nov 2007 17:56

Re: XP Anzeigeeinstellungen
 
Versuche mal SetSysColors

hedie 14. Nov 2007 17:58

Re: XP Anzeigeeinstellungen
 
nee ich denke das is für bestimmte Farben

Das ändert mir ja noch micht das wichtigste, nämlich vom Klassischen Design zum XP Design

bitsetter 18. Nov 2007 23:34

Re: XP Anzeigeeinstellungen
 
Zitat:

Zitat von hedie
Jetzt fehlt nur noch die Funktion für die Darstellung...

Wichtig is einfach das ich auf das XP Design wechseln kann und die Fenster Farbe auf Oliv grün umstellen kan etc...

Hallo,

habe jetzt doch noch was gefunden, und zwar mit Hilfe von angeblich undokumentierten Funktionen in der uxTheme.dll kann man die Darstellung ändern.
Bei meinem Beispiel wird kurz vom XP- Stil auf Windows klassisch umgeschaltet und dann wieder zurück. Auch die Farbe der Fenster und die Größe der Schrift könnte man ändern, wenn man diese vorher mit Funktionen wie EnumThemeColors und EnumThemeSizes auslesen würde.
Delphi-Quellcode:
uses
  uxtheme;

procedure Delay(msec: longint);
var
  start, stop: longint;
begin
  start := gettickcount;
  repeat
  stop := gettickcount;
  application.processmessages;
  until (stop - start ) >= msec;
end;
procedure TForm1.Button1Click(Sender: TObject);
type
  HTHEMEFILE= HWND;
var
  OpenThemeFile: function(pThemeFileName, pColorName, pSizeName: LPCWSTR; hThemeFile_: pCardinal ;unknown: DWORD): HRESULT; stdcall;
  ApplyTheme: function(hThemeFile_: HTHEMEFILE; unknown: Char; hWnd_: HWND): HRESULT; stdcall;
  CloseThemeFile: function(hThemeFile_: HTHEMEFILE): HRESULT; stdcall;

  hUxTheme: THandle;
  hThemeFile_: HTHEMEFILE;
  c: Char;
  pThemeFileName, pColor, pSize: PWideChar;
const
  Sec_ = 8;
begin
  hThemeFile_ := 0;
  GetMem(pThemeFileName, MAX_PATH + 1);
  GetMem(pColor, 61);
  GetMem(pSize, 61);
  hUxTheme := LoadLibrary('uxTheme.dll');
  if hUxTheme <> 0 then
  try
    if uxtheme.GetCurrentThemeName(pThemeFileName, MAX_PATH, pColor, 60, pSize, 60) = 0 then
    begin
      OpenThemeFile := GetProcAddress(hUxTheme, PChar(2));
      ApplyTheme := GetProcAddress(hUxTheme, PChar(4));
      CloseThemeFile := GetProcAddress(hUxTheme, PChar(3));
      if Assigned(OpenThemeFile) and Assigned(ApplyTheme) and Assigned(CloseThemeFile) then
        if OpenThemeFile(pThemeFileName, pColor, pSize, @hThemeFile_, 0)= 0 then
        begin
          if hThemeFile_ > 0 then
          begin
            if MessageDlg(Format('Soll jetzt der Stil der Fenster für %d sec auf "Windows - klassisch" gesetzt werden?', [Sec_]), mtConfirmation, [mbYes, mbNo], 0)= mrYes then
            begin
              ZeroMemory(@c, length(c));
              ApplyTheme(0, c, 0);//Windows - klassisch
              Delay(Sec_* 1000);

              if ApplyTheme(hThemeFile_, c, 0) <> 0 then//alten Stil wiederherstellen
                MessageDlg('Fehler beim setzen des neuen Fensterstils', mtError, [mbOk], 0);
            end;
            CloseThemeFile(hThemeFile_);
          end;
        end
        else
          MessageDlg(Format('Fehler beim öffnen der Datei "%s"', [WideCharToString(pThemeFileName)]), mtError, [mbOk], 0);
    end
    else
      MessageDlg('Fehler beim auslesen des aktuellen Themenamens oder die jetzige Einstellung ist "Windows - klassisch".', mtError, [mbOk], 0);
  finally
    FreeMem(pThemeFileName);
    FreeMem(pColor);
    FreeMem(pSize);
    FreeLibrary(hUxTheme);
  end;
end;
Getestet mit Windows XP SP1.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz