AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Kalender mit Checkboxen

Offene Frage von "Pullmoll"
Ein Thema von loirad · begonnen am 28. Okt 2011 · letzter Beitrag vom 6. Apr 2015
Antwort Antwort
Seite 1 von 2  1 2   
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#1

Kalender mit Checkboxen

  Alt 28. Okt 2011, 11:31
Hallo ihr,
ich möchte für jeden Tag meines Kalenders eine Listbox einfügen. Jedoch sind immer zu wenig Listboxen da --> ich häng mal das Projekt an --> guckt es euch an bitte!
Hier der Quelltext:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Grids, StdCtrls, DateUtils;

type
  TForm1 = class(TForm)
    Kalender: TStringGrid;
    MainMenu1: TMainMenu;
    Datei1: TMenuItem;
    Beenden1: TMenuItem;
    Monat: TLabel;
    zuruek: TButton;
    vor: TButton;
    procedure FormCreate(Sender: TObject);
    function welchermonat(Monat:string):string;
    procedure vorClick(Sender: TObject);
    procedure fuellen(Monat,Jahr, Wochentag: integer);
    procedure clear;
    function Wochentag(Datum:TDateTime):integer;
    procedure zuruekClick(Sender: TObject);
    procedure KalenderDblClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure KalenderDrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure setRect(rec:Trect;Nummer:integer);
    procedure Listboxcreate(Listbox:TListbox;Nummer:integer);
    procedure listboxenverteilen;
  private
    { Private-Deklarationen }
    taga,mona,monatsnamea,jahra,tag,mon,monatsname,jahr:String;
    dat:TDateTime;
    L: array [1..31] of TListbox;
    day:integer;
  public
    { Public-Deklarationen }
    Nameu,VonT,BisT,VonZ,BisZ,Wiederholung,Inhalt:string;
    neuerText:boolean;
  end;

var
  Form1: TForm1;
  L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15,L16,
  L17,L18,L19,L20,L21,L22,L23,L24,L25,L26,L27,L28,L29,L30,
  L31:TListbox;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
neuerText:=false;
Kalender.Top:=20;
Kalender.Left:=0;
Kalender.Width:=Form1.ClientWidth;
Kalender.Height:=Form1.ClientHeight-20;
Kalender.DefaultColWidth:=(Kalender.Width div 7)-2;
Kalender.DefaultRowHeight:=(Kalender.Height div 7)-2;
Kalender.Cells[0,0]:='Montag';
Kalender.Cells[1,0]:='Dienstag';
Kalender.Cells[2,0]:='Mittwoch';
Kalender.Cells[3,0]:='Donnerstag';
Kalender.Cells[4,0]:='Freitag';
Kalender.Cells[5,0]:='Samstag';
Kalender.Cells[6,0]:='Sonntag';
Monat.Top:=0;
Monat.Left:=Form1.ClientWidth div 2 - Monat.Width div 2;
zuruek.Left:=0;
zuruek.Top:=0;
vor.Top:=0;
vor.Left:=Form1.ClientWidth-vor.Width;
dat:=now;
taga:=FormatDateTime('d',dat);
mona:=FormatDateTime('m',dat);
jahra:=FormatDateTime('yyyy',dat);
monatsnamea:=welchermonat(mona);
Form1.Caption:='Kalender - '+taga+'. '+monatsnamea+' '+jahra;
Monat.Caption:=monatsnamea+' '+jahra;
day:=Wochentag(strtodate('01.'+mona+'.'+jahra));
fuellen(strtoint(mona),strtoint(jahra),day);
tag:=taga;
mon:=mona;
monatsname:=monatsnamea;
jahr:=jahra;
listboxenverteilen;
end;

function TForm1.welchermonat(Monat: String): string;
begin
case strtoint(Monat) of
 1:result:='Januar';
 2:result:='Februar';
 3:result:='März';
 4:result:='April';
 5:result:='Mai';
 6:result:='Juni';
 7:result:='Juli';
 8:result:='August';
 9:result:='September';
 10:result:='Oktober';
 11:result:='November';
 12:result:='Dezember';
end;
end;

procedure TForm1.vorClick(Sender: TObject);
begin
Form1.UpdateControlState;
clear;
if strtoint(mon)<12 then
 mon:=inttostr(1+strtoint(mon))
else
 begin
  mon:='1';
  jahr:=inttostr(1+strtoint(jahr));
 end;
fuellen(strtoint(mon),strtoint(jahr),Wochentag(strtodate('01.'+mon+'.'+jahr)));
monatsname:=welchermonat(mon);
Monat.Caption:=monatsname+' '+jahr;
day:=Wochentag(strtodate('01.'+mon+'.'+jahr));
listboxenverteilen;
end;

procedure TForm1.fuellen(Monat, Jahr, Wochentag: integer);
var i,j,z:integer;
begin
i:=1;
z:=1;
j:=Wochentag-1;
repeat
 Kalender.Cells[j,z]:=inttostr(i)+'. '+welchermonat(inttostr(Monat))+' '+inttostr(Jahr);
 if j<6 then
  begin
   inc(j);
  end
 else
  begin
   inc(z);
   j:=0;
  end;
 inc(i);
until i>Daysinamonth(Jahr,Monat);
end;

procedure TForm1.clear;
var i,j:integer;
begin
for i:=0 to Kalender.ColCount do
 for j:=1 to Kalender.RowCount do
  Kalender.Cells[i,j]:='';
for i:=1 to Length(L) do
  L[i].Free;
fillchar(L,sizeOf(L),0) ;
end;

function TForm1.Wochentag(Datum: TDateTime): integer;
begin
case DayOfWeek(Datum) of
 1: Result := 7;
 2: Result := 1;
 3: Result := 2;
 4: Result := 3;
 5: Result := 4;
 6: Result := 5;
 7: Result := 6;
end;
end;

procedure TForm1.zuruekClick(Sender: TObject);
begin
Form1.Hide;
clear;
if strtoint(mon)>1 then
 mon:=inttostr(strtoint(mon)-1)
else
 begin
  mon:='12';
  jahr:=inttostr(strtoint(jahr)-1);
 end;
fuellen(strtoint(mon),strtoint(jahr),Wochentag(strtodate('01.'+mon+'.'+jahr)));
monatsname:=welchermonat(mon);
Monat.Caption:=monatsname+' '+jahr;
day:=Wochentag(strtodate('01.'+mon+'.'+jahr));
listboxenverteilen;
Form1.Show;
end;

procedure TForm1.KalenderDblClick(Sender: TObject);
begin
if Kalender.Cells[Kalender.Selection.Left,Kalender.Selection.Top]<>'then
 begin
  Form1.Enabled:=false;
  Form2.Show;
  Form2.Name.SetFocus;
  Inhalt:=Form1.Kalender.Cells[Form1.Kalender.Selection.Left,Form1.
  Kalender.Selection.Top]
 end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form2.Close;
end;

procedure TForm1.KalenderDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
if Kalender.Cells[ACol,ARow]='then
 begin
  Kalender.Canvas.Brush.Color := clMedGray;
  Kalender.Canvas.FillRect(Rect);
 end;
end;

procedure TForm1.setRect(rec: Trect;Nummer:integer);
var r:TRect;
begin
  // CheckBox in stringgrid
  CopyRect(r,rec); // rec an r übergeben
  r.BottomRight:=L[Nummer].Parent.ScreenToClient(Kalender.ClientToScreen(r.BottomRight));
  r.TopLeft:=L[Nummer].Parent.ScreenToClient(Kalender.ClientToScreen(r.TopLeft));
  L[Nummer].SetBounds(r.Left,r.Top,r.Right-r.Left,r.Bottom-r.Top);
  L[Nummer].BringToFront;
end;

procedure TForm1.Listboxcreate(Listbox: TListbox; Nummer: integer);
begin
{Listbox:=TListbox.Create(self);
Listbox.Parent:=Form1;
L[Nummer]:=Listbox; }

end;

procedure TForm1.listboxenverteilen;
var x,y,i:integer;
begin
x:=day-1;
y:=1;
for i:=1 to 31{daysinamonth(strtoint(jahr),strtoint(mon))} do
 begin
  L[i]:=TListbox.Create(self);
  with L[i] do
    begin
      parent := Form1;
      name := 'L'+IntToStr(i);
      left := 10;
      top := i * 2;
      Width:=Form1.Kalender.DefaultColWidth;
     if x<7 then
      begin
       setRect(Kalender.CellRect(x,y),i);
       inc(x);
      end
     else
      begin
       x:=0;
       inc(y);
       setRect(Kalender.CellRect(x,y),i);
      end;
    end;
 end;

end;

end.
Vielen Dank für Antworten
loirad!!!
Angehängte Dateien
Dateityp: zip Kalender (2).zip (264,9 KB, 19x aufgerufen)
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: Kalender mit Checkboxen

  Alt 28. Okt 2011, 12:08
Hey,
ist dir vlt schonmal in den Sinn gekommen, dass man nicht dein ganzes Projekt erstmal durchlesen möchte, um dir zu helfen?
Ach ja, und dann wäre es ja noch hilfreich, wenn du eine ausführliche Problembeschreibung vornehmen würdest. Wieviele Tage willst du darstellen? sollen das nur die Tage eines Monats sein? etc. pp.!

Also, falls du mehr Tage als die eines 31tägigen Monats darstellen willst, dann darf die Schleife nicht auf 1 bis 31 beschränken!

LG; hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

AW: Kalender mit Checkboxen

  Alt 28. Okt 2011, 12:17
Wenn ich mich nicht täusche hast du den gleichen Thread
schon einmal vor kurzem hier eröffnet:

http://www.delphipraxis.net/163864-k...heckboxen.html

Den alten Thread zu pushen hätte genügt um ihn wieder
nach vorne zu holen...

Gruß,
Steku
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#4

AW: Kalender mit Checkboxen

  Alt 28. Okt 2011, 12:40
Hallo,

@ hans ditter: Der Fehler müsste in der Prozedur listboxenverteilen liegen.
ich will für den jeweiligen Monat für jeden Tag eine Listbox anlegen.
Ich habe die Schleife nur zu Testzwecken verändert auf 1-31 das eigentliche steht in geschweiften Klammern dahinter!

@ Steku: Ja du hast recht! Wie macht man das mit dem pushen? Wusste ich nicht ! Hast du eine Idee?

@ all: Ideen gerne willkommen!

Liebe Grüße
loirad
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Steku

Registriert seit: 12. Mai 2008
181 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

AW: Kalender mit Checkboxen

  Alt 28. Okt 2011, 12:44
Hi,

einfach auf den eigenen Thread antworten, als Text sollte ein: *PUSH* ausreichen.
Bitte aber erst pushen wenn sich nach mindestens 24 Stunden niemand / niemand mehr
auf deinen Thread gemeldet hat.

Danke und Gruß,
Steku
  Mit Zitat antworten Zitat
loirad

Registriert seit: 25. Nov 2009
135 Beiträge
 
Delphi 6 Professional
 
#6

AW: Kalender mit Checkboxen

  Alt 9. Nov 2011, 07:57
*push*
Wer Fehler findet darf sie behalten!
  Mit Zitat antworten Zitat
Pullmoll

Registriert seit: 6. Apr 2015
4 Beiträge
 
Delphi 7 Professional
 
#7

AW: Kalender mit Checkboxen

  Alt 6. Apr 2015, 03:31
Hallo,
ich habe ein ähnliches Problem, ich möchte das man einen oder mehrere Wochentage (Montag, Diensatg, ...) per Checkbox auswählen kann und diese werden dann mit dem heutigen Wochentag vergleicht. Leider stoße ich aber auf das Problem das ich es nicht hin bekomme. (Hatte vor diese dann mit einer Case_Anweisung zu vergleichen)

mein Ansatz:

var
Wochentag: integer;
datum : TDateTime;

begin
datum := date; //Datum von Heute
wochentag := LongDayNames[DayOfWeek(datum)];
Label1_Wochentag.Caption := IntToStr[DayOfWeeek(Datum)];

normal sollte DayOfWeek doch einen Integer Wert zurück geben oder?
andere Lösungsvorschläge ?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.105 Beiträge
 
Delphi 12 Athens
 
#8

AW: Kalender mit Checkboxen

  Alt 6. Apr 2015, 07:34
Ja, einen Integer, aber einen Lösungsvorschlag kann ich leider nicht geben, da ich garnicht weiß (hat irgendwie keiner verraten), wo eigentlich dein Problem liegt.

Und den Fehler bei wochentag := LongDayNames[... hat dir der Compiler bestimmt schon genannt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Kalender mit Checkboxen

  Alt 6. Apr 2015, 07:54
Hallo,

Ohne, dass ich jetzt Delphi starte

http://www.delphibasics.co.uk/RTL.asp?Name=DayOfWeek

Was ist denn hier falsch?

Außer das eee .


Heiko
Heiko

Geändert von hoika ( 6. Apr 2015 um 07:57 Uhr)
  Mit Zitat antworten Zitat
Pullmoll

Registriert seit: 6. Apr 2015
4 Beiträge
 
Delphi 7 Professional
 
#10

AW: Kalender mit Checkboxen

  Alt 6. Apr 2015, 15:07
Hallo,
erstmal Danke für die schnelle Hilfe. Was ich möchte, ist der Integerwert von der funktion DayOfWeek, diese hat aber als Ausgabewert ein Word Datentype, so wie ich es verstanden habe, denn der compiler zeigt mir immer an dieser Stelle:

Label1_Wochentag.Caption := IntToStr[DayOfWeeek(Datum)];

eine Fehlermeldung:
[Fehler] DiitalUhr_u.pas(89): Es gibt keine überladene Version von 'IntToStr', die man mit diesen Argumenten aufrufen kann

ich benutze Delphi 7 Personal von dem Buch Delphi für Kids.

Ich habe vor das man bei meinem Wecker/Uhr die Wochentage an denen der Wecker klingeln soll per Checkboxen aktivieren werden kann und der durch einen Timer der per Button eingeshaltet wird ständig überprüft ob der/einer der Wecktag(e) erreicht ist wenn ja soll er nach der Uhrzeit gucken. Es läuft auch alles so wie ich es will bloß, dass Problem mit den Wochentagen bleibt.

Den Wochentag alleine als ausgeschriebenes Wort hab ich bereits als Information auf meinem Formular.

lbl_wochentag.Caption := ('Heute ist '+wochentag);

Ich hoffe das ich meine Situation etwas genauer beschreiben konnte und das ihr mir vielleicht etwas weiter helfen könnt.

Geändert von Pullmoll ( 6. Apr 2015 um 15:12 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:40 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