Autor |
Beitrag |
FiceGoesDelphi
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mi 30.05.07 10:29
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!
Einloggen, um Attachments anzusehen!
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
Christian S.
      
Beiträge: 20451
Erhaltene Danke: 2264
Win 10
C# (VS 2019)
|
Verfasst: Mi 30.05.07 11:04
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.
_________________ Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: 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!
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!
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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 30.05.07 11:12
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
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: 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
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: 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
Naja ich lerne ja nie aus!
Und noch habe ich keinerlei AusbildunG! Plz nicht vergessen 
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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
Einloggen, um Attachments anzusehen!
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
FiceGoesDelphi 
      
Beiträge: 485
Win XP Prof
Delphi 2006
|
Verfasst: Mi 30.05.07 13:02
Vom Prinzip her, habe ich es verstanden!
Ein paar kleine Detail-Fragen sind noch da  Keine sorge
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  ^^) Lösung?
_________________ <(^^<) <(^^)> (>^^)>
===================
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: Mi 30.05.07 13:46
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
ZeitGeist87
      
Beiträge: 1593
Erhaltene Danke: 20
Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
|
Verfasst: 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
_________________ Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|
|
|