Delphi-PRAXiS
Seite 2 von 2     12   

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)

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 17:25 Uhr.
Seite 2 von 2     12   

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