![]() |
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?
![]() |
Re: Nieder mit dem Stringgrid-Fokus
Ich kann das Problem bei mir nicht reproduzieren...
Warum verwendest du dort überhaupt solche... ulkigen rosa Färbchen???? |
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:
Vielleicht ist da etwas nicht ganz richtig.
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; |
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!!! |
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;
|
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.
|
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.
|
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 :) )
|
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; |
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:
Code-Library:
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; ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:12 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