Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Farbänderung Titelleiste TForm (https://www.delphipraxis.net/185117-farbaenderung-titelleiste-tform.html)

DerHaushaltsProfi 16. Mai 2015 16:46


Farbänderung Titelleiste TForm
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Moin,

ich würde gerne Wissen wie (bzw. ob) man die Farbe von seiner Form ändern kann? Ich meine nicht die Background Farbe sondern die Farbe von dieser Leiste, auf der auch der "Römer-Helm" liegt (Ich benutze TDelphi von der Schule) und die über der Arbeitsfläche, in die man seine Komponenten zieht, liegt :roll:
Ich hoffe auf dem Bild erkannt man was ich meine :D
mfg

Popov 16. Mai 2015 17:43

AW: Farbänderung in Delphi
 
Zuerst die gute Nachricht: laut Toyota ist nichts unmöglich. Jetzt die Schlechte: nur mit gewissen Aufwand. Also vergiss es.

Mit normalen Delphi Boardmitteln geht es nicht. Mal paar Infos zum Programmieren mit Windows. Windows ist ein Betriebssystem und verwaltet im Hintergrund die ganzen Programme und Fenster. Wenn du etwas visuell machen willst, bittest du Windows um eine Fläche zum zeichnen. Windows gibt dir die Fläche, die nennt es: Fenster. Das Fenster hat einen Rahmen, eine Titelleiste und einige Systemschalter. In der Mitte ist eine freie Fläche. Diese freie Fläche, der Client-Bereich, ist deine Spielwiese. Alles außerhalb des Clients ist die Spielwiese von Windows. Innerhalb des Rahmen darfst du dich austoben. Also hast du i. d. R nur den Zugriff auf den Bereich innerhalb des Rahmens, nicht aber auf den Rahmen selbst.

Du kannst also nicht auf den Rahmen zugreifen, den kontrolliert Windows. Aber wie gesagt, nichts ist unmöglich. Mit viel Aufwand kann man Windows rein pfuschen, Messtages abfangen, ändern umleiten. Dazu muss man aber stark in die Materie eintauchen.

DerHaushaltsProfi 16. Mai 2015 17:57

AW: Farbänderung in Delphi
 
Ok schade... Aber danke für die schnelle Antwort. Ich finde dieses blau soooo hässlich und es passt einfach nicht zu meinem Programm :)

Mfg

DeddyH 16. Mai 2015 18:01

AW: Farbänderung in Delphi
 
Wer es bunt mag, kann auch Skinning verwenden, z.B. die AlphaControls. Die Lite Edition ist kostenlos und darf ohne Einschränkung verwendet werden.

Bernhard Geyer 16. Mai 2015 18:48

AW: Farbänderung in Delphi
 
Zitat:

Zitat von Popov (Beitrag 1301750)
etzt die Schlechte: nur mit gewissen Aufwand. Also vergiss es.

Wo ist der Aufwand in Delphi >XE2 einfach das passende Theme auszuwählen? Der Aufwand hält sich also sehr in Grenzen.

Aviator 16. Mai 2015 19:14

AW: Farbänderung in Delphi
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1301761)
Zitat:

Zitat von Popov (Beitrag 1301750)
etzt die Schlechte: nur mit gewissen Aufwand. Also vergiss es.

Wo ist der Aufwand in Delphi >XE2 einfach das passende Theme auszuwählen? Der Aufwand hält sich also sehr in Grenzen.

Er schrieb in seinem ersten Post, dass er Turbo Delphi benutzt. Ich kenne die Version zwar nicht wirklich, aber ich bezweifle stark, dass es dort bereits Style bzw. Themes gab.

Popov 16. Mai 2015 19:26

AW: Farbänderung in Delphi
 
Außerdem wollte er eher die Farbe des Rahmens und der Titelleiste ändern.

Wie gesagt, Style kann man ändern wenn man entweder die Komponenten installiert hat oder die Delphiversion die Funktion liefert. Ohne Style ist es Aufwand. Und bei Style hat sich jemand anderes den Aufwand gemacht.

redox 16. Mai 2015 20:06

AW: Farbänderung in Delphi
 
Der TE schwafelt oft über "Farbänderungen" herum, jedoch kann er noch nicht genau mitteilen, um welche Änderungen welcher Farben es denn konkret gehen soll.

Ein paar Zusatzinformationen vom Haushaltsprofie wären da oft ganz hilfreich:

- Welche Version von Delphi?
- Welche Version von Windows?

Turbo-Delphi wurde inzwischen "erraten", aber welche Version von Windows?

Wenn man die Windows-Version wüsste, könnte man ihm den Weg zu dem Systemsteuerungs-Dialog beschreiben, bei (in) dem er zumindest Ablesen könnte, daß die Zeile mit dem Helm wohl die Titelzeile ist...

Und so ein paar strengstens geheime Fachbegriffe wie "Titelzeile" des Fenster können ja kaum schaden... :wink:

Perlsau 16. Mai 2015 20:21

AW: Farbänderung in Delphi
 
Zitat:

Zitat von DerHaushaltsProfi (Beitrag 1301746)
Moin Moin, ich würde gerne Wissen wie (bzw. ob) man die Farbe von seiner Form ändern kann? Ich meine nicht die Background Farbe sondern die Farbe von dieser Leiste, auf der auch der "Römer-Helm" liegt (Ich benutze TDelphi von der Schule) und die über der Arbeitsfläche, in die man seine Komponenten zieht, liegt

Die Farbe der Titelleiste kann man durchaus ändern – aber nicht mit TurboDelphi, sondern im Windows direkt, denn Windows bestimmt weitgehend das Aussehen seiner Windows :lol:

Dalai 16. Mai 2015 20:31

AW: Farbänderung in Delphi
 
Zitat:

Zitat von redox (Beitrag 1301766)
Wenn man die Windows-Version wüsste, könnte man ihm den Weg zu dem Systemsteuerungs-Dialog beschreiben, bei (in) dem er zumindest Ablesen könnte, daß die Zeile mit dem Helm wohl die Titelzeile ist...

Jein. Aus dem Screenshot kann man ableiten, dass es Win7 ist. Klar kann man die Farben in der Systemsteuerung ändern, aber ich nehme nicht an, dass das Ziel ist, die Farbe aller Fenster zu ändern, sondern nur die des eigenen Programms; ich schließe das aus der Aussage
Zitat:

Zitat von DerHaushaltsProfi (Beitrag 1301751)
Ich finde dieses blau soooo hässlich und es passt einfach nicht zu meinem Programm :)

MfG Dalai

Medium 17. Mai 2015 00:33

AW: Farbänderung in Delphi
 
Ich empfinde es in aller Regel zudem als "Übergriff", wenn ein Programm meint, es müsse sich nicht an den Standard halten, den ich systemweit selbst vorgebe. Wenn ich meine Titelleisten Gelb haben will, soll sich bitte auch jedes Programm bitteschön daran halten. Wenn das nicht zum Programm-Design passt, liegt das mit großer Wahrscheinlichkeit daran, dass das Programm selbst ebenfalls sämtliche Standards ignoriert, und versucht sein eigenes "stylisches" Süppchen auf den Herd zu stellen. Ich hasse das!!
GUI-Standards sind nicht ohne Grund da, und sind ein absolut wesentlicher Bestandteil der Usability eines PCs. Ja, auch so etwas profanes wie Farben zählen dazu. Windows ist hier sogar gar nicht so sehr rigoros, man hat durchaus viel Gestaltungsfreiheiten. (Man vergleiche mal mit iOS z.B.)
Es gibt noch einen Aspekt: Die Standard GUI-Elemente sind flott, weil direkt vom System verwaltet und optimiert. Jeder, der meint er müsse einen dämlichen Farbverlauf als Titelleistenhintergrund haben, kostet mich Leistung. Das mag bei kleinen Progrämmchen egal sein, aber es wäre nicht das erste Mal, dass mir ein Programm mit "schlabberigem" Neuzeichnen den Workflow versaut hat. (Consumer Video-Editing Tools sind da ganz groß drin!) Besser, man gewöhnt sich seine "Stylesucht" so schnell wie möglich wieder ab. Funktion und Usability sind 10000% wichtiger als cooles Eyecandy, und ein gut durchdachtes Design im Rahmen der jeweiligen Standards kann problemlos auch sehr schnittig aussehen.

Von daher: Lass den Quark.

Amateurprofi 17. Mai 2015 02:27

AW: Farbänderung in Delphi
 
Ich habe das in einem Spiel einmal so gelöst.
Falls ich beim Kopieren irgendein Detail vergessen habe: Sorry.

Delphi-Quellcode:
type
   TCaptionState=(csNothing,csWon,csLost,csEnd,csWarn,csInfo);

   // Farben der Window-Caption
   TCaptionColor=Record
      BK1:TColor;
      BK2:TColor;
      FC:TColor;
   End;
   TCaptionColors=Array[TCaptionState] of TCaptionColor;

const
   CaptionColors:TCaptionColors=
      ((BK1:$6A240A; BK2:$F0CAA6; FC:clWHite)  // csNothing
      ,(BK1:clGreen; BK2:clYellow; FC:clWhite)  // csWon
      ,(BK1:clRed;   BK2:clYellow; FC:clWhite)  // csLost
      ,(BK1:$FF8700; BK2:clYellow; FC:clWhite)  // csEnd
      ,(BK1:clYellow; BK2:clRed;   FC:clRed)    // csWarn
      ,(BK1:clYellow; BK2:$00E948; FC:clBlack)); // csInfo
In Deklaration der Form:
Delphi-Quellcode:
   
    CaptionState:TCaptionState;
    PROCEDURE WMNCPAINT(var Msg:TMessage); message WM_NCPAINT;
 
    PROCEDURE WMNCACTIVATE(var Msg: TWMNCActivate); message WM_NCACTIVATE;
    PROCEDURE CMTEXTCHANGED(var Msg:TMessage); message CM_TEXTCHANGED;
    PROCEDURE DrawCaption;
Im implementation Teil

Delphi-Quellcode:
PROCEDURE TMain.WMNCPAINT(var Msg:TMessage);
begin
   inherited;
   DrawCaption;
end;
Delphi-Quellcode:
PROCEDURE TMain.WMNCACTIVATE(var Msg:TWMNCActivate) ;
begin
   inherited;
   if Msg.Active then DrawCaption;
end;
Delphi-Quellcode:
PROCEDURE TMain.CMTEXTCHANGED(var Msg:TMessage);
begin
   inherited;
   DrawCaption;
end;
Delphi-Quellcode:
PROCEDURE TMain.DrawCaption;
var FH,FW,CH,IH,IW,BW,X,Y:Integer; Bmp:TBitMap; Canvas:TCanvas; R:TRect;
    Metrics:TNONCLIENTMETRICS;
begin
   if WindowState=wsMinimized then Exit;
   if CaptionState=csNothing then Exit;
   Canvas:=TCanvas.Create;
   Canvas.Handle:=GetWindowDC(Self.Handle);
   CH:=GetSystemMetrics(SM_CYCAPTION)-1; // Unten scheint ein Pixel zu fehlen
   BW:=3*GetSystemMetrics(SM_CXSize); // W Buttons
   // Rect der Caption, abzüglich der Minimize,Maximize,Close Buttons definieren
   if WindowState=wsMaximized then begin
      SetRect(R,0,0,Width-BW,CH);
   end else begin
      FH:=GetSystemMetrics(SM_CYFRAME);
      FW:=GetSystemMetrics(SM_CXFRAME);
      SetRect(R,FW,FH,Width-FW-BW,FH+CH);
   end;
   // Icon in Bitmap kopieren
   IH:=GetSystemMetrics(SM_CYSMICON); // H Icon
   IW:=GetSystemMetrics(SM_CXSMICON); // W Icon
   Bmp:=TBitMap.Create;
   Bmp.Width:=IW;
   Bmp.Height:=IH;
   X:=R.Left+2;
   Y:=(R.Top+R.Bottom-IH) div 2;
   BitBlt(Bmp.Canvas.Handle,0,0,IW,IH,Canvas.Handle,X,Y,srccopy);
   // Canvas Hintergrund zeichen
   with CaptionColors[CaptionState] do
      GradientFillCanvas(Canvas,BK1,BK2,R,gdHorizontal);
   // Icon zeichnen
   Canvas.Draw(X,Y,Bmp);
   // Caption Text zeichnen
   Inc(R.Left,2+IW+4);
   Dec(R.Right,4);
   Metrics.cbSize:=SizeOf(TNONCLIENTMETRICS);
   SystemParametersInfo(SPI_GETNONCLIENTMETRICS,Metrics.cbSize,@Metrics,0);
   Canvas.Font.Height:=Metrics.lfCaptionFont.lfHeight;
   Canvas.Font.Style:=[fsBold];
   Canvas.Font.Color:=CaptionColors[CaptionState].FC;
   Canvas.Brush.Style:=bsClear;
   Y:=(R.Top+R.Bottom-Canvas.TextHeight(' ')) div 2;
   Canvas.TextRect(R,R.Left,Y,Caption);
   // Aufräumen
   ReleaseDC(Self.Handle,Canvas.Handle);
   Canvas.Free;
   Bmp.Free;
end;
Eine Farbänderung wird erreicht, indem CaptionState auf den gewünschten Wert gesetzt und Caption ein anderer Text zugeordnet wird.
Das zuweisen eines neuen Textes löst dann ein CM_TEXTCHANGED aus.

Bernhard Geyer 17. Mai 2015 08:33

AW: Farbänderung in Delphi
 
Zitat:

Zitat von Medium (Beitrag 1301774)
Ich empfinde es in aller Regel zudem als "Übergriff", wenn ein Programm meint, es müsse sich nicht an den Standard halten, den ich systemweit selbst vorgebe. Wenn ich meine Titelleisten Gelb haben will, soll sich bitte auch jedes Programm bitteschön daran halten. Wenn das nicht zum Programm-Design passt, liegt das mit großer Wahrscheinlichkeit daran, dass das Programm selbst ebenfalls sämtliche Standards ignoriert, und versucht sein eigenes "stylisches" Süppchen auf den Herd zu stellen. Ich hasse das!!

Mit welchen Browser bist du im Internet? Zähl mal zusammen wie viele Vorgaben es ignoriert?

Zitat:

Zitat von Medium (Beitrag 1301774)
GUI-Standards sind nicht ohne Grund da, und sind ein absolut wesentlicher Bestandteil der Usability eines PCs. Ja, auch so etwas profanes wie Farben zählen dazu. Windows ist hier sogar gar nicht so sehr rigoros, man hat durchaus viel Gestaltungsfreiheiten. (Man vergleiche mal mit iOS z.B.)

Aber wenn selbst MS dahingeht diese Vorgaben zu ignorieren? Wie oft war MS Office (teilweise) ein Fremdkörber auf dem eigenen OS? Wie viel GUI-Standards werden ignoriert (bzw. im Rahmen von Metro-UI) bzw. in einem wilden Mix zusammengestellt?

Zitat:

Zitat von Medium (Beitrag 1301774)
Besser, man gewöhnt sich seine "Stylesucht" so schnell wie möglich wieder ab. Funktion und Usability sind 10000% wichtiger als cooles Eyecandy, und ein gut durchdachtes Design im Rahmen der jeweiligen Standards kann problemlos auch sehr schnittig aussehen.

Stell die Suche nicht ein und sorge dafür das dein Programm in sich schlüssig ist. GUI-Vorgaben sind vor allem unter Windows nicht unbedingt auf den neuesten Stand bzw. man hätte eh unnötige Probleme sein Programm wirklich nach GUI-Vorgaben zu designen wenn man XP-Win10 unterstützen will da hier MS ja teilweise ja auch schon Änderungen vorgenommen hat die es schwer machen auf allen OS 10000%ig nach Windows auszusehen.


Aber wir schweifen wieder ab ...

Daniel 17. Mai 2015 08:48

AW: Farbänderung in Delphi
 
Zitat:

Zitat von Medium (Beitrag 1301774)
Von daher: Lass den Quark.

Das ist mir zu pauschal.
Ich betreue u.a. eine Anwendung, die mit den DevExpress-Sytels arbeitet. Und diese Styles erfreuen sich bei den Anwendern höchster Beliebtheit. Mir selbst ist ein klassisches Design auch lieber, aber wenn Du schon das Stichwort "Usability" in den Raum wirfst: Hier ist doch stets die zentrale Frage "Für wen gut benutzbar"? zu stellen. Es gibt so viele Umgebungen, in denen Buttons größer, Labels größer, Farben deutlich sprechend ein müssen. Manchmal auch nur, weil diese Farben im Kontext eines Unternehmens eine gewisse Bedeutung erlangt haben, die jeder kennt und versteht.

Solange man nichts Besseres weiß bzw. keine anderen Vorgaben hat, ist es bestimmt ein guter Rat, sich an die jeweiligen Standards des OS zu halten. Nur aus Prinzip und ggf. wider besseren Wissens würde ich das nicht tun. Das ist und bleibt die Entscheidung des Entwicklers, um auf die Bedürfnisse des Anwenders einzugehen. Dann erst entsteht "Usability".

Daniel 17. Mai 2015 08:54

AW: Farbänderung in Delphi
 
Zitat:

Zitat von redox (Beitrag 1301766)
Der TE schwafelt oft über "Farbänderungen" herum, jedoch kann er noch nicht genau mitteilen, um welche Änderungen welcher Farben es denn konkret gehen soll.

Und auch dann muss man niemanden anblaffen, dass er schwafeln würde, sondern fragt einfach sachlich nach.
Oder - und auch das ist legitim - man klickt einfach weiter.

stahli 17. Mai 2015 09:55

AW: Farbänderung in Delphi
 
+1
_


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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-2025 by Thomas Breitkreuz