![]() |
Delphi-Version: XE
TMonthCalendar + Tage Fett markieren + Schleife
Hallo zusammen,
ich bin neu in diesem Forum und nicht sicher ob ich das richtige "Abtei" benutze ,falls nicht sry. Nun zu meinem Problem: Ich benutze (wie oben im Titel erwähnt) die Komponente TMonthCalendar und möchte bestimmte Tage, welche ich aus einer Datenbank beziehe Fett markieren. Das klaptt soweit auch, allerdings haben ich das Problem das ich wenn ich das Schleifen basierend mache (da ich ich immer eine unbestimmte menge an Tagen nacheinander habe aber nie mehr als 15) das diese nicht Fett dargestellt werden. Hier mal der Code damit ihr meine Problematik besser nachvollziehen könnt:
Delphi-Quellcode:
Falls unklarheiten vorhanden sind einfach sagen , ich drücke mich gern mal etwas ungenau aus.
procedure TFormHotelbuchungsassistent.MonthCalendar1Click(Sender: TObject);
var sl_date: TStringList; s_day: string; s_year: string; s_sql: string; i_i1: integer; i_anzahl_tage: integer; i_i2: integer; MonthBoldInfo: Cardinal; begin sl_date := TStringList.Create; sl_date.Delimiter := '.'; sl_date.StrictDelimiter := True; sl_date.DelimitedText := DateToStr(MonthCalendar1.Date); s_day := sl_date[0]; s_month := sl_date[1]; s_year := sl_date[2]; s_sql := 'SELECT datum_start,buchungszeitraum FROM hotelbuchungsassistent.buchung WHERE EXTRACT(MONTH FROM datum_start) = ' + s_month; PSQLQuery1.Close; PSQLQuery1.SQL.Clear; PSQLQuery1.SQL.Add(s_sql); PSQLQuery1.Open; for i_i1 := 0 to PSQLQuery1.RecordCount - 1 do begin sl_date.DelimitedText := PSQLQuery1.FieldByName('datum_start').AsString; i_start_datum := StrToInt(sl_date[0]); i_anzahl_tage := PSQLQuery1.FieldByName('buchungszeitraum').AsInteger; for i_i2 := i_start_datum to (i_anzahl_tage + i_start_datum) - 1 do begin SetLength(a_day, Length(a_day) + 1); a_day[Length(a_day) - 1] := i_i2; end; end; MonthCalendar1GetMonthInfo(MonthCalendar1, StrToInt(sl_date[1]), MonthBoldInfo); end; procedure TFormHotelbuchungsassistent.MonthCalendar1GetMonthInfo (Sender: TObject; Month: Cardinal; var MonthBoldInfo: Cardinal); begin if Length(a_day) <> 0 then begin MonthCalendar1.BoldDays(a_day, MonthBoldInfo); SetLength(a_day, 0); end; end; Danke im vorraus ps: Bin auch noch anfänger also bitte seid gnädig :wink: |
AW: TMonthCalendar + Tage Fett markieren + Schleife
Hallo und Willkommen in der DP :dp:,
Du navigierst nicht durch Dein Dataset, sondern stehst immer auf demselben Datensatz. Statt einer For-Schleife bis RecordCount solltest Du es einmal so versuchen:
Delphi-Quellcode:
PSQLQuery1.Open;
while not PSQLQuery1.EOF do begin (* Datensatz verarbeiten *) PSQLQuery1.Next; end; |
AW: TMonthCalendar + Tage Fett markieren + Schleife
Erst mal danke für die Hilfe,
allerdings denke ich das ich es wieder geschafft habe mich falsch auszudrücken:oops: die sachen von wegen immer 1.Datensatz das weiß ich und wollte ich auch noch ändern ist aber der zeit nicht mein problem: also sagn wir mal ich habe das datum 10.12.2012 und bin am ende der inneren for-schleife angekommen dann stehen im array a_day die korrekten daten: [0]=10 [1]=11 [2]=12 [3]=13 [4]=14 (weil 5 tage einschließlich 10.12.2012) diese tage rufe ich dann in MonthCalendar1.BoldDays(a_day,MonthBoldInfo) wieder auf (und auch da sind sie Korrekt) werden aber nicht markiert wenn ich allerding vor den start in eben dieser die daten vordefiniere (heißt ich habe sie vor dem start manuell gesetzt werden sie fett angezeigt also z.b. MonthCalendar1.BoldDays([1,3,6,9],MonthBoldInfo) (natürlich ohne if zeug) danke im vorraus |
AW: TMonthCalendar + Tage Fett markieren + Schleife
Das Problem hat sich erledigt:-D:-D
Für die, die es interessiert hier meine Lösung:
Delphi-Quellcode:
Falls jemad was nicht versteht einfach fragen (bin zwar anfänger aber arbeite schon so lange an diesem Problem das ich genau sagen kann was wo passiert und warum :wink:)
procedure TForm16.GetMarkingDays();
var MonthBoldInfo: Cardinal; sl_date: TStringList; s_sql: string; i_i1: Integer; i_i2: Integer; s_day: string; s_month: string; s_year: string; i_start_date: Integer; i_amount_days: Integer; begin sl_date := TStringList.Create; sl_date.Delimiter := '.'; sl_date.StrictDelimiter := True; sl_date.DelimitedText := DateToStr(MC1.Date); s_day := sl_date[0]; s_month := sl_date[1]; s_year := sl_date[2]; PSQLQuery1.Close; PSQLQuery1.SQL.Clear; s_sql := 'SELECT datum_start,buchungszeitraum '+ 'FROM hotelbuchungsassistent.buchung '+ 'WHERE EXTRACT(MONTH FROM datum_start) = ' + s_month + ' ' + 'ORDER BY EXTRACT(DAY FROM datum_start)'; PSQLQuery1.SQL.Add(s_sql); PSQLQuery1.Open; for i_i1 := 0 to PSQLQuery1.RecordCount - 1 do begin sl_date.DelimitedText := PSQLQuery1.FieldByName('datum_start').AsString; i_start_date := StrToInt(sl_date[0]); i_amount_days := PSQLQuery1.FieldByName('buchungszeitraum').AsInteger; for i_i2 := i_start_date to (i_amount_days + i_start_date) - 1 do begin SetLength(a_day, Length(a_day) + 1); a_day[Length(a_day) - 1] := i_i2; end; PSQLQuery1.Next; end; b_markieren := True; MC1.OnGetMonthInfo(MC1, 12, MonthBoldInfo); MarkingDays(); end; procedure TForm16.MarkingDays(); var s_date1: string; s_date2: string; s_date_complete: string; sl_date: TStringList; begin s_date_complete := DateToStr(MC1.Date); sl_date := TStringList.Create; sl_date.Delimiter := '.'; sl_date.StrictDelimiter := True; sl_date.DelimitedText := s_date_complete; s_date1 := sl_date[0]+'.'+sl_date[1]+'.'+IntToStr(StrToInt(sl_date[2])+4); s_date2 := sl_date[0]+'.'+sl_date[1]+'.'+sl_date[2]; MC1.Date := StrToDate(s_date1); MC1.Date := StrToDate(s_date2); end; Jatzt habe ich aber das Problem das ich diese Tage nicht wieder Normal bekomme, also das sie nicht mehr Fett sind. Gibt es irgendwie eine möglichkeit das ich Objekt neu lade also das ich das wie beim start wiederfinde? Danke im vorraus |
AW: TMonthCalendar + Tage Fett markieren + Schleife
In deiner Methode MarkingDays baust du dir (exorbitant umständlich) aus einem Datum
Delphi-Quellcode:
zwei String Werte und weist diese beiden Stringwerte dann wieder
MC1.Date
Delphi-Quellcode:
zu.
MC1.Date
Das ist ja wohl eine Zuweisung zuviel ... ;) |
AW: TMonthCalendar + Tage Fett markieren + Schleife
Liste der Anhänge anzeigen (Anzahl: 1)
Ich hänge mal ein Demo zum MonthCalendar an.
Mit der Hilfsklasse in Unit UMonthBoldStorage kann man jeden einzelnen Tag eines Jahres einzeln markieren und damit "fett" darstellen. |
AW: TMonthCalendar + Tage Fett markieren + Schleife
@sir rufus
das mit dem zuweisen von date ist nur dami der die Änderung auch durchführt, sprich so das ich als Benutzer das auch sehen kann (habe das auch schon mit refresh, repaint und was es sonst noch so gibt versucht aber endweder mache ich was falsch oder das geht wirklich nicht) weil man sonst einen Monat zurück bzw. vor muss. @shmia ich bin zwar dankbar für die Hilfe aber dennoch ändert sich die Tatsache nicht das ich anfänder bin (auch wenn meine code vielleicht eine andere sprache spricht) und nicht so recht verstehe was da genau passier und wie ich das ganze jetzt einbinden müsste. und das Markieren geht ja Problemlos nur bekomme ich diese nicht mehr in Normalfigur:). |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz