Autor Beitrag
FiceGoesDelphi
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mi 30.05.07 11:04 
user profile iconFiceGoesDelphi 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: 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!
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  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!
ausblenden volle Höhe 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
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    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;
  //Memo_Termine.Lines.Add(Termine[i].Notiz)
end;

procedure TForm2.JvMonthCalendar21DblClick(Sender: TObject);
begin
  //Termine[i].Termin := JvMonthCalendar21.DateFirst;
  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:

ausblenden 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:

ausblenden 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
    { Public-Deklarationen }
    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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 30.05.07 11:12 
user profile iconChristian S. hat folgendes geschrieben:
user profile iconFiceGoesDelphi 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 30.05.07 11:59 
user profile iconFiceGoesDelphi 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 485

Win XP Prof
Delphi 2006
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: Mi 30.05.07 13:46 
user profile iconFiceGoesDelphi 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.

_________________
Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
ZeitGeist87
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1593
Erhaltene Danke: 20

Win95-Win10
Delphi 10 Seattle, Rad Studio 2007, Delphi 7 Prof., C++, WSH, Turbo Pascal, PHP, Delphi X2
BeitragVerfasst: 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.