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:
{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;
Mfg Peter