Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Farbe in einem StringGrid bei "editieren".. (Done)
Terra23 - So 24.08.03 13:40
Titel: Farbe in einem StringGrid bei "editieren".. (Done)
Hi Leute.
Ich habe gerade an meinem Programm einige Veränderungen vorgenommen, damit u.a. die tristen Farben weg sind. Nun hat mein Programm als Farbe ein leichtes blau; das tut aber nichts zur Sache.
Wie dem auch sei, die StringGrids sind ebenfalls blau und einige haben die Eigenschaft "goEditing" auf True. Wenn ich in diesen Grids dann in eine Zelle klicke um den Wert einzutragen, wird diese jedoch weiss und das gefällt mir absolut nicht. Wie kann ich es ändern, daß bei Eintragung eines Wertes in ein solches Grid die jeweilige Zelle auch blau bleibt?
Im Forum bin ich irgendwie nicht sonderlich weit gekommen und EDH bietet mir da auch nichts wirklich brauchbares; aber vielleicht ja eine(r/s) von euch. ;-)
UGrohne - So 24.08.03 14:00
Du musst OnCellDraw irgendwie überschreiben und dort dann die Farbe vom Brush ändern, so in etwa. Schau vll. gleich mal nach :wink:
Terra23 - Do 28.08.03 14:29
Das klappt bei mir nicht. Wahrscheinlich habe ich zu wenig Ahnung davon.. :-(
ErnestoChe - Do 28.08.03 14:50
Hi,
schau mal
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); const SelectedColor = Clblue; begin if (state = [gdSelected]) then with TStringGrid(Sender), Canvas do begin Brush.Color := SelectedColor; FillRect(Rect); TextRect(Rect, Rect.Left + 2, Rect.Top + 2, Cells[aCol, aRow]); end; end; |
und noch
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var dx: Integer; begin with (Sender as TStringGrid) do begin if (ACol = 0) or (ARow = 0) then Canvas.Brush.Color := clBtnFace else begin case ACol of 1: Canvas.Font.Color := clBlack; 2: Canvas.Font.Color := clBlue; end; if ARow mod 2 = 0 then Canvas.Brush.Color := $00E1FFF9 else Canvas.Brush.Color := $00FFEBDF; Canvas.TextRect(Rect, Rect.Left + 2, Rect.Top + 2, cells[acol, arow]); Canvas.FrameRect(Rect); end; end; end; |
MFG
- Ernesto -
Terra23 - Do 28.08.03 15:16
Hey, vielen Dank Ernesto. Genau das, was ich gesucht habe. :-)
Viva La Revolution... ;-)
Terra23 - Do 28.08.03 16:59
... sorry für die vorschnelle Reaktion meinerseits. Gibt es irgendwo eine Liste mit den States?
Ich meine, gdSelected ist ja markiert (für diesen Zweck funktioniert es auch so wie es soll) doch nun bräuchte ich noch den State für "geklickt", sprich wenn man doppelt in eine Zelle klickt, damit die nicht weiß bleibt...
///Edit -> Schon gut. Hab's in der Hilfe gefunden. :oops: Nichts für Ungut.
kasi - Do 28.08.03 18:08
Das wird so einfach nicht funktionieren, da beim editieren ein Editor vom Typ TInplaceEdit erzeugt, welcher von TCustomMaskEdit abgeleitet ist. An diesen kommst du aber so ohne weiteres nicht ran. Du mußt eine Componente von TStringGrid ableiten und die Methode CreateEditor überschreiben.
z.B.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| TMyStringGrid = class(TStringGrid) private protected function CreateEditor: TInplaceEdit; override;
public end;
....
function TMyStringGrid.CreateEditor: TInplaceEdit; begin Result := inherited CreateEditor; TEdit(Result).Color := clRed; end; |
Einsatzbeispiel
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| private MyStringGrid : TMyStringGrid;
....
procedure TForm1.FormCreate(Sender: TObject); begin MyStringGrid := TMyStringGrid.Create(Self); MyStringGrid.Left := 488; MyStringGrid.Top := 560; MyStringGrid.Parent := Self; MyStringGrid.OnDrawCell := StringGrid1DrawCell; MyStringGrid.Options := MyStringGrid.Options + [goEditing]; end; |
KASI
Terra23 - Do 28.08.03 20:43
Danke. Ggf. werde ich das mal probieren. Ich habe mich jetzt erstmal anders bemüht und einen ganz anderen Weg genommen als über das Färben. :-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!