Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 18.04.06 20:19 
Ich habe mich nach langem Zögern dazu entschlossen, mich ein Stück weit auf die dunkle Seite der Programmierung zu wagen: Anpassen des Designs einer Form, abweichend vom Windows-Standard. (D.h. der User kann auswählen, ob er Standard oder alternatives Design haben möchte).

Ich habe da eine recht umfangreiche Anwendung, mit vielen Komponenten (PageControls, Panels, Groupboxen, VirtualStringTrees, Comboboxen, Edits etc.). Das ganze ist nicht auf eine bestimmte Größe fixiert, d.h. die Form ist in der Größe veränderbar, ebenso einige Komponenten innerhalb der Form.

Mein Konzept sieht bisher vor, dass ich ein (oder mehrere) Bitmaps habe, die als Datei im "SkinOrdner" liegen. Ausschnitte aus diesen benutze ich z.B. um die Tabs im Pagecontrol zu zeichnen. Auf den einzelnen Tabs liegen dann dazu passende andere Ausschnitte aus dem Bitmap (damit das ganze als ein Bild wirkt.) Sind auf dem Bild weitere Kompos, wie Panels, Groupboxen etc, dann pack ich auch darauf wieder ein Image und zerschnibbel mein Bitmap weiter.
Netterweise verhalten sich z.B. Groupboxen im XP-Style anders als im Classic-Mode, sodass man damit doppelte Arbeit hat.

Ein Umschalten "Skin <-> Standard" würde dann so aussehen, dass ich einfach sämtliche Images ausblende und ggf. bei einigen Sachen den OwnerDraw wieder auf False setze.

Das Problem dabei: Das ist recht aufwendig :gruebel:. Daher die Frage: Geht das auch irgendwie einfacher? Und zwar so, dass ich mein bestehendes Gerüst (also die bereits vorhandenen Komponenten) nicht komplett umbauen muss?

Es ist mir klar, dass ich damit nicht alles skinnen kann. Spätestens bei den Scrollbars der VirtualTrees hörts auf, da man die nicht ohne weiteres übermalen kann (da müsste man die wohl ausblenden, und Scrollbars mit was eigenem simulieren, und dann den Tree manuell scrollen). Auch den Rahmen der Form an sich krieg ich damit nicht hin (da werd ich wohl Regions einsetzen). Aber ich hab mir gerade mal den WMP angeschaut...bei dem findet man auch immer wieder die Standardsachen zwischen dem geskinnten Kram ;-)

Ein erster Versuch ist im Anhang. Da ist ne Pagecontrol mit mehren Groupboxen drauf. Um die Buttons (und um die Lesbarkeit der Schrift) hab ich mich noch nicht gekümmert.

Frage an die Skin-Fraktion: Bin ich da auf dem richtigen Weg, oder muss nochmal komplett umdenken?
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Di 18.04.06 20:26 
Villeicht hilft es sich anzuschauen wie es die anderen machen

_________________
Markus Kinzler.
Gausi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 18.04.06 20:58 
So auf Anhieb: Nein ;-)

Denn: Da sind sämtliche verfügbaren Komponenten komplett von TCustomControl abgeleitet. Wie ich damit eine PageControl (die - wenn ich das richtig sehe - noch nicht dabei ist) umskinne, ist nur schwer ersichtlich.

Desweiteren ist es mit diesen Komponenten scheinbar nicht ohne weiteres möglich, dass man sie im Standard-Design hat - weil halt alles selbst gezeichnet wird. Zwar gibt es den Style "classic" und "xpblue", aber wenn der User exotischere Farben eingestellt hat, müsste man dafür nen neuen Skin bauen und einbinden. ich möchte aber auf jeden Fall das Standard-Design als Auswahlmöglichkeit haben.

_________________
We are, we were and will not be.
Aya
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1964
Erhaltene Danke: 15

MacOSX 10.6.7
Xcode / C++
BeitragVerfasst: Mi 19.04.06 14:09 
Hi,

vor langer langer zeit (*g*) wollte ich auch all meine Programme mit einem schöneren Skin versehen.. und hab auch alle möglichen dinge probiert es möglichst einfach hinzubekommen..

Resultat sieht so aus:
koshigaya.de/?conten...le=MosaicBuilder.txt

Erst versuchte ich alle standardkomponenten einfach mit nem eigenen OnDraw zu überzeichnen etc, hat auch bei Buttons etc anfangs gut geklappt.. aber bei anderen ging es so fast garnicht..

Gelöst hab ich es im endeffekt indem ich mir für JEDES Control ein eigenes geschrieben habe bei dem ich das zeichnen selber übernehme.. also z.B. nen Button hab ich von TWinControl abgeleitet und das ding komplett selbst neu gemacht... das PageControl ist von TPageControl abgeleitet und einfach nur selber gezeichnet.. dadurch braucht man da nicht die ganzen sachen mit dem wechsel der reiter etc selber machen :)

Und soweit ich weiß ist da die einzige möglichkeit wie man etwas derartiges machen kann...

Au'revoir,
Aya~

_________________
Aya
I aim for my endless dreams and I know they will come true!