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 Simons SRCalendar Termine mit 2 verschiedene Farben darstellen (https://www.delphipraxis.net/167058-simons-srcalendar-termine-mit-2-verschiedene-farben-darstellen.html)

Coffeecoder 11. Mär 2012 17:16


Simons SRCalendar Termine mit 2 verschiedene Farben darstellen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hi Leute,

Ich benutze den SRCalendar von der Simon Komponente.

Mein Problem:
Ich klicke auf einen Tag dann soll auch der Tag mit einer Farbe markiert werden. Klappt soweit.
Ich klicke auf einen Tag, wird markiert und soll einen weiteren Tag (im Abstand von 3 Tagen) auch markiert werden. Klappt soweit. ( siehe Screenshot 1)
Was ich aber erreichen will ist folgendes: Dieser Tag soll mit einer anderen Farbe markiert werden als auf den ich geklickt habe. (siehe Screenshot 2 - mit Paint modifiziert ;) )
Das habe ich als Code:
Delphi-Quellcode:
procedure TForm1.srcalDblClick(Sender: TObject);
begin
        srcal.BackgroundColors.Marked := clAqua;
        srcal.Marked[srcal.day] := not srcal.Marked[srcal.Day];
        srcal.BackgroundColors.Marked := clGreen;
        srcal.Marked[srcal.Day+3] := not srcal.Marked[srcal.Day+3];
end;
Meine Frage:
Wo liegt mein Fehler? Farben werden entsprechend angepasst.
Ist die Komponente nicht in der Lage das zu tun?
Hat jemand von euch dieses Problem anders gelöst? Mit einer anderen Komponente?

Ich danke 8-)

[Add] Folgendes habe ich ebenfalls grad getestet:
Delphi-Quellcode:
procedure TForm1.srcalDblClick(Sender: TObject);
begin
        srcal.BackgroundColors.Marked := clAqua;
        srcal.Marked[srcal.day] := not srcal.Marked[srcal.Day];
        test := srcal.day;

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
        srcal.BackgroundColors.Marked := clGreen;
        srcal.Marked[test+3] := not srcal.Marked[test+3];
end;
Ok. Die Variable "test" ist global *hust*.
Es scheint an der Komponente zu liegen und kann nur mit einer Farbe als Markierung klar kommen. :(
Er zeichnet den Tag "clAqua" und dann im Button "übermalt" er mit der aktuellen Markierungsfarbe alle markierten Tage.

Hat jemand von euch eine kostenlose Komponente anzubieten die sowas auch kann? Danke euch

DeddyH 11. Mär 2012 17:25

AW: Simons SRCalendar Termine mit 2 verschiedene Farben darstellen
 
Zitat:

Delphi-Quellcode:
procedure TSRCalendar.SetMarked(Index: integer; const newValue: boolean);
begin
  FMarked[Index]:=newValue;
  Invalidate;
end;

Da dürfte der Hase im Pfeffer liegen. Ich habe den Code jetzt nicht in Gänze durchgeschaut, aber durch das Invalidate wird für jede Zelle das DrawCell durchlaufen und dort wohl die aktuell gesetzte Farbe ausgewertet und gezeichnet. Du wirst Dir die Komponente also selbst erweitern müssen.

Coffeecoder 11. Mär 2012 17:27

AW: Simons SRCalendar Termine mit 2 verschiedene Farben darstellen
 
Zitat:

Zitat von DeddyH (Beitrag 1156053)
Du wirst Dir die Komponente also selbst erweitern müssen.

Danke DeddyH, das habe ich mir schon gedacht.

Bummi 11. Mär 2012 18:06

AW: Simons SRCalendar Termine mit 2 verschiedene Farben darstellen
 
am schnellsten wird es gehen aus der Property Marked statt eines Boolean ein TColor zu verwenden und OnDrawCell anzupassen;

TMarked = array [1..31] of TColor;

DeddyH 11. Mär 2012 18:09

AW: Simons SRCalendar Termine mit 2 verschiedene Farben darstellen
 
Und damit dann Logik und Darstellung vermischen? Ich würde mir eher die Mühe machen, ein oder zwei Properies hinzuzufügen und im DrawCell auszuwerten.

Coffeecoder 12. Mär 2012 07:14

AW: Simons SRCalendar Termine mit 2 verschiedene Farben darstellen
 
Ich werde es dann folgendermasse tun:
Ich nehm die Klasse SRCal, erweitere die Klasse mit einem weiteren Property "SecondMarked" oder so und dann erweitere ich die Methode OnDraw mit dem Malen mit einer weiteren Farbe.
So müsste es dann klappen.
Dies werde ich aber erst am kommenden Wochenende testen können. Bis dahin danke euch ;)


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