Autor Beitrag
Deathman
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Win XP
Turbo Pascal, Delphi 6, Delphi 2006
BeitragVerfasst: Di 16.05.06 21:15 
Hi
Sorry wenn das hier nicht hingehört hab aber kein suchbegriff gewusst unter dem ich suchen könnte da mein Problem wie ich denke ziemlich kompliziert ist.
ich habe ein Stringgrid und will 20 Zellen als einen 20Tage Plan bauen hab's soweit das der Plan in ner Ini gespeichert wird allerdings weiß i Net wie ich diesen Plan jetzt an einem beliebiegen Tag öffnen kann und sich der plan dann entsprechend verschoben hat.

Also nochma kurz:

- alle20 Tage widerholt sich der Plan
- Plan soll sich dem Datum entsprechend beim öffnen anpassen

bis jetzt hab ich dass:

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:
Procedure BEENDEN;
      :
      :
      :
   Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ablauf.ini');
   for I:=1 to 20 do                                                           
   Begin                                                                    
    Ini.WriteString('Notdienst1',intToStr(i),Notdienst.Stringgrid1.Cells[1,i]);
    Ini.WriteString('Notdienst2',IntToStr(i),Notdienst.Stringgrid1.Cells[2,i]);
    Ini.WriteString('Datum',Notdienst.StringGrid1.Cells[0,i],IntToStr(i));
  end;
     :
     :
end;



procedure TNotdienst.FormCreate(Sender: TObject);  
          :
          :
          :
 StringGrid1.RowCount:=21;                                                     
 StringGrid1.Cols[0].Add('Datum');                                            
 StringGrid1.Cols[1].Add('Apotheken Notdienst 1');                            
 StringGrid1.Cols[2].Add('Apotheken Notdienst 2');                           
 for i:=0 to StringGrid1.RowCount do                                       
  StringGrid1.Rows[i+1].Add(DateToStr(Date()+ i));                        

 Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ablauf.ini');                     for i:=1 to StringGrid1.RowCount do 
   begin                                                                 
    Stringgrid1.Cells[1,i]:=Ini.ReadString('Notdienst1',IntToStr(i),'');
    Stringgrid1.Cells[2,i]:=Ini.ReadString('Notdienst2',IntToStr(i),'');
   end;                                                                   
  Ini.Free;   
                                        
end;
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 17.05.06 08:47 
Sry aber ich vertseh das jetzt garnicht :oops: haste sonst mal ne Skizze?
Deathman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Win XP
Turbo Pascal, Delphi 6, Delphi 2006
BeitragVerfasst: Mi 17.05.06 12:00 
Also nen Bild is im Anhang.

Also ich will dass sich die Tage ändern (täglich) und das sich der Plan dem entsprechend wiederhollt
wollte mit ner INI arbeiten aber wenns anders geht is mir auch egal.
Einloggen, um Attachments anzusehen!
digi_c
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1905

W98, XP
D7 PE, Lazarus, WinAVR
BeitragVerfasst: Mi 17.05.06 12:43 
Aha und du willst jetzt eine "Goto" Funktion haben, die einen bestimmten Tag anstuert und dann die nachfolgenden Tage anzeigt? Und was soll davon jetzt genau in die INI Datei?

Wäre ganz erhellend, wenn man wüßte was das im Großen&Ganzen werden soll :-)


Zuletzt bearbeitet von digi_c am Mi 17.05.06 12:44, insgesamt 1-mal bearbeitet
Hobby-Programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 238
Erhaltene Danke: 4

Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
BeitragVerfasst: Mi 17.05.06 12:43 
Mahlzeit :)
user profile iconDeathman hat folgendes geschrieben:
...
ich habe ein Stringgrid und will 20 Zellen als einen 20Tage Plan bauen hab's soweit das der Plan in ner Ini gespeichert wird allerdings weiß i Net wie ich diesen Plan jetzt an einem beliebiegen Tag öffnen kann und sich der plan dann entsprechend verschoben hat.


Ich habe so etwas ähnliches (Dienstplanverwaltung) schon mal gemacht! Allerdings verstehe ich deine Frage nicht so ganz. Warum planst du den Notdienst nicht für das gesamte Jahr, oder ändert sich die Reihenfolge der beteiligten Apotheken? Konkretisiere mal Deine Frage und dann kann man Dir auch sicher helfen!

LG Mario :dance2:
Deathman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Win XP
Turbo Pascal, Delphi 6, Delphi 2006
BeitragVerfasst: Mi 17.05.06 17:41 
Also der Plan ist alle 20Tage gleich allerdings kann es vorkommen dass die Apotheken sich ändern. Der sinn ist es das man jeden Tag im obersten Feld die aktuelle Apotheke sieht.
und sich der Plan wenn man das Programm startet aktualliesiert. D.H. der plan muss sich mit dem Kalendar und dem 20Tage Rhytmus sincroniesieren(kein Plan ob dat so gescvhrieben wird :D ).

Braucht ihr vielleicht das komplette Program damit ihr euch nen Überblick verschaffen könnt?
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Mi 17.05.06 21:54 
In deinem anderen Thread hast Du doch Antworten auf deine Frage(n) bekommen !
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Mi 17.05.06 23:08 
Moin :-)
Folgende Idee aufgrund der o.a. Angaben:
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:
procedure TForm1.FormCreate(Sender: TObject);
Var i,j:byte;
    Ini: TIniFile;
    Diff: Integer;
    DatumGueltig: TDate;
begin
...
  StringGrid1.RowCount:=21;                                                      
  StringGrid1.Cols[0].Add('Datum');
  StringGrid1.Cols[1].Add('Apotheken Notdienst 1');
  StringGrid1.Cols[2].Add('Apotheken Notdienst 2');
  
  //--Ini-Datei mit dem festen Tagesrythmus öffnen
  Ini := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'ablauf.ini');

  //--1.Zeile beginnt mit dem tagesaktuellen Datum
  for i:=0 to StringGrid1.RowCount do
    StringGrid1.Rows[i+1].Add(DateToStr(Date()+ i));
    
  //--Auslesen des Gültigkeitsdatums
  DatumGueltig := Ini.ReadDate('Gueltig','DatumGueltig',Date());

  //--Versatz für den Tagesrythmus
  Diff := ( Trunc(Date()) - Trunc(DatumGueltig) ) mod 20;

  //--ab TagesDatum bis 20
  for i:= 1 to 20-Diff do
    begin
      Stringgrid1.Cells[1,i]:=ini.readString('Notdienst1',IntToStr(i+Diff),'');
      Stringgrid1.Cells[2,i]:=ini.readString('Notdienst2',IntToStr(i+Diff),'');
  end;
  
  //--Tagesrythmus beginnt wieder von vorn
  for j:= 0 to Diff do
    begin
      Stringgrid1.Cells[1,i+j]:=ini.readString('Notdienst1',IntToStr(j+1),'');
      Stringgrid1.Cells[2,i+j]:=ini.readString('Notdienst2',IntToStr(j+1),'');
  end;
  //--INI freigeben
  Ini.Free;
end;

So, einige Erklörungen zum dem obigen Gedankenspiel:
ablauf.ini ist wie folgt aufgebaut:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
[gueltig]
DatumGueltig=01.05.2006
[Notdienst1]
1=Apo11
2=Apo12
3=Apo13
...
20=Apo120
[Notdienst2]
1=Apo21
2=Apo22
3=Apo23
...
20=Apo220

Naturlich sind anstelle der Apo11...Apo220 die richtigen Apotheken einzutragen; die Schlüsselwerte dienen hier nur zum besseren Verständnis des obigen Qoellcodes.

Zeile 17..18 ab dem aktuellenTagesdatum, welches in die erste freie Zeile geschrieben wird, werden die nachfolgenden Zellen des StringGRids in Spalte 0 mit forlaufenden Datum beschrieben.

ZEile 21: Auslesen des Datums, ab wann die Ablaufliste (Tagesrythmus) gültig ist; hier exemplarisch 01.05.2006

ZEile 24: Die Differenz zwischen dem Tagesdatum (Beispiel 17.05.2006) und dem Gültigkeitsdatum wird solange durch 20 geteilt, bis ein Rest von 0..20 Tagen erreicht ist. Wert von Diff = 16 (17.05.2006 - 01.05.2006)

Zeile 27...30 Anzahl der ersten ZEilen im StringGrid errechnet sich aus 20-Diff, in diesem Beispiel wären das also die ersten 4 Zeilen (17.05.2006...20.05.2006); in den Spalte für Notdienst1 wird dann Apo117...Apo120 eingetragen, sinngemäß für den Notdienst2 Apo217..Apo220.

Nun ist die Tagesrythmus-Liste zu ende und muss von vorne beginnen:

Zeile 34...37 die ersten 4 Zeilen sind abgearbeitet (Schleifenvariable i steht auf 5(!)), übrig bleiben also noch Diff=16 Zeilen, somit die Zeilen 5..20.

So, nun dürft ihr euch weitere Gedanken um die anderen Probleme machen :-P
Einloggen, um Attachments anzusehen!
Deathman Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52

Win XP
Turbo Pascal, Delphi 6, Delphi 2006
BeitragVerfasst: Mi 17.05.06 23:52 
Jo Danke erstma

Sowas ind der Art war mir vor nen paar minut en inner Badewanne :wink: auch eingefallen wusst aba auch nicht wie icht machen sollte.
Ich bin dir echt Dankbar :D