Kalenderdaten im StringGrid (war: Hilfe zu Borland)
-
Kann mir jemand bei dem Problem helfen, es wäre sehr wichtig!!!
-
Hallo,
du musst dich schon genauer ausdrücken wo du jetzt nicht weiter kommst
du kennst StringGrid1->Cells[][] haste gesagt, also wo ist jetzt genau dein
Problem ?und bei Datumsfunktionen sollst du mal in der Hilfe nach
"Date/time routines" suchen, wie schon gesagt !mfg
VergissEs
-
Mein Problem liegt darin das ich nicht weiß wie ich die Daten aus dem CCalendar in meinen StringGrid bekomme
-
Du bekommst die Daten nicht aus den bestehenden CCalendar du musst den
Kalender selbst von Hand Programmieren mit den datetime Funktionen.mfg
VergissEs
-
Und wie soll ich das machen??? Könntest du mir vielleicht mal einen Ansatz dafür geben? Ich finde da bei mir in der Hilfe nicht viel dazu, ich habe Borland C++ Builder 3. Wäre dir sehr dankbar wenn du mir weiter helfen könntest.
-
TDateTime gibt's auch im BCB3.
Beispiele dazu findest du in der Hilfe und über die Suchfunktion hier im Forum.
-
Also wahrscheinlich stell ich mich wirklich zu doof an, aber ich krieg das irgendwie mit dem Kalender nicht auf die Reihe!!!!
Könnte mir jemand vielleicht mal helfen. Aus der Hilfe kann ich mir im Moment auch nicht viel nehmen.
-
int Day, Month, Year; //TDateTime(Day,Month,Year); StringGrid1->Cells[2][1] = FormatDateTime("ddd",TDateTime("12.12.2002")); //->zeigt an dass 12.12.2002 ein Do ist StringGrid1->Cells[2][0] = FormatDateTime("dd",TDateTime("12.12.2002")); //->zeigt 12 an
wenn ich das so mache, zeigt es mir auf jeden Fall schonmal meinen Wochentag an, allerdings nur für den einen Tag, wie kann ich das jetzt machen, dass das für jeden Monat und jedes Jahr das ich auswähle funktioniert?? Kann mir denn da niemand helfen??
-
kann mir jemand helfen??? Ich komme nicht wirklich voran!!
-
Hol dir den aktuellen Tag als TDateTime, z.B. mit Now().
Anschliessend erhöhst du diesen Wert jeweils um einen Tag bis an's Ende des Monats, dito (aber mit Substraktion) rückwärts bis zum Anfang des Monats. Und für andere Monate machst du das genauso, statt Now() zu benutzen gibst du dort halt z.B. den Ersten des Monats fest vor.Wie schon gesagt, zu TDateTime findest du hier zig Beispiele, insbesondere auch zum "Addieren".
-
Irgendwie ist mir das alles total unklar.
Ich bekomme über ein Edit-Feld mein Jahr und über meine ComboBox meinen Monat und dann möchte ich in dem StringGrid die Wochentage angezeigt haben. Nur irgendwie weiß ich noch nicht wirklich wie ich das machen soll. Kann mir denn da niemand helfen? Ich komme mit diesen ganzen TDateTime-Funktionen nicht klar, weil irgendwie habe ich da noch nicht wirklich etwas gefunden, was mich hier weiterbringt. Ich komme immer nur kurzzeitig weiter, aber nie für ein Jahr und einen Monat!!!
-
probier mal dass: (Stell dein Stringgrid auf min. 7x7)
int FirstDayOfWeek = 1; // hier kannst du angeben, mit welchem Tag die Woche beginnt (1 == Mo, 7 == So) int Year = 2003; // hier übergibst du das anzuzeigende Jahr int Month = 11; // und hier den Monat int FirstDayOfMonth = (DayOfWeek(EncodeDate(Year, Month, 1)) - FirstDayOfWeek - 1) % 7; if(FirstDayOfMonth<0) FirstDayOfMonth += 7; for(int i=0; i<7; i++) StringGrid1->Cells[i][0] = ShortDayNames[(i + FirstDayOfWeek) % 7]; for(int i=0; i<DaysInMonth(Month); i++) StringGrid1->Cells[(i + FirstDayOfMonth) % 7][(i + FirstDayOfMonth) / 7 + 1] = IntToStr(i + 1);
-
Erstmal Danke für den Code, ich hab das mal bei mir hinzugefügt, allerdings erscheint dann bei mir folgender Fehler:
[C++Fehler] Unit1.cpp(61): Call to undefined function 'DaysInMonth'.
Als zweites hätte ich da noch:
wie bekomme ich aus meinen Funktionen
void __fastcall TForm1::UpDown1Click(TObject *Sender, TUDBtnType Button) { int year; year=StrToInt(Edit6->Text); Edit7->Text=IntToStr(year); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1Change(TObject *Sender) { Edit8->Text = ComboBox1->ItemIndex+1; }
das Jahr und den Monat (ComboBox1->ItemIndex+1) an die Stelle übergeben, wo du sie initialisierst mit
Month = 11;
Year = 2003;Das muß während der Laufzeit des Programmes funktionieren. Oder könnte ich das in einer der beiden Aufrufe machen und nur den anderen Teil übernehmen. Also z.Bsp.:
in ComboBox1Change deine Funktionen schreiben und das Jahr von UpDown1Click übergeben lassen? Wenn ja wie muß ich das mit dem übergeben machen?
-
als erstes solltest du fogende headerdatei einbinden, damit du die DateTime-Funktionen benutzen kannst:
#include <DateUtils.hpp>
ich hab meinen code mal in eine funktion gepackt, die du dann ausführen mußt, wenn sich das datum oder der monat ändert
void __fastcall TForm1::ShowCalendar(int FirstDayOfWeek, int Year, int Month) { for(int i=0; i<7; i++) for(int j=0; j<7; j++) StringGrid1->Cells[i][j] = ""; int FirstDayOfMonth = (DayOfWeek(EncodeDate(Year, Month, 1)) - FirstDayOfWeek - 1) % 7; if(FirstDayOfMonth<0) FirstDayOfMonth += 7; for(int i=0; i<7; i++) StringGrid1->Cells[i][0] = ShortDayNames[(i + FirstDayOfWeek) % 7]; for(int i=0; i<DaysInMonth(Month); i++) StringGrid1->Cells[(i + FirstDayOfMonth) % 7][(i + FirstDayOfMonth) / 7 + 1] = IntToStr(i + 1); } //--------------------------------------------------------------------------- void __fastcall TForm1::ComboBox1Change(TObject *Sender) //mußt evtl. noch den code auf deine combobox anpassen { ShowCalendar(1, StrToInt(Edit1->Text), ComboBox1->ItemIndex + 1); } //--------------------------------------------------------------------------- void __fastcall TForm1::Edit1Change(TObject *Sender) //dass selbe gilt für dein Edit-Feld { if(StrToInt(Edit1->Text) >= 1900 && StrToInt(Edit1->Text) <= 2100) ShowCalendar(1, StrToInt(Edit1->Text), ComboBox1->ItemIndex + 1); }
vergiss nicht folgende zeile noch in die header-datei deiner form einzubinden:
void __fastcall ShowCalendar(int FirstDayOfWeek, int Year, int Month);
du mußt auch noch dafür sorgen dass im editfeld nur zahlen erlaubt werden, sonnst fliegt dir dein Programm um die ohren
falls du nochmal eine fehlermeldung erhälst, dann versuch dich vor dem nächsten post erstmal selber schlau zu machen
hättest du mal Strg+F1 auf "DaysInMonth" gedrückt, dann hätte dir eigentlich gleich die dazugehörge header-datei ins auge fallen dürfen
das selbe gillt für jegliche fehlermeldungen. ein druck auf F1 bewirkt manchmal wunder
-
Hab die nächste Fehlermeldung und habe deinen Tipp mit F1 auch ausgeführt, allerdings hat mich das nicht weitergebracht:
[C++Fehler] Unit1.cpp(4): Unable to open include file 'DateUtils.hpp'.
Da kommt dann irgendwas mit einer Config.sys Datei, woher bekomme ich diese???
Und wie komme ich an die Header-Datei für mein Form??
Ok, ich bin vielleicht ziemlich schwierig, aber ich habe auch erst mit dem Programmieren mit dem C++-Builder angefangen. Also bitte verzeih diese dummen Fragen!!!
-
Das mit der Headerdatei hat sich erledigt die habe ich gefunden, jetzt steht nur noch die Fehlermeldung wegen dem include.
Kannst du mir da helfen?
-
wo hast du denn die zeile
#include <DateUtils.hpp>
hingeschrieben
zu deiner header-datei gelangst du über den karteikartenreiter am unteren rand deines Editors (Unit1.h)
die zeile mußt du dann unter dem punkt
__published:
eintragen
an deiner stelle würde ich mir mal ein paar tutorials durchlesen oder mir ein buch kaufen/ausleihen um dich erstmal mit dem bcb vertraut zu machen
-
Die Zeile #include <DateUtils.hpp> habe ich in meine Unit1.cpp ganz oben bei den ganzen Include-Dateien mit hingeschrieben!
Ich habe mir ja schon ein Buch bestellt, aber das wurde noch nicht geliefert.
-
ich weiß nun nicht, ob es die DateUtils.hpp schon im BCB3 gibt
versuch mal DateUtils.h
-
Sonnenschein84 schrieb:
Die Zeile #include <DateUtils.hpp> habe ich in meine Unit1.cpp ganz oben bei den ganzen Include-Dateien mit hingeschrieben!
Vergiß es, die Datei gibt's im CBuilder 3 noch nicht (zumindest finde ich sie nicht in meinem CBuilder 4).
Sonnenschein84 schrieb:
Ich habe mir ja schon ein Buch bestellt, aber das wurde noch nicht geliefert.
Frage: Warum machst Du das alles - zum üben oder hast Du ein (bezahltes) Projekt am laufen? Es gibt nämlich haufenweise Komponenten für Kalender und Terminplaner. Als Lern-Einstieg würde ich das Programmieren mit dem TStringGrid nicht gerade empfehlen und ich bezweifle stark, daß Du in dem Buch etwas darüber finden wirst ...