![]() |
Kalender mit Checkboxen
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Vielen Dank für Antworten
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. loirad!!! |
AW: Kalender mit Checkboxen
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 |
AW: Kalender mit Checkboxen
Wenn ich mich nicht täusche hast du den gleichen Thread
schon einmal vor kurzem hier eröffnet: ![]() Den alten Thread zu pushen hätte genügt um ihn wieder nach vorne zu holen... Gruß, Steku |
AW: Kalender mit Checkboxen
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 :oops: ! Hast du eine Idee? @ all: Ideen gerne willkommen! Liebe Grüße loirad |
AW: Kalender mit Checkboxen
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 |
AW: Kalender mit Checkboxen
*push*
|
AW: Kalender mit Checkboxen
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 ? |
AW: Kalender mit Checkboxen
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
Delphi-Quellcode:
hat dir der Compiler bestimmt schon genannt.
wochentag := LongDayNames[...
|
AW: Kalender mit Checkboxen
Hallo,
Ohne, dass ich jetzt Delphi starte ![]() Was ist denn hier falsch? Außer das eee . Heiko |
AW: Kalender mit Checkboxen
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.:coder2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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 by Thomas Breitkreuz