Registriert seit: 12. Nov 2006
8 Beiträge
Delphi 7 Professional
|
TStringGrid - Zellen nicht färben
20. Aug 2008, 10:18
Hallo,
ich habe ein Stringgrid und möchte nun bestimmte Zellen gar nicht anzeigen, die komplette Breite des Grids soll allerdings erhalten bleiben.
An sich dachte ich, ich könnte das DrawCell-Ereignis für diese Zellen einfach per if dazu bringen, nicht auszuführen, aber das funktionierte nicht wirklich.
Wie kann ich das Grid dazu bringen, einige Zellen einfach auszublenden, auch wenn die Gesamtbreite des Grids unverändert bleibt und auch die Zellen dahinter an genau der Position sind, an der sie auch wären, wenn die Zellen davor angezeigt würden?
Danke schon einmal im Voraus!
Inhalt der DrawCell-Methode (durch die zweite Zeile wollte ich das Zeichnen der Zelle verhindern):
Delphi-Quellcode:
invcols := Explode(';', InvisibleCols);
if SearchInDynArray(IntToStr(ACol), invcols) = -1 then
begin
if assigned(onDrawCell) then
onDrawCell(self, aCol, ARow, Rect, State);
inherited DrawCell(ACol, Arow, Rect, State);
if RightAlignCols <> '' then
begin
right := Explode(';', RightAlignCols);
end;
hrowcolor := HTML2Color(SecondRowsHTMLColor);
if gdFocused in State then
begin
selRow := ARow;
selCol := ACol;
end;
if (ARow = 0) and (ACol = lastsortcol) then //Dreiecke zeichnen
begin
with Self do
begin
if FProps.ShowAscendingSymbol = true then
begin
if ascending = false then
begin
Canvas.Brush.Color := ascsymbolcolor; //$00AB8552;
Canvas.Polygon([Point(Rect.Right-20,Rect.Top+2), // Pfeil nach unten
Point(Rect.Right-2,Rect.Top+2),
Point(Rect.Right-11,Rect.Top+12)]);
end
else if ascending = true then
begin
Canvas.Brush.Color := ascsymbolcolor; //$00AB8552;
Canvas.Polygon([Point(Rect.Right-11,Rect.Top+7), // Pfeil nach oben
Point(Rect.Right-20,Rect.Top+17),
Point(Rect.Right-2,Rect.Top+17)]);
end;
end;
end;
end;
if self.FixedCols > 0 then
temp := 0
else
temp := -1;
if (ARow < self.FixedRows) or (ARow = fboldrow) then
if FProps.BoldFixedCaptions = true then
begin
fonttemp := Canvas.Font;
Canvas.Font.Style := [fsBold];
Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, self.Cells[ACol, ARow]); //Dann Text in der Zelle ausgeben
canvas.Font := fonttemp;
end;
if (ACol > temp) and (ARow > 0) then
begin
with self do
begin
s := cells[ACol, ARow];
if ((ARow mod 2) = 0) then //jede zweite Zeile berücksichtigen
begin
if (not (gdSelected in State)) and (FProps.CustomColorForSecondRows = true) then
begin
Canvas.Brush.Color := hrowcolor; //Farbe die jede zweite Zeile bekommen soll.
Canvas.FillRect(Rect);
end;
end;
if ((not (goRowSelect in Options)) and (gdFocused in State)) then //Wenn RowSelect = False die aktive Zelle blau färben
begin
Canvas.Brush.Color := selcellcolor; //Farbe der selektierten Zelle wenn RowSelect = False;
Canvas.FillRect(Rect);
end;
//Zeilenumbruch
if FProps.WordWrap = true then
begin
If Length(S) > 0 Then
Begin
drawrect := rect;
drawrect.Left := drawrect.left + 2;
drawrect.top := drawrect.top + 1;
DrawText(canvas.handle,
Pchar(S), Length(S), drawrect,
dt_calcrect or dt_wordbreak or dt_left );
If (drawrect.bottom - drawrect.top) >
RowHeights[Arow]
Then
RowHeights[Arow] :=
(drawrect.bottom - drawrect.top)
Else
Begin
drawrect.Right := rect.right;
canvas.fillrect( drawrect );
if SearchInDynArray(IntToStr(ACol), right) = -1 then
DrawText(canvas.handle,
Pchar(S), Length(S), drawrect,
dt_wordbreak or dt_left)
else
Display(self, self.Cells[ACol, ARow], taRightJustify);
End;
End;
end //Zeilenumbruch Ende
else
begin
if SearchInDynArray(IntToStr(ACol), right) = -1 then
Canvas.TextOut(Rect.Left + 2, Rect.Top + 1, self.Cells[ACol, ARow]) //Text ohne Zeilenumbruch ausgeben
else
Display(self, self.Cells[ACol, ARow], taRightJustify); //Text mit Align Right ausgeben
end;
end; //with
end;
end;
|