AGB  ·  Datenschutz  ·  Impressum  







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

Eigener Kalender bauen

Ein Thema von Dumpfbacke · begonnen am 2. Sep 2016 · letzter Beitrag vom 6. Sep 2016
Antwort Antwort
Seite 1 von 2  1 2      
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Eigener Kalender bauen

  Alt 2. Sep 2016, 12:53
Hallo Leute,
ich möchte mir einn eigene Kalender Bauen. Diesen möchte ich für jedemn Tag individuell gestellen können.Das ganze läuft unter Intraweb und dort mit IWRegionen und Labels ab. Da ich jeden Tag extra gestallten möchte habe ich mir eine Case abfrage gebaut. Hiermal das Beispiel für den Monat 1 Tag 4 alseo der 04.01.2016. Habe ich eine Möglichkeit es zu vereinfachen ? Ansonsten müsste ich das ganze ja für jeden Tag anlegen. Also 356 mal.

Delphi-Quellcode:
     14: begin
            Jan4.Caption := Wochentag;
            if WochenTag = 'Sathen begin Jan4.Font.Style := [fsBold]; Jan4Tag.Font.Style := [fsBold]; FeldJan4.Color := clWebBeige end;
            if WochenTag = 'Sothen begin Jan4.Font.Style := [fsBold]; Jan4Tag.Font.Style := [fsBold]; FeldJan4.Color := clWebBISQUE end;
            if Feiertage.IstFeiertag(Datum) <> 'then begin
                                                        Jan4.Font.Style := [fsBold]; Jan4Tag.Font.Style := [fsBold]; FeldJan4.Color := clWebBISQUE;
                                                        Jan4.Font.Color := clRed; Jan4Tag.Font.Color := ClRed;
                                                        Jan4Anzahl.Left := 50; Jan4Anzahl.Width := 55; Jan4Anzahl.Alignment := taLeftJustify;
                                                        Jan4Anzahl.Font.Color := clRed; Jan4Anzahl.Font.Size := 7; Jan4Anzahl.Top := 1;
                                                        Jan4Anzahl.Caption := Feiertage.IstFeiertag(Datum);
                                                       end;
            if Feiertage.IstFerientag(Datum) = True then begin
                                                          FeldJan4.Color := clyellow;
                                                         end;
         end;


Danke Tanja
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Eigener Kabender bauen

  Alt 2. Sep 2016, 13:20
Vllt mit einer Prozedur, die alles macht und als Parameter die Anzeigeobjekte bekommt...

Delphi-Quellcode:
procedure ProcessOneDay(ADate: TDate; const AWochenTag: string; var ADateLabel: TLabel; var ADayLabel: TLabel; var ACountLabel: TLabel; var AFeld: TPanel??);
begin
  ADayLabel.Caption := AWochentag;
  if (AWochenTag = 'Sa') or (AWochenTag = 'So') then begin
    ADateLabel.Font.Style := [fsBold];
    ADayLabel.Font.Style := [fsBold];
    AFeld.Color := clWebBISQUE
  end;
  if (EmptyStr <> Feiertage.IstFeiertag(ADate)) then begin
    ADateLabel.Font.Style := [fsBold];
    ADayLabel.Font.Style := [fsBold];
    AFeld.Color := clWebBISQUE;
    ADateLabel.Font.Color := clRed;
    ADayLabel.Font.Color := clRed;
    ACountLabel.Left := 50;
    ACountLabel.Width := 55;
    ACountLabel.Alignment := taLeftJustify;
    ACountLabel.Font.Color := clRed;
    ACountLabel.Font.Size := 7;
    ACountLabel.Top := 1;
    ACountLabel.Caption := Feiertage.IstFeiertag(Datum);
  end;
  if Feiertage.IstFerientag(ADate) then begin
    AFeld.Color := clYellow;
  end;
end;

...

  ProcessOneDay(Datum, Wochentag, Jan4, Jan4Tag, Jan4Anzahl, FeldJan4);
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Eigener Kabender bauen

  Alt 3. Sep 2016, 13:27
Hallo ConnorMcLeod,
danke dür den Code. Das bringt mich schon sehr viel weiter, bzw. vereinfacht das ganze schon einmal.

Vllt mit einer Prozedur, die alles macht und als Parameter die Anzeigeobjekte bekommt...

  ProcessOneDay(Datum, Wochentag, Jan4, Jan4Tag, Jan4Anzahl, FeldJan4);
Jetzt habe ich nur nochein Problem. Ich müste nun beim erzeugen 365 mal die Aufruf starten also etwas so:

Delphi-Quellcode:
 ProcessOneDay(Datum, Wochentag, Jan1, Jan1Tag, Jan1Anzahl, FeldJan1);
 ProcessOneDay(Datum, Wochentag, Jan2, Jan2Tag, Jan2Anzahl, FeldJan1);

 ...

 ProcessOneDay(Datum, Wochentag, Dez30, Dez30Tag, DEZ30Anzahl, FeldDez30);
 ProcessOneDay(Datum, Wochentag, Dez31, Dez31Tag, DEZ31Anzahl, FeldDez31);
Kann man den Code auch noch etwas vereinfach in Form z.B. einer Schleife ?

Tanja
Tanja
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#4

AW: Eigener Kalender bauen

  Alt 3. Sep 2016, 13:49
Naja, Datum ist 'ne Zahl, ginge also z. B. in 'ner For-Schleife:
Delphi-Quellcode:
procedure ProcessOneDay(ADate: TDate; var ADateLabel: TLabel; var ADayLabel: TLabel; var ACountLabel: TLabel; var AFeld: TPanel??);
begin
  Case DayOfWeek(ADate) of
    1 : ADayLabel.Caption := 'Mo';
    2 : ADayLabel.Caption := 'Di';
    3 : ADayLabel.Caption := 'Mi';
    4 : ADayLabel.Caption := 'Do';
    5 : ADayLabel.Caption := 'Fr';
    6 : begin
          ADayLabel.Caption := 'Sa';
          ADateLabel.Font.Style := [fsBold];
          ADayLabel.Font.Style := [fsBold];
          AFeld.Color := clWebBISQUE
        end;
    7 : begin
          ADayLabel.Caption := 'So';
          ADateLabel.Font.Style := [fsBold];
          ADayLabel.Font.Style := [fsBold];
          AFeld.Color := clWebBISQUE
        end;
  end;
  if (EmptyStr <> Feiertage.IstFeiertag(ADate)) then begin
    ADateLabel.Font.Style := [fsBold];
    ADayLabel.Font.Style := [fsBold];
    AFeld.Color := clWebBISQUE;
    ADateLabel.Font.Color := clRed;
    ADayLabel.Font.Color := clRed;
    ACountLabel.Left := 50;
    ACountLabel.Width := 55;
    ACountLabel.Alignment := taLeftJustify;
    ACountLabel.Font.Color := clRed;
    ACountLabel.Font.Size := 7;
    ACountLabel.Top := 1;
    ACountLabel.Caption := Feiertage.IstFeiertag(ADate);
  end;
  if Feiertage.IstFerientag(ADate) then begin
    AFeld.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, DateLabel, DayLabel, CountLabel, Feld);
  end;
end;
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Eigener Kalender bauen

  Alt 3. Sep 2016, 14:07
Naja, Datum ist 'ne Zahl, ginge also z. B. in 'ner For-Schleife:
Delphi-Quellcode:
var
      i : Integer;
begin
  For i := Trunc(StrToDate('01.01.2016')) to Trunc(StrToDate('31.12.2016')) do begin
    ProcessOneDay(i, DateLabel, DayLabel, CountLabel, Feld);
  end;
end;

Das Problem liegt nicht beim Datum, sondern bei den Label. Ich habe ja für jeden Tag z.B. ein anders Label auf der Frorm liegen. Jan1Tag, Jan2Tag, Jan3Tag usw. ein StrToTLabel gibt es ja leider nicht denn sonst würde ich mir das String zusammenbauen und dann in ein TLabel umwandeln.

Tanja
Tanja

Geändert von Dumpfbacke ( 3. Sep 2016 um 14:26 Uhr)
  Mit Zitat antworten Zitat
Benedikt Magnus

Registriert seit: 6. Jul 2012
Ort: Bonn
190 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Eigener Kalender bauen

  Alt 3. Sep 2016, 14:36
Das Problem liegt nicht beim Datum, sondern bei den Label. Ich habe ja für jeden Tag z.B. ein anders Label auf der Frorm liegen. Jan1Tag, Jan2Tag, Jan3Tag usw. ein StrToTLabel gibt es ja leider nicht denn sonst würde ich mir das String zusammenbauen und dann in ein TLabel umwandeln.

Tanja
Du könntest die Tags der Labels nutzen (Tags = Tag), sie in einer Liste/Array zusammenfassen (Index = Tag) oder mit FindComponent arbeiten.

Geändert von Benedikt Magnus ( 3. Sep 2016 um 15:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Eigener Kabender bauen

  Alt 5. Sep 2016, 10:14
Hallo ConnorMcLeod,
danke dür den Code. Das bringt mich schon sehr viel weiter, bzw. vereinfacht das ganze schon einmal.

Vllt mit einer Prozedur, die alles macht und als Parameter die Anzeigeobjekte bekommt...

  ProcessOneDay(Datum, Wochentag, Jan4, Jan4Tag, Jan4Anzahl, FeldJan4);
Jetzt habe ich nur nochein Problem. Ich müste nun beim erzeugen 365 mal die Aufruf starten also etwas so:

Delphi-Quellcode:
 ProcessOneDay(Datum, Wochentag, Jan1, Jan1Tag, Jan1Anzahl, FeldJan1);
 ProcessOneDay(Datum, Wochentag, Jan2, Jan2Tag, Jan2Anzahl, FeldJan1);

 ...

 ProcessOneDay(Datum, Wochentag, Dez30, Dez30Tag, DEZ30Anzahl, FeldDez30);
 ProcessOneDay(Datum, Wochentag, Dez31, Dez31Tag, DEZ31Anzahl, FeldDez31);
Kann man den Code auch noch etwas vereinfach in Form z.B. einer Schleife ?

Tanja
Hallo Tanja,
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;
)
Nr.1 Delphi-Tool: [F7]

Geändert von ConnorMcLeod ( 5. Sep 2016 um 16:58 Uhr)
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
332 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Eigener Kabender bauen

  Alt 5. Sep 2016, 19:18
Hallo Tanja,
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

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 ? 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
Angehängte Grafiken
Dateityp: jpg Kalender.jpg (231,2 KB, 44x aufgerufen)
Tanja
  Mit Zitat antworten Zitat
Benutzerbild von ConnorMcLeod
ConnorMcLeod

Registriert seit: 13. Okt 2010
Ort: Bayern
490 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Eigener Kalender bauen

  Alt 6. Sep 2016, 09:25
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:
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;
HTH CmL
Nr.1 Delphi-Tool: [F7]
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Eigener Kabender bauen

  Alt 2. Sep 2016, 13:22
Hat sich erledigt
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:37 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