![]() |
AW: Eigener Kalender bauen
Zitat:
|
AW: Eigener Kalender bauen
Ein StrToLabel kann man sich doch selber bauen:
Wenn es für die Komponenten auf dem Formular eine Namenskonvention gibt, dann kann man sich doch, ausgehend vom Datum, per FindComponent das passende Label suchen: Einfachste Methode wäre, die Labels mit 'nem Namen versehen, der im Datum vorkommt. Z. B.
Delphi-Quellcode:
Damit haben wir Komponentennamen, die man automatisch "zusammenbauen" kann und somit per FindComponent suchen kann.
lbMonat0101 : TLabel;
lbMonat0102 : TLabel; ... lbMonat1231 : TLabel; ... lbTag0101 : TLabel; lbTag0102 : TLabel; ... lbTag1231 : TLabel; Ist jetzt mal nur so ungetestet hingedaddelt:
Delphi-Quellcode:
procedure ProcessOneDay(ADate: TDate);
var sWoTag : String; lbDate : TLabel; lbDay : TLabel; lbFeld : TLabel; lbCount : TLabel; begin lbDate := FindComponent(Format('lbMonat%s%s',[Copy(DateToStr(ADate),4,2),Copy(DateToStr(ADate),1,2)])); if not Assigned(lbDate then Exit; // oder 'ne Fehlermeldung lbDay := FindComponent(Format('lbTag%s%s',[Copy(DateToStr(ADate),4,2),Copy(DateToStr(ADate),1,2)])); if not Assigned(lbDay then Exit; // oder 'ne Fehlermeldung lbFeld := FindComponent(Format('lbFeld%s%s',[Copy(DateToStr(ADate),4,2),Copy(DateToStr(ADate),1,2)])); if not Assigned(lbFeld then Exit; // oder 'ne Fehlermeldung lbCount := FindComponent(Format('lbCount%s%s',[Copy(DateToStr(ADate),4,2),Copy(DateToStr(ADate),1,2)])); if not Assigned(lbCount then Exit; // oder 'ne Fehlermeldung Case DayOfWeek(ADate) of 1 : sWoTag := 'Mo'; 2 : sWoTag := 'Di'; 3 : sWoTag := 'Mi'; 4 : sWoTag := 'Do'; 5 : sWoTag := 'Fr'; 6 : begin sWoTag := 'Sa'; lbDate.Font.Style := [fsBold]; lbDay.Font.Style := [fsBold]; lbFeld.Color := clWebBISQUE end; 7 : begin sWoTag := 'So'; lbDate.Font.Style := [fsBold]; lbDay.Font.Style := [fsBold]; lbFeld.Color := clWebBISQUE end; end; if (EmptyStr <> Feiertage.IstFeiertag(ADate)) then begin lbDate.Font.Style := [fsBold]; lbDay.Font.Style := [fsBold]; lbFeld.Color := clWebBISQUE; lbDate.Font.Color := clRed; lbDay.Font.Color := clRed; lbCount.Left := 50; lbCount.Width := 55; lbCount.Alignment := taLeftJustify; lbCount.Font.Color := clRed; lbCount.Font.Size := 7; lbCount.Top := 1; lbCount.Caption := Feiertage.IstFeiertag(ADate); end; if Feiertage.IstFerientag(ADate) then begin lbFeld.Color := clYellow; end; end; var i : Integer; begin For i := Trunc(StrToDate('01.01.2016')) to Trunc(StrToDate('31.12.2016')) do begin ProcessOneDay(i); end; // oder ab heute für 365 Tage For i := Trunc(Now) to Trunc(Now + 365) do begin ProcessOneDay(i); end; end; |
AW: Eigener Kalender bauen
Delphi-Quellcode:
function StrToLabel(sName : String) : TLabel;
var myCompo : TComponent; begin Result := Nil; myCompo := FindComponent(Format('lb%s',[sName])); // oder welche Namenskonvention auch immer. if Assigned(myCompo) then begin if myCompo is tLabel then Result := myCompo; end; end; |
AW: Eigener Kalender bauen
Hab' gerade nochmal ein bisserl rumgesucht und noch was gefunden, was für die bisherige Namensvergabe der Komponenten passen könnte:
Delphi-Quellcode:
procedure ProcessOneDay(ADate: TDate);
var fFormatSettings : TFormatSettings; sName : String; lbDate : TLabel; lbDay : TLabel; lbFeld : TLabel; lbCount : TLabel; begin GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT,fFormatSettings); sName := FormatDateTime('mmmd',ADate,fFormatSettings); lbDate := FindComponent(sName); if not Assigned(lbDate) then Exit; // oder 'ne Fehlermeldung lbDay := FindComponent(Format('%sTag',[sName])); if not Assigned(lbDay) then Exit; // oder 'ne Fehlermeldung lbFeld := FindComponent(Format('Feld%s',[sName])); if not Assigned(lbFeld) then Exit; // oder 'ne Fehlermeldung lbCount := FindComponent(Format('%sAnzahl',[sName])); if not Assigned(lbCount) then Exit; // oder 'ne Fehlermeldung Case DayOfWeek(ADate) of 6,7 : begin lbDate.Font.Style := [fsBold]; lbDay.Font.Style := [fsBold]; lbFeld.Color := clWebBISQUE end; end; if (EmptyStr <> Feiertage.IstFeiertag(ADate)) then begin lbDate.Font.Style := [fsBold]; lbDay.Font.Style := [fsBold]; lbFeld.Color := clWebBISQUE; lbDate.Font.Color := clRed; lbDay.Font.Color := clRed; lbCount.Left := 50; lbCount.Width := 55; lbCount.Alignment := taLeftJustify; lbCount.Font.Color := clRed; lbCount.Font.Size := 7; lbCount.Top := 1; lbCount.Caption := Feiertage.IstFeiertag(ADate); end; if Feiertage.IstFerientag(ADate) then begin lbFeld.Color := clYellow; end; end; var i : Integer; begin For i := Trunc(StrToDate('01.01.2016')) to Trunc(StrToDate('31.12.2016')) do begin ProcessOneDay(i); end; // oder ab heute für 365 Tage For i := Trunc(Now) to Trunc(Now + 365) do begin ProcessOneDay(i); end; end; |
AW: Eigener Kabender bauen
Zitat:
für deine Frage hätte ich diese Antwort unten ... aber Du könntest Dir auch mal überlegen, Kompenenten selbst abzuleiten. Ein TDatumsLabel, ein TTagesLabel, ein TKalenderTagesPanel und so weiter. Die bekommen ein zusätzliches Property 'Date' und wenn man ein Datum zuweist, dann richten sie sich selbst darauf ein. Dein TKalender bestünde dann aus TKalenderTagesPanels und der Code wäre etwas übersichtlicher ;-)
Delphi-Quellcode:
var
liDateCounter: integer; lsDateString: string; for liDateCounter := 1 to 365 do begin Datum := MachEinSinnvollesDatum(liDateCounter); Wochentag := GibMirDenWochenTag(Datum); lsDateString := FormatDateTime('mmmd', Datum); ProcessOneDay( Datum , Wochentag , TLabel(FindComponent(lsDateString)) , TLabel(FindComponent(lsDateString + 'Tag')) , TLabel(FindComponent(lsDateString + 'Anzahl')) , TPanel(FindComponent('Feld' + lsDateString)) ); end; ) |
AW: Eigener Kabender bauen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Hallo, Danke für Deine Hilfe und auch für die Hilfe der Anderen hier. Das ganze hat micht ein ganzes Stück weitergebracht. Ich möchte ja auf einen Webseite mittels Intraweb ein Kalender darstellen. Hier soll an jeden Tag die Hindergrundfarbe gerändert werden können, des weiterne die Schrift (fett oder normal) und der Wochentag soll dargestellt werden. Ganz rechts soll dan ein Zahl stehen. Hierzu habe ich eine IWRegion benutzen und dann für jeden Tag eine eigene IWRegion um den Tag einzufärben. Links den Tag (IWLabel) und dann den Wochentag (IWLabel). Rechts dann eine frei Wählbare Anzahl (IWLabel). Geht so etwas wirklich als einen eigen Komponenten ? Ich würde dann eine Kalenderkomponenten in die Form ziehen und könnte dann den kompletten Kalender einstellen ? Ich haben so etwas noch niemals gemacht. Gibt es so etwas wie Komponenten ableitein für Blondienen und Dupfbacken ? :-D Ich habe mal ein Bild von dem was ich habe hier eingehängt dort sind die ersten 5 Monate schon erleigt. Wie gesagt das ganze geht schon mal nicht schlecht nur mal möchte ich gerne noch etwas datzuleren wenn es geht. Nochmals Danke an alle welceh mir hier weitergeholfen haben. Tanja |
AW: Eigener Kalender bauen
Das sieht sehr gut aus!
Für die Komponentenentwicklung gibt es zuhauf Tutorials im Netz, wenn nicht sogar hier irgendwo im Forum. Mit den IW-Kompos habe ich keine Erfahrung, inwieweit man bei denen auf spezielle Dinge achten muß, vllt findet sich dazu ein Kollege hier ;-) In der VCL hätte ich mir den Kalender ungefähr (sehr unvollständig) so gedacht:
Delphi-Quellcode:
HTH CmL
interface
uses ... type TMyLabel = class(TLabel) private FDate: TDate; procedure SetDate(AValue: TDate); // beim Ändern des Datums wird auch die Caption angepaßt published property Date: TDate read FDate read SetDate; end; TMyDayPanel = class(TPanel) private FDate : TDate; FDateLabel : TMyLabel; FDayLabel : TMyLabel; FCountLabel: TMyLabel; procedure SetDate(AValue: TDate); // schreibt das Datum auch in die Labels public constructor Create(AOwner: TComponent); // erzeugt auch die Labels published property Date : TDate read FDate read SetDate; property DateLabel : TMyLabel read FDateLabel; property DayLabel : TMyLabel read FDayLabel; property CountLabel: TMyLabel read FCountLabel; end; TMyDayArray = array[1..365] of TMyDayPanel; // Panels müssen erzeugt/freigegeben werden werden ... oder ... TMyDayList = TList<TMyDayPanel>; TMyCalendar = class(TPanel) private FDays: TMyDayArray; ... etc ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:51 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz