Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Nieder mit dem Stringgrid-Fokus (https://www.delphipraxis.net/86437-nieder-mit-dem-stringgrid-fokus.html)

JPSelter 14. Feb 2007 10:09


Nieder mit dem Stringgrid-Fokus
 
Ich habe hier ein Stringgrid, wo ich gerne den Fokus weg hätte. Wenn im Stringgrid keine Einträge sind, ist ja alles ok, aber sobald ich Inhalt einfüge färbt er mir die Zelle 1/1 so ein, dass die Schrift nicht lesbar ist. Klicke ich dann auf das Stringgrid, ist die Schrift wieder lesbar. Die Hintergrundfarbe ändert sich dabei nicht. Ich habe da teils gelb und teils hellrot drin, mit weißer Schrift sieht man da nicht mehr viel, sie sollte aber schwarz sein. Liegt es überhaupt am Fokus?

http://www.ditonovia.de/misc/delphi.jpg

TonyR 14. Feb 2007 10:32

Re: Nieder mit dem Stringgrid-Fokus
 
Ich kann das Problem bei mir nicht reproduzieren...
Warum verwendest du dort überhaupt solche... ulkigen rosa Färbchen????

JPSelter 14. Feb 2007 10:47

Re: Nieder mit dem Stringgrid-Fokus
 
Wenn jeder erst seine Programme komplett erklären müsste, würde das Forum vor Infos überschwappen. Daher redet man meistens nur über das Kernproblem und nicht über den Zweck solcher Farben. Das hat alles schon seinen Sinn...

Ich habe noch diesen Code hier:

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ARow>0 then
  begin
    case StringGridColorArray[ARow] of
      0: StringGrid1.Canvas.Brush.Color := $00DDE2FB;
      1: StringGrid1.Canvas.Brush.Color := $00E0FFFF;
      2: StringGrid1.Canvas.Brush.Color := $00C6FBDA;
    else
      StringGrid1.Canvas.Brush.Color := clWindow;
    end;
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, StringGrid1.Cells[ACol, ARow]);
  end;
end;
Vielleicht ist da etwas nicht ganz richtig.

TonyR 14. Feb 2007 11:00

Re: Nieder mit dem Stringgrid-Fokus
 
Weist du was ich vermute???

Wenn man etwas markiert, ist es gewöhnlich "blau"!
Und damit man den Text dann noch erkennt, wird der Text gewöhnlich "weiß"!

Das kannst du z.B. an den Symbol-Unterschriften auf dem Desktop erkennen.

Wenn du also die Markierungsfarbe änderst, dann bleibt aber die markierterText-Farbe noch weiß!!!

Das kann man ja auch im Darstellungs-Dialog deines Desktops einsehen!!!!

Sprich: Entweder du änderst dein rosa zu rot, oder du versuchst die markierteText-Farbe zu ändern!!!

TonyR 14. Feb 2007 11:05

Re: Nieder mit dem Stringgrid-Fokus
 
Was mir grad noch einfällt:

Ist es vielleicht möglich, dass du deinem stringgrid immer gleich wieder den Focus gibst, wenn es ihn z.B. nach einem ButtonClick verloren hat????
Delphi-Quellcode:
stringgrid1.SetFocus;

JPSelter 14. Feb 2007 11:11

Re: Nieder mit dem Stringgrid-Fokus
 
Danke für den Tip, es wird mit Sicherheit am (nicht vorhandenem) Markierungsblau liegen. Also muss ich die Markierungsschriftfarbe ändern. Um Deine Neugier zu bändigen: Es muss hell-rot (nicht rosa ;) ) sein, da rot zu stark ist und zu aggressiv wirkt. Die Software soll im Geschäftsumfeld eingesetzt werden. Da arbeitet man mit "seichten" Farben ;) Wenn da 10 Zeilen grell-rot sind, sieht das nicht schön aus.

JPSelter 27. Feb 2007 14:29

Re: Nieder mit dem Stringgrid-Fokus
 
So, da bin ich wieder. Ich musste dieses Thema erstmal ruhen lassen und mich um andere Dinge kümmern. Leider bekomme ich diese dumme Eigenschaft, wie oben auf den Screens gezeigt, nicht weg. Grund dafür ist einfach, dass das StringGrid immer oben-links-Zelle markiert. Das passiert auch mit jedem Minimalbeispiel, wenn man die Farben hier jetzt mal aussen vor lassen will. Also, die Frage besteht weiterhin: Wie bekomme ich die markierte Zelle da oben weg? Es ist ja anscheinend IMMER eine Zelle markiert.

hsg 27. Feb 2007 14:37

Re: Nieder mit dem Stringgrid-Fokus
 
Musst du unbedingt ein StringGrid nehmen? Alternativ würde sich der VirtualStringTree anbieten. Dort bist du in vielen Dingen freier und der markiert nicht grundsätzlich eine Zeile (was manchmal auch ein Problem sein kann :) )

Lannes 27. Feb 2007 15:48

Re: Nieder mit dem Stringgrid-Fokus
 
Hallo,

soll die Markierung nie angezeigt werden? Oder nur wenn das StringGrid nicht den Focus hat, denn dann muss man das noch extra betrachten.

Bzgl. der Schriftfarbe hat TonyR Dir schon den richtigen Tipp gegeben.

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ARow>0 then
  begin
    case StringGridColorArray[ARow] of
      0: StringGrid1.Canvas.Brush.Color := $00DDE2FB;
      1: StringGrid1.Canvas.Brush.Color := $00E0FFFF;
      2: StringGrid1.Canvas.Brush.Color := $00C6FBDA;
    else
      StringGrid1.Canvas.Brush.Color := clWindow;
    end;
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.Font.Color := StringGrid1.Font.Color;//<--- wg. der "negativ"-Schriftfarbe
    StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, StringGrid1.Cells[ACol, ARow]);
    //soll der Focusrahmen auch verschwinden, dann
    if gdFocused in State then
      StringGrid1.Canvas.DrawFocusRect(Rect);//<--- entfernt/übermalt per xor
  end;
end;

shmia 27. Feb 2007 16:12

Re: Nieder mit dem Stringgrid-Fokus
 
Grundsätzlich sollte die Textfarbe immer einen möglichst grossen Kontrast zur Hintergrundfarbe haben.
Du änderst zwar die Farbe des Hintergrunds, aber nicht die Farbe des Textes (Vordergrund).
Mit folgendem Code bleibt die Textfarbe im Kontrast zum Hintergrund
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  if ARow>0 then
  begin
    case StringGridColorArray[ARow] of
      0: StringGrid1.Canvas.Brush.Color := $00DDE2FB;
      1: StringGrid1.Canvas.Brush.Color := $00E0FFFF;
      2: StringGrid1.Canvas.Brush.Color := $00C6FBDA;
    else
      StringGrid1.Canvas.Brush.Color := clWindow;
    end;
    StringGrid1.Font.Color := BlackWhiteContrastColor(StringGrid1.Canvas.Brush.Color); // <====
    StringGrid1.Canvas.FillRect(Rect);
    StringGrid1.Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, StringGrid1.Cells[ACol, ARow]);
  end;
end;
Code-Library: Kontrastfarbe ermitteln


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.
Seite 1 von 2  1 2      

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