Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringGrid -> Eine Zelle zweifarbig, oder halbfarbig ? (https://www.delphipraxis.net/102229-stringgrid-eine-zelle-zweifarbig-oder-halbfarbig.html)

HolgerCW 25. Okt 2007 10:37


StringGrid -> Eine Zelle zweifarbig, oder halbfarbig ?
 
Hallo zusammen,

wie kann ich eine Zelle zweifarbig, oder nur die hälfte andersfarbig machen ?

So mache ich zur Zeit eine ganze Zelle andersfarbig:

Delphi-Quellcode:
Canvas.Brush.Color := clSilver;
Canvas.FillRect(Rect);
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
Gruss

Holger

leddl 25. Okt 2007 10:41

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Zitat:

Zitat von HolgerCW
wie kann ich eine Zelle zweifarbig, oder nur die hälfte andersfarbig machen ?

Na schau dir den Code doch mal an... Du füllst ein Rechteck mit deiner ausgewählten Farbe. Wie kannst du dieses Rechteck denn jetzt wohl mit 2 Farben füllen?

HolgerCW 25. Okt 2007 10:43

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Wenn ich Rect.Left+2 auf z.B. 200 ändere passiert nichts ?

Wo muss ich da ansetzen ?

Gruss

Holger

leddl 25. Okt 2007 10:45

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Zitat:

Zitat von HolgerCW
Wenn ich Rect.Left+2 auf z.B. 200 ändere passiert nichts ?

Was hat denn jetzt die Zeile mit der Textausgabe (TextOut sollte eigentlich selbsterklärend sein...) damit zu tun? Du willst doch die Zellenfarbe ändern, oder? Dann musst du natürlich auch in der entsprechenden Zeile (Canvas.FillRect(Rect); ) ansetzen...

HolgerCW 25. Okt 2007 10:53

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Aber ich kann doch vorher nur eine Farbe angeben, oder ?

So:
Delphi-Quellcode:
Canvas.Brush.Color := clSilver;
Wie gebe ich jetzt zwei Farben an ?

... und was kann man hier denn ändern:
Delphi-Quellcode:
Canvas.FillRect(Rect)
Gruss

Holger

leddl 25. Okt 2007 10:57

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Zitat:

Zitat von HolgerCW
Aber ich kann doch vorher nur eine Farbe angeben, oder ?

Für einen Zeichenvorgang? Jepp, klar.
Zitat:

Zitat von HolgerCW
Wie gebe ich jetzt zwei Farben an ?

Na stell dir mal vor, du malst das ganze auf nem Blatt Papier. ;) Wie malst du da ein 2-farbiges Rechteck? Richtig, du nimmst den roten Stift und malst die eine Hälfte in Rot. Dann legst du den roten Stift weg, nimmst den grünen Stift und malst die zweite Hälfte des Rechtecks in Grün. Und genau das gleiche musst du hier auch machen ;)

shmia 25. Okt 2007 10:58

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Du brauchst eine Procedure zum halbieren eines Rechtecks.
Delphi-Quellcode:
// Rect ist das Eingabe Rechteck
// RectA und RectB sind die Ausgaberechtecke
procedure HalfRectVertical(const Rect:TRect; var RectA, RectB:TRect);
Und hier jetzt die Herausforderung an dich: :hi:
schreibe die procedure HalfRectVertical und HalfRectHorizontal und ab in die Code-Library.

Und später:
Delphi-Quellcode:
HalfRectVertical(Rect, RectA, RectB);
Canvas.Brush.Color := clSilver;
Canvas.FillRect(RectA);
Canvas.Brush.Color := clGreen;
Canvas.FillRect(RectB);
// der Text wird weiterhin auf dem Gesamtrechteck ausgegeben
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);

HolgerCW 25. Okt 2007 11:08

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Danke für die Hilfen,

aber ich glaube Ihr habt mich auf dem Gewissen. Wenn einer wie ich schon so blöde Fragen stellt, wie soll er dann so eine Aufgabe lösen ?

Kann es sein das die procedure erst einmal eine function sein muss wo das Rect rein geht und das Result RectA und RectB ist.

Habe bei diesem Rect echt keinen Ansatz. Hilfe !!!

Gruss

Holger

Hawkeye219 25. Okt 2007 11:10

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Hallo,

eine kleine Ergänzung:

Delphi-Quellcode:
HalfRectVertical(Rect, RectA, RectB);
Canvas.Brush.Color := clSilver;
Canvas.FillRect(RectA);
Canvas.Brush.Color := clGreen;
Canvas.FillRect(RectB);
Canvas.Brush.Style := bsClear; // <--- damit der Text transparent ausgegeben wird
// der Text wird weiterhin auf dem Gesamtrechteck ausgegeben
Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[ACol, ARow]);
Gruß Hawkeye

HolgerCW 25. Okt 2007 11:13

Re: StringGrid -> Eine Zelle zweifarbig, oder halbfarbig
 
Danke,

aber was steckt nun hier für eine Zauberrei dahinter:

Delphi-Quellcode:
HalfRectVertical(Rect, RectA, RectB);
Gruss

Holger


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:37 Uhr.
Seite 1 von 2  1 2      

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