AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Farbänderung Titelleiste TForm

Ein Thema von DerHaushaltsProfi · begonnen am 16. Mai 2015 · letzter Beitrag vom 17. Mai 2015
Antwort Antwort
Seite 2 von 2     12   
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#11

AW: Farbänderung in Delphi

  Alt 17. Mai 2015, 00:33
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.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Farbänderung in Delphi

  Alt 17. Mai 2015, 02:27
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....

Geändert von Amateurprofi (17. Mai 2015 um 02:38 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#13

AW: Farbänderung in Delphi

  Alt 17. Mai 2015, 08:33
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?

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?

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 ...
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: Farbänderung in Delphi

  Alt 17. Mai 2015, 08:48
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 R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.919 Beiträge
 
Delphi 10.4 Sydney
 
#15

AW: Farbänderung in Delphi

  Alt 17. Mai 2015, 08:54
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.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.336 Beiträge
 
Delphi 11 Alexandria
 
#16

AW: Farbänderung in Delphi

  Alt 17. Mai 2015, 09:55
+1
_
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz