Entwickler-Ecke
Sonstiges (Delphi) - String einem Datum zuweisen
FiceGoesDelphi - Mi 30.05.07 10:29
Titel: String einem Datum zuweisen
Hallo liebe Community,
ich hoffe mein Titel ist einigermaßen aussagekräftig!
Ich habe eine Kundenkartei geschrieben und dort nun einen Kalender (JvMonthCalender) integriert.
Per doppelklick auf ein Datum kommt eine neue Form + Memofeld indem ich dann für dieses Datum eine Info oder sonstiges speichern möchte!
Ich stehe aber total auf dem Schlauch!
Ich kriegs einfach nicht hin ein neues Array zu machen für diese Situation und dessen Inhalt zu speichern und automatisch beim Laden einer *.kdd (Kundendaten) zu laden.
Ich hänge mal alles von dem Programm mit an, weil es doch ein wenig zu viel wäre, alles hier zu posten!
Sollte das "verboten" oder nicht erwünscht sein, bitte ich dieses zu entschuldigen und dann muss ich wohl einen anderen Weg finden! :)
Im Zip Ordner findet ihr den Kompletten SourceCode und eine .Exe Datei!
Christian S. - Mi 30.05.07 11:04
Titel: Re: String einem Datum zuweisen
FiceGoesDelphi hat folgendes geschrieben: |
Sollte das "verboten" oder nicht erwünscht sein, bitte ich dieses zu entschuldigen und dann muss ich wohl einen anderen Weg finden! :) |
Es ist eigentlich unüblich und auch kontraproduktiv, dem Hilfs-Willigen zuzumuten, sich durch ein komplettes Programm zu wühlen. Relevante Quelltext-Teile zu zeigen, ist wesentlich effektiver und zeigt, dass man auch selber Zeit investiert.
FiceGoesDelphi - Mi 30.05.07 11:11
Ok dann werde ich mal alles zerpflücken und sehen das ich alles relevante finde ;)
Das ist meine Form, in der mein neuer Termin eingetragen werden soll!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| unit U_NeuenTermin;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, U_Kalender, U_Kundenkartei;
type TForm5 = class(TForm) Memo_NeuerTermin: TMemo; BTN_TerminBestaetigen: TButton; procedure BTN_TerminBestaetigenClick(Sender: TObject); procedure FormActivate(Sender: TObject); private public end;
var Form5: TForm5;
implementation
uses JvCalendar;
{$R *.dfm}
procedure TForm5.BTN_TerminBestaetigenClick(Sender: TObject); var i: integer; begin SetLength(Form2.Termine,Length(Form2.Termine)+1); Form2.FTerminIndex := Length(Form2.Termine)-1; Form2.Termine[i].Termin := Form2.JvMonthCalendar21.DateFirst; Form2.Termine[i].Notiz := Memo_NeuerTermin.Text; Form1.Aktualisierung; end;
procedure TForm5.FormActivate(Sender: TObject); begin Memo_NeuerTermin.CleaR; end;
end. |
Das ist die Form wo mein Kalender integriert ist!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150:
| unit U_Kalender;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, JvExControls, JvCalendar, U_Kundenkartei, Menus;
type TTermine = record Termin: TDateTime; Notiz: String[255]; end; TForm2 = class(TForm) JvMonthCalendar21: TJvMonthCalendar2; Memo_Termine: TMemo; OpenDialog1: TOpenDialog; SaveDialog1: TSaveDialog; MainMenu1: TMainMenu; Datei1: TMenuItem; AlleTerminelschen1: TMenuItem; Laden1: TMenuItem; Speicher1: TMenuItem; Beenden1: TMenuItem; procedure AlleTerminelschen1Click(Sender: TObject); procedure Speicher1Click(Sender: TObject); procedure Laden1Click(Sender: TObject); procedure JvMonthCalendar21Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure JvMonthCalendar21DblClick(Sender: TObject); private public Termine: Array of TTermine; i: Integer; fTerminIndex: Integer; end;
var Form2: TForm2;
implementation uses U_NeuenTermin; {$R *.dfm}
procedure TForm2.AlleTerminelschen1Click(Sender: TObject); begin SetLength(Termine,0); end;
procedure TForm2.FormActivate(Sender: TObject); begin Memo_Termine.Clear; JvMonthCalendar21.Today := Date; end;
procedure TForm2.JvMonthCalendar21Click(Sender: TObject); var i: Integer; Year, Day, Month: Word; Reinigung1: String; begin Form1.Aktualisierung; DecodeDate(JvMonthCalendar21.DateFirst,Year,Month,Day); if JvMonthCalendar21.Bold[Year,Month,Day] = True then begin Memo_Termine.Clear; if Date > JvMonthCalendar21.DateFirst then for I := 0 to Length(Form1.Kunden) -1 do if (Form1.Kunden[i].Reinigung = JvMonthCalendar21.DateFirst) or (Form1.Kunden[i].NaechsteReinigung = JvMonthCalendar21.DateFirst) then Memo_Termine.Lines.Add('Letze Reinigung bei ' + (Form1.Kunden[i].Kunde) + ' war am: ' + DateToStr(JVMonthCalendar21.Datefirst)); if Date < JvMonthCalendar21.DateFirst then for I := 0 to Length(Form1.Kunden) -1 do if (Form1.Kunden[i].Reinigung = JvMonthCalendar21.DateFirst) or (Form1.Kunden[i].NaechsteReinigung = JvMonthCalendar21.DateFirst) then Memo_Termine.Lines.Add('Die nächste Reinigung bei ' + (Form1.Kunden[i].Kunde) + ' ist am: ' + DateToStr(JVMonthCalendar21.Datefirst)); if Date = JvMonthCalendar21.DateFirst then for I := 0 to Length(Form1.Kunden) -1 do if (Form1.Kunden[i].Reinigung = JvMonthCalendar21.DateFirst) or (Form1.Kunden[i].NaechsteReinigung = JvMonthCalendar21.DateFirst) then Memo_Termine.Lines.Add('Heute ist die nächste Reinigung bei: ' + (Form1.Kunden[i].Kunde)); end else begin Memo_Termine.Clear; if Date = JvMonthCalendar21.DateFirst then Memo_Termine.Lines.Add('Heute ist kein Termin eingetragen.') else Memo_Termine.Lines.Add('Am ' + DateToStr(JVMonthCalendar21.DateFirst) + ' ist kein Termin eingetragen'); end; end;
procedure TForm2.JvMonthCalendar21DblClick(Sender: TObject); begin Form5.ShowModal end;
procedure TForm2.Laden1Click(Sender: TObject); var DateiAdressen: File of TTermine; i: integer; begin if OpenDialog1.Execute then begin try AssignFile(DateiAdressen,OpenDialog1.FileName); Reset(DateiAdressen); SetLength(Termine,0); while not Eof(Dateiadressen) do begin SetLength(Termine,Length(Termine)+1); Read(DateiAdressen,Termine[Length(Termine)-1]); end; CloseFile(DateiAdressen); except begin messagebox(application.handle, 'Datei nicht gefunden', 'Fehler', MB_IconERROR); exit; end; end; Form1.aktualisierung; end; end;
procedure TForm2.Speicher1Click(Sender: TObject); var DateiAdressen: File of TTermine; i: integer; MyFileExt: String; begin if SaveDialog1.Execute then begin try if (ExtractFileExt(SaveDialog1.FileName) = '') OR (UpperCase(ExtractFileExt(SaveDialog1.FileName)) <> '.KDD')then SaveDialog1.FileName := SaveDialog1.FileName +'.kdd'; AssignFile(DateiAdressen,SaveDialog1.FileName); ReWrite(DateiAdressen); for I := 0 to Length(Termine) -1 do Write(DateiAdressen,Termine[i]); finally CloseFile(DateiAdressen); end; end; end;
end. |
Die "funktionen" aus meiner MainForm sind:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Aktualisierung; var i: integer; Year, Month, Day: Word; begin LB_Kundenliste.Clear; for I := 0 to Length(Kunden) -1 do begin LB_Kundenliste.Items.Add(InttoStr(i+1) + ': ' + Kunden[i].Kunde); DecodeDate(Kunden[i].NaechsteReinigung,Year,Month,Day); Form2.JvMonthCalendar21.Bold[Year,Month,Day] := True; DecodeDate(Kunden[i].Reinigung,Year,Month,Day); Form2.JvMonthCalendar21.Bold[Year,Month,Day] := True; end; end; |
Und so habe ich mein Record auf Form1 deklariert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| type TAdressen = Record Name: String[50]; Vorname: String[50]; Strasse: String[50]; Hausnummer: String[10]; Postleitzahl: String[10]; Ort: String[50]; Email: String[50]; Mobil: String[50]; Telefon: String[50]; end; TKundenkartei = Record Kunde: String[50]; Adresse: TAdressen; Preis: String[20]; Bemerkung: String[100]; Reinigung: TDateTime; NaechsteReinigung: TDateTime; GesamtPreis: String[20]; end;
public KundeTemp: TKundenKartei; fKundenIndex : Integer; Kunden : Array of TKundenkartei; |
Mein Problem ist nun, wie schon oben beschrieben, dass ich es nicht schaffe einem Datum einen oder auch mehrere Termine zuzuweisen. Desweiteren werden die Kundendaten in einer Datei gespeichert und die Termine in dem Kalender sind dementsprechend auch davon abhängig welche Kundendatei geladen wurde. Somit müssen die auch aneinander hängen.
Ich stehe total auf dem Schlauch und kriegs nicht hin.. ich komme nicht weiter! :(
@[quote] Christian S. : Hoffe so ists besser. ;)
ZeitGeist87 - Mi 30.05.07 11:12
Titel: Re: String einem Datum zuweisen
Christian S. hat folgendes geschrieben: |
FiceGoesDelphi hat folgendes geschrieben: | Sollte das "verboten" oder nicht erwünscht sein, bitte ich dieses zu entschuldigen und dann muss ich wohl einen anderen Weg finden! :) |
Es ist eigentlich unüblich und auch kontraproduktiv, dem Hilfs-Willigen zuzumuten, sich durch ein komplettes Programm zu wühlen. Relevante Quelltext-Teile zu zeigen, ist wesentlich effektiver und zeigt, dass man auch selber Zeit investiert. |
Hallo!
Da muss ich Björn mal in Schutz nehmen.
Das Problem hat er in einem anderen Thread schon geschildert, was hier fehlt ist eventuell der Verweis auf diesen.
@Björn: Ich hab leider die Komponente nicht, sonst würd ich mir deinen Code anschauen. So kann ich das nur heut abend zu Hause erledigen.
LG
Stefan
FiceGoesDelphi - Mi 30.05.07 11:46
Danke @ Stefan!
Ich kann mich gedulden ;)
Ich hänge da ja schon ein bisschen länger! Mach dir bitte keinen Druck und wenn du mal 1-2 Minuten Zeit hast (Mehr wirst du wahrscheinlich garnicht inverstieren müssen, bis du es raus hast *gg*) dann kannst du ja mal kurz schauen!
ZeitGeist87 - Mi 30.05.07 11:59
FiceGoesDelphi hat folgendes geschrieben: |
Danke @ Stefan!
Ich kann mich gedulden ;)
Ich hänge da ja schon ein bisschen länger! Mach dir bitte keinen Druck und wenn du mal 1-2 Minuten Zeit hast (Mehr wirst du wahrscheinlich garnicht inverstieren müssen, bis du es raus hast *gg*) dann kannst du ja mal kurz schauen! |
Björn..das wäre ein guter Zeitpunkt, um sich mit Datenbanken zu befassen :)
LG
Stefan
FiceGoesDelphi - Mi 30.05.07 12:06
Eben ist mein 1. Programm für die Bank in den Testumlauf gegangen!
Dort wird eine Textdatei in DB2 Importiert :roll:
Naja ich lerne ja nie aus!
Und noch habe ich keinerlei AusbildunG! Plz nicht vergessen :)
ZeitGeist87 - Mi 30.05.07 12:57
Meine Idee
Hoffe du kannst damit was anfangen!
Ich geh jetzt Mittagessen.
Ich erklärs später :)
LG
Stefan
FiceGoesDelphi - Mi 30.05.07 13:02
Vom Prinzip her, habe ich es verstanden!
Ein paar kleine Detail-Fragen sind noch da ;) Keine sorge :D
Guten Hunger und bis nachher :)
Ein Kollege hat gerade ein tolles Wort in den Raum geworfen ...
"Streams"
Stefan was meinst du?! Wäre das eine machbare (für mich/uns :P ^^) Lösung?
ZeitGeist87 - Mi 30.05.07 13:46
FiceGoesDelphi hat folgendes geschrieben: |
Vom Prinzip her, habe ich es verstanden!
Ein paar kleine Detail-Fragen sind noch da ;) Keine sorge :D
Guten Hunger und bis nachher :)
Ein Kollege hat gerade ein tolles Wort in den Raum geworfen ...
"Streams"
Stefan was meinst du?! Wäre das eine machbare (für mich/uns :P ^^) Lösung? |
Bringen bei dem was du vorhast nicht wirklich viel.
ZeitGeist87 - Mi 30.05.07 13:58
1) Du hast verschiedene Kundenkarteien.
Jede Kartei bekommt eine eindeutige ID.
2) Du hast viele Kunden.
Jeder Kunde bekommt eine eindeutige ID.
3) Jede Kundenkartei beinhaltet unterschiedliche Kunden.
Die Zuordnung erfolgt über die Kundenzuordnung (Aufbau entspricht INI).
4) Du hast Termine zu unterschiedlichen Zeitpunkten (Datum).
Jedes Datum (Zeitpunkt) hat seine eigene Datei (Aufbau entspricht INI).
Zuordnung erfolgt über die Datei Termine.
Termine verweist über Datum.Pfad auf die Datei, in welcher die Termine für
das jeweilige Datum spezifiziert sind.
Die Datumsdateien enthalten die KundenID sowie eine Beschreibung des Termins (KundenID = Beschreibung des Termins).
Über die KundenID kannst du also problemlos in deiner Kundenzuordnung nach der zu ladenen Kundenkartei suchen und diese ggf. laden.
Mit diesem System hast du folgende Möglichkeiten:
- Eindeutige Datenhaltung
- Zuordnung über eine unique Nummer (KundenID)
- Ein Termin/Datum kann für n Kunden verwendet werden
- Du kannst alle Termine suchen, die für einen Kunden reserviert sind/waren/wurden und die Ereignisse abrufen
- ...
Da du keine Datenbank zur Verfügung hast, würde ich es so lösen.
Die Dateien, die die Termine enthalten, kannst du zum Beispiel in Extra-Ordner nach dem System \Programmverzeichnis\Jahr\Monat\ legen.
Falls du noch Fragen hast -> frag.
LG
Stefan
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!