Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Zeichnen auf NonClientArea mit W7 Theme? (https://www.delphipraxis.net/174579-zeichnen-auf-nonclientarea-mit-w7-theme.html)

Memnarch 30. Apr 2013 09:42

Zeichnen auf NonClientArea mit W7 Theme?
 
Tag allerseits,
Wollt mich mal mit dem zeichnen auf dem NonClientArea bei Forms beschäftigen.

Dabei ist mir aufgefallen, dass keines der Beispiele, die ich gefunden habe funktioniert, wenn ein Theme in windows7 eingestellt wurde. Wenn ich auf Classic-Theme gehe klappt es.

Muss ich dann für diese eine Form das Themeing abschalten und alles selber machen?(Wohle eher nicht)
Wie mach DevExpress dass den dann?+

Als referenz Beispiel:
http://www.experts-exchange.com/Prog..._21563027.html

EWeiss 30. Apr 2013 10:26

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Meine ganzen Nonvcl Anwendungen zeichnen auf den NonClientArea Bereich.
Dabei spielt es überhaupt keine rolle ob eine Theme eingestellt ist oder nicht.

Zitat:

und alles selber machen
Ja muss man alles selber machen ;)


gruss

Memnarch 30. Apr 2013 11:30

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
@EWeiss: Ok das heißt: Theme für die Form abschalten ist damit inbegriffen?(bleiben mit dan die themes für die komponennten auf den Forms, wie Buttons?)

EDIT: yo, SetWindowTheme setzt das nur für die jeweilige control. Schöner wäre es natürlich, wen man direkt in Windows theme-bausteine(zumindest für die laufende applikation) registrieren könnte :)

uligerhardt 30. Apr 2013 12:20

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Vielleicht ist das für dich interessant.

Memnarch 1. Mai 2013 02:15

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Liste der Anhänge anzeigen (Anzahl: 2)
SO, ich bin jetzt soweit, das ich den Frame zeichnen kann. Es ist mir außerdem möglich die Buttons Min/Max/Close frei zu plazieren, da ich sämtliche NC events dafür überschrieben habe.

Mit Platzhalter grafiken sieht es so aus:
Anhang 39126


Leider habe ich ein Problem. In dem Moment, wo die Maus das erste mal mit irgendeinem teil des NC bereiches in Kontakt kommt(aber nur beim ersten mal, nach dem der active state gewechselt hat), werden die alten systembuttons draufgezeichnet -.-
Anhang 39127

Ich weiß noch nicht woran das liegt und wie ich das unterbinden kann. Dies wurde unter anderem vorher auch von stellen wie NCHittest NCLbuttonDown/Up ausgelößt. Diese habe ich aber bereits gekapert um meine Buttons zu behandeln, weswegen dort das problem nicht mehr auftrit. Meine Frage also: WARUM o.o?

Namenloser 1. Mai 2013 04:45

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Ich glaube, das ist nicht der richtige Weg. Probier es mal so: http://www.codeproject.com/Articles/...t-Area-in-Aero

Memnarch 1. Mai 2013 13:18

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Was heißt nicht der richtige Weg? Ich möchte ja alles selber zeichnen. Und in deinem Beispiel wird eigentlich in C# nur das implementiert, was wir in Delphi GlassFrame nennen?

EWeiss 1. Mai 2013 13:38

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Welchen WindowsStyle verwendest du denn?

gruss

Memnarch 1. Mai 2013 13:47

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Zum zeichnen stelle ich momentan den STyle der Form ab(Betrifft aber nur die form). Darauf zeichne ich dan. Wiegesagt, das letzte was mich nervt ist, das aus irgendeinem grund irgendwo diese Systembuttons erneut gezeichnet werden. Ich muss rauskriegen wo, um das zu korrigieren :(

EWeiss 1. Mai 2013 13:51

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Deshalb meine Frage welchen Windowstyle du verwendest.
Du mußt diesen ermitteln und gegebenfalls auf den für dich in frage kommenden ändern.
So wie es zur zeit bei dir aussieht verwendest du WS_OVERLAPPEDWINDOW.
Und was sagt dir das?

oops: So denke ich

WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED or WS_CAPTION or WS_SYSMENU or
WS_THICKFRAME or WS_MINIMIZEBOX or WS_MAXIMIZEBOX);

Entweder verwende einen der die Boxen gar nicht erst anzeigt
Oder schalte sie einfach aus

gruss

Memnarch 1. Mai 2013 14:05

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
AH, ok yetzt versteh ich worauf du hinaus wolltest!^^
Ja Das SysMenu abgeschaltet und schon habe ich freie Bahn...es kann manchmal so einfach sein :D

EWeiss 1. Mai 2013 14:14

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Zitat:

Zitat von Memnarch (Beitrag 1213668)
AH, ok yetzt versteh ich worauf du hinaus wolltest!^^
Ja Das SysMenu abgeschaltet und schon habe ich freie Bahn...es kann manchmal so einfach sein :D

Jo oder auf WS_POPUP ändern ;)

Zitat:

wen man direkt in Windows theme-bausteine(zumindest für die laufende applikation) registrieren könnte
Das geht auch..

uses uxthemes
function UseThemes: Boolean;

davor aber unbedingt die Library initialisieren
InitThemeLibrary

gruss

Namenloser 1. Mai 2013 14:58

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Zitat:

Zitat von Memnarch (Beitrag 1213663)
Was heißt nicht der richtige Weg? Ich möchte ja alles selber zeichnen. Und in deinem Beispiel wird eigentlich in C# nur das implementiert, was wir in Delphi GlassFrame nennen?

Was jetzt, willst du einen komplett eigenes Form-Theme oder willst du nur in die Non-Client-Area zeichnen so wie z.B. Chrome es mit den Tabs macht? Aus deiner Frage schloss ich letzteres.

Im anderen Fall würde ich ein Layered Window nehmen.

Memnarch 1. Mai 2013 15:59

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Zitat:

Zitat von EWeiss (Beitrag 1213669)
Zitat:

wen man direkt in Windows theme-bausteine(zumindest für die laufende applikation) registrieren könnte
Das geht auch..

uses uxthemes
function UseThemes: Boolean;

davor aber unbedingt die Library initialisieren
InitThemeLibrary

gruss

Öh, also ich finde in der unit zwar jede menge funktionen üb Themebausteinne auszulesen, aber nicht diese zu verändern o.O.

Nehmen wir mal als Beispiel den Formrand. Dafür kann ich die Grafik bekommen. Würde statdessen aber leiber was eigenes registrieren, dass dan gezeichnet wird.

Jemand nen beispiel?

EDIT: ah moment. GetThemeBitmap kann mir das aktuelle handle geben. Das heißt ich kann dessen Inhalt verändern und bearbeite somit den theme richtig?

MFG
Memnarch

EWeiss 1. Mai 2013 19:52

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Zitat:

GetThemeBitmap kann mir das aktuelle handle geben. Das heißt ich kann dessen Inhalt verändern und bearbeite somit den theme richtig?
Hab mich damit noch nicht beschäftigt.

Ich dachte es ging dir mehr darum ob du zulassen/verhindern willst ob die Theme deinen Fensterstiel verändert.

Zitat:

Nehmen wir mal als Beispiel den Formrand.
Bei einem WS_POPUP Fenster hat man keinen Formrand und dieser WindowStyle bietet sich daher für dein vorhaben an.
Ich sagte ja schon bei deinem Vorhaben mußt du alles selber machen.

gruss

Memnarch 2. Mai 2013 20:19

AW: Zeichnen auf NonClientArea mit W7 Theme?
 
Liste der Anhänge anzeigen (Anzahl: 3)
Ich habe es jetzt so, dass zuerst das Systemmenu abgestellt wird
Anhang 39141
Das theming ebenfalls
Anhang 39142
und zeichne dan meinen Kram:
Anhang 39140

Mh, ich kann sogar die ClientArea größe genau bestimmen. Oh das erlaubt so schöne sachen(wie schließen buttons etc auf der seite oder so :D)

Zittert an der rechten/unteren ecke allerdings noch etwas (Je nach skalierrichtung). Da muss ich nochmal gucken...

Die Grafiken sind aus dem "Orange Graphit" VCL style von
http://theroadtodelphi.wordpress.com...-carousel-1986


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 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