![]() |
StringGrid DrawCell Werte sind unsichtbar
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
Auf meiner Form habe ich ein TStringGrid und ein TListView. Bei der Auswahl eines ListView Items werden im Stringgrid gewisse Zellen farbig hinterlegt. Das funktioniert auch soweit. Klickt man jedoch zwischendurch auf das StringGrid und wählt anschließend wieder ein ListView Item aus, so kommt es zu Darstellungsfehlern, die sich in erster Linie dadurch bemerkbar machen, das in den Zellen des StringGrids keine Werte mehr angezeigt werden. Ich würde mich freuen, wenn jemand den Fehler findet bzw. mir sagen kann was ich evetuell nicht beachtet habe. Hier Auszüge meines Quelltextes:
Delphi-Quellcode:
Mfg Peter
{TStringGrid}
procedure TForm1.StundenplanDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState); var s: string; begin with Sender as TStringGrid do begin if FrList1.Liste.ItemIndex>-1 then begin if Cells[ACol,ARow]= FrList1.Liste.Selected.Caption then begin Canvas.Pen.Color:= clwhite; Canvas.Brush.Color:= clHighlight; Canvas.FillRect(Rect); end else begin if (ACol=0) or (ARow=0) then begin Canvas.Pen.Color:=clblack; Canvas.Brush.Color:= StundenPlan.FixedColor; end else begin Canvas.Pen.Color:=clwhite; Canvas.Brush.Color:= clwhite; Canvas.FillRect(Rect); end; end; end else begin if (ACol=0) or (ARow=0) then begin Canvas.Pen.Color:=clblack; Canvas.Brush.Color:= StundenPlan.FixedColor; end else begin if (state= [gdSelected]) then Canvas.Brush.Color:= clHighlight else Canvas.Brush.Color:= clwhite; Canvas.Pen.Color:=clwhite; Canvas.FillRect(Rect); end; end; Font.Color:= clBlack; s:= Cells[ACol,ARow]; DrawText(Canvas.Handle,PChar(s),length(s),Rect,DT_Left); end; end; procedure TForm1.StundenplanSelectCell(Sender: TObject; ACol,ARow: Integer; var CanSelect: Boolean); var Rect: TGridRect; begin FrList1.Liste.ItemIndex:= -1; end; {TListView} procedure TForm1.FrList1ListeSelectItem(Sender: TObject; Item: TListItem; Selected: Boolean); var i,j: integer; begin //Alle Stunden dieses Faches markieren for i:= 1 to 5 do for j:= 1 to 11 do StundenplanDrawCell(Stundenplan,i,j,StundenPlan.CellRect(i,j),[]); end; |
AW: StringGrid DrawCell Werte sind unsichtbar
Du musst die Färbung im entsprechenden Event durchführen
|
AW: StringGrid DrawCell Werte sind unsichtbar
Hallo,
rufe in FrList1ListeSelectItem Grid.Invalidate auf, um es zum Neuzeichnen zu zwingen. Das if Cells[ACol,ARow]= FrList1.Liste.Selected.Caption kann übrigens nach hinten losgehen, wenn es mehrere gleiche Fächer im Grid gibt. Ich würde mit Grid.Cells[].Objects arbeiten. Heiko |
AW: StringGrid DrawCell Werte sind unsichtbar
Liste der Anhänge anzeigen (Anzahl: 1)
Danke!
Das mit Invalidate funktioniert. Die Dinge können so einfach sein, nun gut. Aber jetzt ist ein älteres Problem wieder aufgetaucht. :pale: Das zurzeit ausgewählte StringGrid Cell wird jetzt ohne Text angezeigt (s. Anhang -> Mittwoch 2.Stunde). Ich verstehe nicht wie das passieren kann, da ja das gesamte Stringgrid neu gezeichnet wird, sonst kommt es ja auch nicht zu Problemen. Und das ist mir irgendwie nicht ganz klar Zitat:
|
AW: StringGrid DrawCell Werte sind unsichtbar
Setze mal die Fontcolor statt clBlack auf $010101, dann invertiert Windows die Textfarbe der selektierten Zelle nicht mehr.
|
AW: StringGrid DrawCell Werte sind unsichtbar
Mmmh,
Danke Bummi aber Font.Color auf $010101 zu setzen hat leider nichts geändert. Ich habs jetzt über einen Umweg gelöst, indem ich eine der farblich hinterlegten Zellen als Selection festgelegt habe. Aber ich würde schon gerne den direkten Weg kennen lernen. |
AW: StringGrid DrawCell Werte sind unsichtbar
Endlich!! :-D
Ich suche jetzt in DrawCell nach der selektierten Zelle und weise ihr die Hintergrundfarbe zu. Außerdem setzte ich Font.Color bereits beim Übermalen der Zelle dadurch bleibt die Farbe auch wie sie sein soll. Anscheinend muss man die Farbe schon früher setzen, damit sie korrekt ist. Hier mein Code.
Delphi-Quellcode:
Vielen Dank nochmal an euch alle.
procedure TForm1.StundenplanDrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
var s: string; begin with Sender as TStringGrid do begin if FrList1.Liste.ItemIndex>-1 then begin if Cells[ACol,ARow]= FrList1.Liste.Selected.Caption then begin Canvas.Pen.Color:= clwhite; Canvas.Brush.Color:= clHighlight; Canvas.FillRect(Rect); end else begin if (ACol=0) or (ARow=0) then begin Canvas.Pen.Color:=clblack; Canvas.Brush.Color:= StundenPlan.FixedColor; end else begin if (state= [gdSelected]) or ((ACol=Selection.Left) and (ARow=Selection.Top)) then begin Canvas.Brush.Color:= clwhite; end else Canvas.Pen.Color:=clwhite; Canvas.Font.Color:= clBlack; //Schriftfarbe auch für die Selektierte Zelle Canvas.FillRect(Rect); end; end; end else begin if (ACol=0) or (ARow=0) then begin Canvas.Pen.Color:=clblack; Canvas.Brush.Color:= StundenPlan.FixedColor; end else begin if (state= [gdSelected]) or ((ACol=Selection.Left) and (ARow=Selection.Top)) then Canvas.Brush.Color:= clHighlight else Canvas.Brush.Color:= clwhite; Canvas.Pen.Color:=clwhite; Canvas.FillRect(Rect); end; end; Font.Color:= $010101; //--> Diese Farbe wird nicht für die selektierte Zelle verwendet s:= Cells[ACol,ARow]; DrawText(Canvas.Handle,PChar(s),length(s),Rect,DT_Left); end; end; Mfg Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 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