AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringGrid Zellenfärben mit 3D-Effekt

Ein Thema von Stecky2000 · begonnen am 9. Aug 2008 · letzter Beitrag vom 10. Aug 2008
Antwort Antwort
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#1

StringGrid Zellenfärben mit 3D-Effekt

  Alt 9. Aug 2008, 20:39
Hallo Ihr Buben,

ich hoffe der Beitrag erscheint jetzt nicht zweimal.
Wenn doch, bitte einen löschen.

Also, ich möchte in einem StringGrid Zellen einfärben, eigentlich ganze Zeilen, ist auch egal.
Geht alles mit Ownerdraw, schon gemacht.

Das Problem ist, sie sollen nicht nur die Farbe der Spalten- bzw. Reihenköpfe haben, sondern auch deren 3D-Effekt.

Also quasi Zeilenköpfe mitten im StringGrid.
Hat da jemand einen Tipp?
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#2

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 9. Aug 2008, 20:42
Hallo

Wenn du die Eigenschaft FixedRows änderst, werden weitere Zeilen auch wie der Kopf angezeigt.
Oder möchtest du nur einzelne Zeilen in 3D darstellen?
Thomas
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#3

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 9. Aug 2008, 20:44
Ja, genau, ich möchte z.B. jede vierte Zeile so darstellen.

ich wollte halt nicht 5 StringGrids mit Spaltenkopf (fixedRow) untereinander setzen sondern alles in einem.

Ich habe in der Delphi Hilfe was gelesen, dass bei FixedCols/FixedRows die Eigenschaft CTL3D auf True gesetzt wird, eben für die Zeile/Spalte 0,
nur finde ich nicht raus, wie ich das für eine andere beliebige Zeile/Spalte mache.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 9. Aug 2008, 22:04
Hallo,

Fixed kann man nur in den ersten Spalten bzw. Zeilen setzen, also da bleibt Dir nichts anderes übrig als selber zu zeichnen in OnDrawCell.

Der folgende Code zeichnet einen 3D-Effekt über zwei Zellen in Spalte 2 + 3 in der 2-ten Zeile:
Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var aRect : TRect;
begin
  if (ACol in [2,3]) and (ARow = 2) then
    begin
    aRect := Rect;
    if ACol = 2 then
      aRect.Right := aRect.Right + StringGrid1.ColWidths[3]
      else
        aRect.Left := aRect.Left - StringGrid1.ColWidths[2];
    DrawFrameControl(StringGrid1.Canvas.Handle,aRect,DFC_BUTTON,DFCS_BUTTONPUSH);
    end;
end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#5

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 9. Aug 2008, 22:53
Super, das funktioniert.

Vielen Dank erstmal. Hab schon alles durchgegoogelt was geht, finde nirgens was.

Es sieht zwar nicht ganz so aus, wie die FixedCols/Rows, aber es geht.
Bei den "echten" FixedRows/Cols sind die Zwischenlinien schwarz, statt grau.

Lässt sich das auch noch rein bringen?


Ich will nicht unverschämt sein muss aber fragen weil weder die Begriffe:

- DrawFrameControl
- DFC_BUTTON
- DFCS_BUTTONPUSH

in meiner Delphi 5 Hilfe zu finden sind!!!


EDIT: Sorry, hab gefunden, es handelt sich um eine Windows API Funktion, die ist in der Delphi Hilfe nicht drin und es geht wohl auch nicht besser.
Deshalb nochmal, Danke!
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 10. Aug 2008, 00:19
Hallo,

versuch das mal:
Delphi-Quellcode:
if (ACol in [2,3]) and (ARow = 2) then
    begin
    aRect := Rect;
    if ACol = 2 then
      aRect.Right := aRect.Right + StringGrid1.ColWidths[3]
      else
        aRect.Left := aRect.Left - StringGrid1.ColWidths[2];
    //DrawFrameControl(StringGrid1.Canvas.Handle,aRect,DFC_BUTTON,DFCS_BUTTONPUSH);
    StringGrid1.Canvas.Brush.Color := StringGrid1.FixedColor;
    StringGrid1.Canvas.FillRect(aRect);
    DrawEdge(StringGrid1.Canvas.Handle,aRect,BDR_RAISEDINNER,BF_RECT);
    StringGrid1.Canvas.Brush.Color := clBlack;
    aRect.Right := aRect.Right+1;
    aRect.Bottom := aRect.Bottom+1;
    aRect.Top := aRect.Top-1;
    aRect.Left := aRect.Left-1;
    StringGrid1.Canvas.FrameRect(aRect);
    end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#7

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 10. Aug 2008, 06:14
Hallo,

Ich habe den Code noch etwas angepasst.
So wird nun jede 4. Zeile eine "Fixed Row".

Evtl sind weitere Optimierungen nötig.

Siehe Anhang für Resultat.

Delphi-Quellcode:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  TempRect: TRect;
begin
  if (ARow mod 4 = 0) then
    with TStringGrid(Sender) do
    begin
      TempRect := Rect;
      DrawFrameControl(Canvas.Handle, TempRect, DFC_BUTTON, DFCS_BUTTONPUSH);
      Canvas.Brush.Color := FixedColor;
      Canvas.FillRect(TempRect);
      DrawEdge(Canvas.Handle, TempRect, BDR_RAISEDINNER, BF_RECT);
      Canvas.Brush.Color := clBlack;

      with TempRect do
      begin
        if ACol = ColCount - 1 then
          Right := Right
        else
          Right := Right + 1;
        Bottom := Bottom + 1;
        Top := Top - 1;
        Left := Left - 1;
        Canvas.FrameRect(TempRect);
      end;
    end;
end;
Miniaturansicht angehängter Grafiken
4thcolfixed_125.jpg  
Thomas
  Mit Zitat antworten Zitat
Stecky2000

Registriert seit: 7. Mai 2008
Ort: Trebur
66 Beiträge
 
Delphi 2010 Professional
 
#8

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 10. Aug 2008, 08:21
Hey, einen schönen guten morgen Euch allen!

Mann Ihr seid ja der absolute Hammer! Manche scheinen sogar Gedanken lesen zu können.

Wenn ich den Code richtig verstehe ist die Erweiterung grundsätzlich im DrawEdge zu finden.
Genau das habe ich gestern gesucht aber nicht gefunden.

Ich habe da ein paar Probleme, dass ich z. T. die Delphi-Hilfe nicht nutzen kann.
Hab einen neuen PC mit Vista, hab zwar den Winhlp-patch, aber der behebt das Problem auch nicht 100%.

Wie auch immer, vielen Dank.
Ihr habt ja schon fast den fertigen code geliefert, das hab ich nicht erwartet, hilft mir aber die Zusammensetzung und Funktion zu verstehen.

Ich werde jetzt den kram einbauen und eine meine Funktionalität anpassen.

Ich danke Euch nochmals sehr.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#9

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 10. Aug 2008, 09:36
Hallo,

@toms: gibt es einen Grund vor DrawEdge und FillRect (übermalt doch alles mit FixedColor) noch DrawFrameControl einzusetzen?
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: StringGrid Zellenfärben mit 3D-Effekt

  Alt 10. Aug 2008, 16:29
Zitat von Lannes:
Hallo,

@toms: gibt es einen Grund vor DrawEdge und FillRect (übermalt doch alles mit FixedColor) noch DrawFrameControl einzusetzen?
DrawFrameControl() kann weggelassen werden.
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz