Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Pen reagiert nicht auf Farbe (https://www.delphipraxis.net/207647-pen-reagiert-nicht-auf-farbe.html)

Delbor 18. Apr 2021 15:44

Pen reagiert nicht auf Farbe
 
Hi zusammen

Nun arbeite ich daran, meinen Jahreskalender etwas zu verfeinern; das heisst, ich muss das Ding (oder besser: Die 12 Dinger - Grids, die jeweils einen Monat darstellen) selbst zeichnen. Und da zeigt sich schon das erste Problem:
Delphi-Quellcode:
procedure TDayNumberFrame.StrGCalendarMonthFrameDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (gdFixed In State) then
  begin
    StrGCalendarMonthFrame.Canvas.Brush.Color := clred;
    StrGCalendarMonthFrame.Canvas.FillRect(Rect);
    StrGCalendarMonthFrame.Canvas.Pen.Color := clyellow;
    StrGCalendarMonthFrame.Canvas.Pen.Mode := pmCopy;
    StrGCalendarMonthFrame.Canvas.Pen.Style := psSolid;
    StrGCalendarMonthFrame.Canvas.TextOut(Rect.Left+2, Rect.Top+2, StrGCalendarMonthFrame.Cells[ACol, ARow]);
  end;
end;
Das zeichnet mir die fixierten Zeilen und Spalten, die Stiftfarbe ist abernach wie vor schwarz. Was mache ich falsch'

Gruss
Delbor

brechi 18. Apr 2021 16:25

AW: Pen reagiert nicht auf Farbe
 
Font.Color

Delbor 18. Apr 2021 16:41

AW: Pen reagiert nicht auf Farbe
 
Hi zusammen
Doch, wer lesen kann(auch die Hilfe), ist klar im Vorteil. Hab ich zuerst gedacht. War aber falsch, auch wenns sich zum ersten logisch anhört.
Delphi-Quellcode:
procedure TDayNumberFrame.StrGCalendarMonthFrameDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (gdFixed In State) then
  begin
    StrGCalendarMonthFrame.Canvas.Brush.Color := clred;
    StrGCalendarMonthFrame.Canvas.FillRect(Rect);
//    StrGCalendarMonthFrame.Font.Charset := DEFAULT_CHARSET;
    StrGCalendarMonthFrame.Font.Color := clYellow;
    StrGCalendarMonthFrame.Font.Style := [fsBold];
    StrGCalendarMonthFrame.Font.Size := 10;

    StrGCalendarMonthFrame.Canvas.TextOut(Rect.Left+2, Rect.Top+2, StrGCalendarMonthFrame.Cells[ACol, ARow]);
  end;
end;
Erstmal erfolgte die Textausgabe wie gehabt. Dann fügte ich die auskommentierte Zeile ein und bekam die gelbe Textausgabe - die blieb auch, nachdem ich die Zeile auskommentiert hatte und die erzeugten DCUs gelöschte hatte. Wobei nun die Textausgaben im ganzen grid erfolgten, was eben nicht sein sollte (Die ist anders).

Vielen Dank für deine Bemühungen, by brechi.

Gruss
Delbor

Delbor 18. Apr 2021 21:10

AW: Pen reagiert nicht auf Farbe
 
Hi zusammen

Und wie so oft sitzt der Fehler vor dem Blidschirm...

Natürlich muss es so sein:
Delphi-Quellcode:
procedure TDayNumberFrame.StrGCalendarMonthFrameDrawCell(Sender: TObject; ACol,
  ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  if (ARow=0) or (ACol=0) then
  begin
    StrGCalendarMonthFrame.Canvas.Brush.Color := clred;
    StrGCalendarMonthFrame.Canvas.FillRect(Rect);
    StrGCalendarMonthFrame.Canvas.Font.Charset := DEFAULT_CHARSET;
//    StrGCalendarMonthFrame.Font.Name := 'Times New Roman';
//    StrGCalendarMonthFrame.Font.Color := clYellow;
//    StrGCalendarMonthFrame.Font.Style := [fsBold];
//    StrGCalendarMonthFrame.Font.Size := 10;
    StrGCalendarMonthFrame.Canvas.Font.Name := 'Times New Roman';
    StrGCalendarMonthFrame.Canvas.Font.Color := clYellow;
    StrGCalendarMonthFrame.Canvas.Font.Size := 10;
    StrGCalendarMonthFrame.Canvas.Font.Style := [fsBold];
    StrGCalendarMonthFrame.Canvas.TextOut(Rect.Left+4, Rect.Top+2, StrGCalendarMonthFrame.Cells[ACol, ARow]);
  end;
end;
Auskommentiert sind die Zeilen, die sich in dieser falschen Form im letzten Codeschnipsel eingeschlichen haben...
Ausserdem muss DefaultDrawing False sein.

Gruss
Delbor

jziersch 19. Apr 2021 09:36

AW: Pen reagiert nicht auf Farbe
 
In hartnäckigen Fällen hilft auch

SetTextColor(Handle, ColorToRGB(aTextCol));

SetBKColor(Handle, ColorToRGB(aBackgroundcol));

Handle : HDC kommt von Canvas.Handle.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:23 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