Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Datumsdifferenz in Combobox anzeigen?!
Adrasteia - Do 23.10.08 14:38
Titel: Datumsdifferenz in Combobox anzeigen?!
Hi Leute,
ich nutze Delphi 2007 und auch auf die Gefahr hin, einer erneuten Frage in der Richtung,
ich habe zwei Daten zb. 01.10.2008 und den 13.10.2008 beide stehen in einer dbmemo (das erkennt delphi auch)
ich möchte nun, dass in einer schleife vom 1. bis zum einschließlich 13. hochgezählt wird und mir diese ergebnisse in combobox1
zb.
--01.10.2008
--02.10.2008
--03.10.2008 etc. ausgewiesen werden ich hatte mir das bis jetzt so gedacht?!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm6.DBComboBox2Change(Sender: TObject); var i:double; var Datum1:TDateTime; var Datum2: TDateTime; begin Datum1 := StrToDate (DBMemo2.Text); Datum2 := StrToDate (DBMemo3.Text); i := 1; repeat canvas.TextOut(i); i := datum1 + i until i = Datum2; end; |
aber noch funktioniert es nicht und ich verzweifel langsam, bin doch echt am suchen wie ne große und habe in der richtung auch viele ansätze gefunden, aber es funtz nicht, wie ich das möchte
wäre nett, wenn ihr mir da helfen könntet, :D
Moderiert von
matze: Code- durch Delphi-Tags ersetzt
Adrasteia - Do 23.10.08 16:04
nein nicht dieselbe klasse ;)
aber so ähnlich
ok, hab ich mir angesehen, aber dann noch von mir ne frage dazu
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| procedure ListDaysBetween(FirstDate, SecondDate: TDate; const sList: TStrings); var CurrDate: TDate; begin sList.BeginUpdate; try sList.Clear; CurrDate := trunc(FirstDate); while CurrDate <= trunc(SecondDate) do begin sList.Add(DateToStr(CurrDate)); CurrDate := CurrDate + 1; end; finally sList.EndUpdate; end; end; |
welcher teil davon wirft mir meine informationen zu? sprich: siehe fragen im quelltext
danke für den hinweis
Moderiert von
matze: Code- durch Delphi-Tags ersetzt
Delete - Do 23.10.08 16:50
Genau an der Stelle wird das Datum eingetragen. Der Parameter sList ist vom Typ TStrings, Du kannst also z.B. ComboBox.Items oder ListBox.Items oder Memo.Lines oder jeden anderen Nachfolger von TStrings übergeben.
Adrasteia - Do 23.10.08 16:57
Hi DeddyH
in meinem programm habe ich auf dem anderen formular mit einer dblookupcombobox gearbeitet und mir werden alle namen angezeigt (ohne quellcode, nur durch einstellungen im objectinspector) *freu*
nun meine frage, wo liegt denn da der unterschied?
warum ging das mit der combobox nicht auch so? :( aber ok wenigstens die eine hälfte geht wie es soll
mit dem datum von dir, ich weiß nicht noch habe ich nicht rausgefunden, wie genau es funtz, keine fehlermeldung und nicht, aber es passiert nichts offensichtliches
Delete - Do 23.10.08 17:05
Die datensensitiven Komponenten (also die, die mit "DB" beginnen) erwachen zum Leben, sobald alle Einstellungen korrekt und sie mit der Datenbank verbunden sind, und das auch in der IDE. Wenn Du solch ein Verhalten auch mit einer normalen ComboBox realisieren möchtest, müsstest Du eine eigene Ableitung davon schreiben.
Delete - Do 23.10.08 17:56
Ich habe mal aus Lust und Laune in meine Trickkiste gegriffen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| type TComboBox = class(StdCtrls.TComboBox) private FStartDate, FEndDate: TDate; procedure ListDaysBetween(FirstDate, SecondDate: TDate); procedure SetStartdate(const Value: TDate); procedure SetEndDate(const Value: TDate); public constructor Create(AOwner: TComponent);override; property StartDate: TDate read FStartDate write SetStartdate; property EndDate: TDate read FEndDate write SetEndDate; end; |
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:
| constructor TComboBox.Create(AOwner: TComponent); begin inherited; FStartDate := Date; FEndDate := Date + 7; ListDaysBetween(FStartDate,FEndDate); end;
procedure TComboBox.ListDaysBetween(FirstDate, SecondDate: TDate); var CurrDate: TDate; begin Items.BeginUpdate; try Items.Clear; CurrDate := trunc(FirstDate); while CurrDate <= trunc(SecondDate) do begin Items.Add(DateToStr(CurrDate)); CurrDate := CurrDate + 1; end; finally Items.EndUpdate; end; end;
procedure TComboBox.SetEndDate(const Value: TDate); begin FEndDate := Value; ListDaysBetween(FStartDate,FEndDate); if Items.Count > 0 then ItemIndex := 0; end;
procedure TComboBox.SetStartdate(const Value: TDate); begin FStartDate := Value; ListDaysBetween(FStartDate,FEndDate); if Items.Count > 0 then ItemIndex := 0; end; |
Nun kannst Du im Programm mal ComboBox.StartDate oder ComboBox.EndDate neu setzen und sehen, was passiert ;)
Adrasteia - Fr 24.10.08 08:36
cool ;)
danke
auch für die erkärungen *freu*
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!