Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi XP Style für ein Form abschaltbar? (https://www.delphipraxis.net/42341-xp-style-fuer-ein-form-abschaltbar.html)

MaBuSE 17. Mär 2005 13:34


XP Style für ein Form abschaltbar?
 
Hallo,

ich habe ein Delphi 7 Programm, in das ich die XPManifest Komponente eingefügt habe.

Dadurch wird die Unit XPMan eingebunden, die die Resourcedatei WindowsXP.res einbindet.

Dadurch ist die Ganze Applikation im neuem WinXP Look.

Gibt es eine Möglichkeit nur ein TForm von dem WinXP Look auszuschließen?
(Alle Controls, Buttons, Panels, ... sollten das alte "nicht XP" Aussehen haben.)

Für eine Antwort bedanke ich mich schon mal im Voraus.

[edit]als offene Frage markiert[/edit]

Waldteufel 17. Mär 2005 13:37

Re: XP Style für ein Form abschaltbar?
 
Hallo.

Ich schätze, nein, denn der XP-Style wird in der Resourcen-Datei festgelegt. Und die gilt für das ganze Programm.

OT: Findest du den XP-Style so schlimm? :wink:

MaBuSE 17. Mär 2005 13:45

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Waldteufel
Ich schätze, nein, denn der XP-Style wird in der Resourcen-Datei festgelegt. Und die gilt für das ganze Programm.

Deswegen frage ich ja ;-)

Zitat:

Zitat von Waldteufel
OT: Findest du den XP-Style so schlimm? :wink:

Prinzipiell nein, aber unser AboutDialog, der auch der Splash Screen ist, hat ein von der Firma vorgegebenes Aussehen (Farben, Schriftgröße, ...) nur dieses TForm soll nicht XP gestylt werden.

Im schlimmsten Fall muss ich das Form als TBitmap ablegen und den Text auf das Canvas schreiben.
Das möchte ich aber nach Möglichkeit vermeiden.

ps: Herzlich Willkommen bei der DP :dp:

Waldteufel 17. Mär 2005 13:54

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von MaBuSE
Im schlimmsten Fall muss ich das Form als TBitmap ablegen und den Text auf das Canvas schreiben. Das möchte ich aber nach Möglichkeit vermeiden.

Ich fürchte, es geht nicht anders. Entweder ganz oder garnicht.

MaBuSE 17. Mär 2005 13:56

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Waldteufel
Zitat:

Zitat von MaBuSE
Im schlimmsten Fall muss ich das Form als TBitmap ablegen und den Text auf das Canvas schreiben. Das möchte ich aber nach Möglichkeit vermeiden.

Ich fürchte, es geht nicht anders. Entweder ganz oder garnicht.

Vieleicht kennt ja ein Anderer die Lösung ;-)

Trotzdem Danke für die Antwort.

Bernhard Geyer 17. Mär 2005 13:56

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von MaBuSE
Gibt es eine Möglichkeit nur ein TForm von dem WinXP Look auszuschließen?

AFAIK nicht bei den mitgelieferten Delphi-Komponenten.
Im ElPack kann für jedes Control das XPTheming Ein- bzw. Ausgeschaltet werden.

MaBuSE 17. Mär 2005 14:02

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Bernhard Geyer
Zitat:

Zitat von MaBuSE
Gibt es eine Möglichkeit nur ein TForm von dem WinXP Look auszuschließen?

AFAIK nicht bei den mitgelieferten Delphi-Komponenten.
Im ElPack kann für jedes Control das XPTheming Ein- bzw. Ausgeschaltet werden.

Gibt es irgendwo einen guten (deutschen) Text, in dem man nachlesen kann, wie das eigentlich genau funktioniert. Wie XP anhand der Resource die Controls stylen kann. Evtl kann ich mir ja da eine Idee holen, das auszuschalten.

Wurde zu dem Thema mal was im Entwickler geschrieben?

Lemmy1 17. Mär 2005 14:07

Re: XP Style für ein Form abschaltbar?
 
Deaktivieren von Styles ist relativ einfach. Jedoch muss man das pro Control tun:

Delphi-Quellcode:
SetWindowTheme(Button1.Handle, '', '');
SetWindowTheme ist deklariert in der Unit UxTheme (zumindest in D2005); also das in die Uses rein.

Natürlich kann man sich eine Schleife für alle Controls der Formulars schreiben in der Art:

Delphi-Quellcode:
for i := 0 to ControlCount-1 do begin
  if Controls[i] is TWinControl then begin
    SetWindowTheme((Controls[i] as TWinControl).Handle, '', '');
  end;
end;
Gruß
Lemmy

MaBuSE 17. Mär 2005 14:27

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Lemmy1
Deaktivieren von Styles ist relativ einfach. Jedoch muss man das pro Control tun.

Hey, das funktioniert ja :mrgreen:

Danke

ps: Frage als Beantwortet markiert.

Lemmy1 17. Mär 2005 14:38

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von Lemmy1
Deaktivieren von Styles ist relativ einfach. Jedoch muss man das pro Control tun.

Hey, das funktioniert ja :mrgreen:

Danke

ps: Frage als Beantwortet markiert.

Keine Ursache aber noch einen Tip: Test die Anwendung auf mal unter Windows 2000 oder Win98, nicht dass dieser Code dort abschmiert. Habs zwar selbst noch nicht ausprobiert, jedoch sollte man testen können ob es den Stylemanager gibt indem man auf @SetWindowTheme<>nil testet, da diese Unit ihre Funktionen dynamisch lädt.

MaBuSE 17. Mär 2005 14:41

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Lemmy1
Keine Ursache aber noch einen Tip: Test die Anwendung auf mal unter Windows 2000 oder Win98, nicht dass dieser Code dort abschmiert. Habs zwar selbst noch nicht ausprobiert, jedoch sollte man testen können ob es den Stylemanager gibt indem man auf @SetWindowTheme<>nil testet, da diese Unit ihre Funktionen dynamisch lädt.

Was mach ich den bei nicht TWinContols ?

Delphi-Quellcode:
SetWindowTheme((SpeedButton1 as TWinControl).Handle, '', '');
schlägt ja fehl.

Der SpeedButton bekommt aber trotzdem ein XP Style :-(

Lemmy1 17. Mär 2005 14:53

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von MaBuSE
Zitat:

Zitat von Lemmy1
Keine Ursache aber noch einen Tip: Test die Anwendung auf mal unter Windows 2000 oder Win98, nicht dass dieser Code dort abschmiert. Habs zwar selbst noch nicht ausprobiert, jedoch sollte man testen können ob es den Stylemanager gibt indem man auf @SetWindowTheme<>nil testet, da diese Unit ihre Funktionen dynamisch lädt.

Was mach ich den bei nicht TWinContols ?

Delphi-Quellcode:
SetWindowTheme((SpeedButton1 as TWinControl).Handle, '', '');
schlägt ja fehl.

Der SpeedButton bekommt aber trotzdem ein XP Style :-(

Ich würd mal sagen, versuch doch lieber die FormAlsBitmap Variante :( Das Problem ist das der SpeedButton kein "echtes" Windows-Control ist sondern "nur" ein Delphi Control und daher zeichnet sich der SpeedButton selbst. Das jetzt auch noch zu umgehen wäre wahrscheinlich ein recht hoher Aufwand.

Lemmy1 17. Mär 2005 15:07

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Lemmy1
Ich würd mal sagen, versuch doch lieber die FormAlsBitmap Variante :( Das Problem ist das der SpeedButton kein "echtes" Windows-Control ist sondern "nur" ein Delphi Control und daher zeichnet sich der SpeedButton selbst. Das jetzt auch noch zu umgehen wäre wahrscheinlich ein recht hoher Aufwand.

Hrm...also hab mal noch ein Bischen rumgehackt...folgendes geht anscheinend wenn Du es ins FormShow reintust (vorher Unit Themes in die Uses rein):

Delphi-Quellcode:
var
  p: ^Boolean;
begin
  p := @(Themes.ThemeServices.ThemesAvailable);
  p^ := False;
end;
Aber da der Code sowas von gehackt würd ich die Finger von lassen :) Ne im Ernst...was hier passiert ist, dass ThemesAvailable auf False gesetzt wird. Da das aber eine ReadOnly property ist geht das nur mit dem bößen Pointer Umweg. Wenn das Formular geschlossen wird, solltest Du den Wert natürlich wiederherstellen. Use at your own risk :)

MaBuSE 17. Mär 2005 15:42

Re: XP Style für ein Form abschaltbar?
 
Zitat:

Zitat von Lemmy1
Aber da der Code sowas von gehackt würd ich die Finger von lassen :) Ne im Ernst...was hier passiert ist, dass ThemesAvailable auf False gesetzt wird. Da das aber eine ReadOnly property ist geht das nur mit dem bößen Pointer Umweg. Wenn das Formular geschlossen wird, solltest Du den Wert natürlich wiederherstellen. Use at your own risk :)

Vielen Dank ;-)

cyberdelic 17. Apr 2007 14:01

Re: XP Style für ein Form abschaltbar?
 
Hallo Leute,
bei mir funktioniert es bspw. für einen Button, aber nicht für eine Coolbar und auch nicht für eine TListview :(
Weiß hier jemand Rat? Außerdem erhalte ich eine Access Violation wenn ich den Code im OnShow oder OnCreate habe, es funktioniert nur bspw. in einem Buttonereignis.

cyberdelic 17. Apr 2007 14:13

Re: XP Style für ein Form abschaltbar?
 
OK, es scheint für Coolbars zu funktionieren, allerdings zeichnet er dann nur die Coolbands im alten Stil, den Hintergrund der Coolbar kann man nicht dazu bewegen sich altmodisch zu geben :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:25 Uhr.

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