![]() |
Neusten Termin aus ListView
Hi,
ich programmiere im Moment eine Art Organizer. Natürlich werden auch Termine verwaltet. Ich möchte nun in mein Programm einbauen, dass der nächste Termin, quasi als Countdown, angezeigt wird. Ich muss also erst die ListView durchsuchen und dann immer den neusten Termin herausfinden. Ich habe mich da schonmal dran versucht, aber es hat noch kleinere Probleme gegeben. Wäre nett, wenn mir jemand helfen könnte (in Form von Code). Danke schonmal! Gruß Yheeky |
Was gab es den für Probleme? Was genau kannst du nicht?
|
Moin Yheeky,
in welcher Form speicherst Du denn den Zeitpunkt des Termines ab? |
Bin gerade auf etwas aufmerksam geworden...ich teste das mal...vielleicht liegt´s daran :lol:
Wenn das nicht klappt frage ich hier später nochmal. Gruß Yheeky |
Geht nicht :cry:
Also hier nochmal eine etwas genauere Erklärung: Ich habe beispielsweise 3 Daten in meiner Terminliste:
Code:
Dann weise ich bei Programmstart immer dem ersten Eintrag in der Liste den neusten Termin zu, damit man einen Referenztermin hat. Dann wollte ich überprüfen lassen, ob es einen Termin gibt, der näher liegt, als der Referenztermin, aber noch nicht vorbei ist (sprich, schon in der Vergangenheit liegt *g*). Das hat aber nicht so richtig geklappt. Manchmal hat er es richtig angezeigt, aber manchmal hat er einfach den 29.06.02 als neusten Termin angezeigt (hat den Referenztermin wohl nicht verändert), obwohl der 28.06 ja näher liegt.
Termin1 - Datum 29.06.02 - 15:00
Termin2 - Datum 30.06.02 - 14:00 Termin3 - Datum 28.06.02 - 16:00 @Christian Seehase: Was meinst du genau? Gruß Yheeky |
Moin Yheeky,
ich meinte, ob Du die Termine direkt aus den Items des ListViews ausliest, oder ob Du mit Objekten arbeitest, die diesen zugeordnet sind. |
Ich bin noch am verzweifeln...heute morgen habe mein Programm aufgerufen und was sehe ich da...es wird wieder falsch dargestellt. Ich kann´s mir nicht erklären. Vor Ratlosigkeit habe ich die ganze Procedure nochmal gelöscht und neu angefangen. Bisher habe ich folgendes:
Code:
Das funktioniert einwandfrei, wenn der Termin das heutige Datum hat, wird das als neuster Termin angezeigt (und die Procedure wird beendet). Aber nun möchte ich herausfinden, welcher Termin der neuste ist, wenn er nicht das heutige Datum besitzt. Wäre nett, wenn mir jemand helfen könnte.
var I : Integer;
NeustesDatum : String; ... for I := 0 to SmartListView1.Items.Count-1 do begin if (StrToDate(SmartListView1.Items[I].SubItems[1])) = Date then begin NeustesDatum := SmartListView1.Items[I].SubItems[1]; // Nach Zeit suchen Edit1.Text := NeustesDatum; Exit; end else ... Danke schonmal! Gruß Yheeky |
@Christian Seehase: Wie du oben im veränderten Posting siehst, lese ich die Daten direkt aus der ListView (SmartListView) aus...
|
Hi
Hab in einem alten Programm von mir folgenden Code gefunden:
Code:
Ist zwar nicht das wonach du eigenltich suchst, aber das müßte dir doch etwas weiterhelfen.
procedure TForm1.Terminkontrolle;
var i:integer; begin For i:=0 to ListView1.Items.Count-1 do If (StrtoDate(ListView1.Items.Item[i].Caption)<=Date+14)and(StrtoDate(ListView1.Items.Item[i].Caption)>=Date) then ListView1.Items.Item[i].ImageIndex:=0 else If StrtoDate(ListView1.Items.Item[i].Caption)<Date then ListView1.Items.Item[i].ImageIndex:=1 else ListView1.Items.Item[i].ImageIndex:=-1; end; Ansonsten schreib dir doch ne procedure, die das ListView nach dem Datum sortiert. Gruß |
Ein ListView-Sortier Algorithmus habe ich soeben in die Faq's geschrieben.
|
Danke erstmal, aber das Problem ist, dass ich sowohl nach Datum, als auch nach der Uhrzeit sortieren müsste. Mit der Variante im FAQ ist nur eines von beiden möglich, wie ich soeben getestet habe. Ich müsste es also mit einer einfachen Abfrage machen, mit welcher ich ja auch schon begonnen habe.
@Tpercon: Was hast du mit deiner Terminkontrolle eigentlich genau kontrolliert? Gruß Yheeky |
Oder du verteilst Datum und Uhrzeit auf 2 Spalten. Könnte man dadurch sogar einfach editieren.
|
Sind 2 Spalten...
|
Ich habe mir damals an Hand von Symbolen anzeigen lassen, mit wem man innerhalb der nächsten 14 Tage einen Termin hat...
Dass Sortieren ist doch kein Problem, du mußt doch die Uhrzeit nur noch ins Spiel bringen, wenn das Datum gleich ist. Falls du noch Code brauchst, sag bescheid. Komme aber frühestens erst morgen früh dazu. Gruß |
Also ich habe meine letzte Procedure überarbeitet und nun kam ich zu folgender:
Code:
Hier muss ich jetzt noch die zum nächsten Termin zugehörige Uhrzeit auslesen. Könnte mir dazu jemand Tipps geben? Wie könnte ich das machen?
public
FirstTimeDate, FirstTimeTime : Boolean; Datum, Zeit : Integer; Datum1, Datum2, Zeit1, Zeit2 : TDateTime; . . . procedure TForm1.SucheNeustenTermin; var I : Integer; begin for I := 0 to SmartListView1.Items.Count-1 do begin Datum1 := EncodeDate(StrToInt(Copy(SmartListView1.Items[I].SubItems[1],7,4)),StrToInt(Copy(SmartListView1.Items[I].SubItems[1],4,2)),StrToInt(Copy(SmartListView1.Items[I].SubItems[1],0,2))); Datum2 := EncodeDate(StrToInt(Copy(DateToStr(Date),7,4)),StrToInt(Copy(DateToStr(Date),4,2)),StrToInt(Copy(DateToStr(Date),0,2))); Datum := Trunc(Datum1) - Trunc(Datum2); if Datum = 0 then if SmartListView1.Items.Count = 1 then StatusBar2.Caption := SmartListView1.Items[I].SubItems[1] + ' / ' + SmartListView1.Items[I].SubItems[2]; if Datum > 0 then begin if FirstTimeDate = True then begin Datum1 := EncodeDate(StrToInt(Copy(SmartListView1.Items[0].SubItems[1],7,4)),StrToInt(Copy(SmartListView1.Items[0].SubItems[1],4,2)),StrToInt(Copy(SmartListView1.Items[0].SubItems[1],0,2))); Datum2 := EncodeDate(StrToInt(Copy(DateToStr(Date),7,4)),StrToInt(Copy(DateToStr(Date),4,2)),StrToInt(Copy(DateToStr(Date),0,2))); Datum := Trunc(Datum1) - Trunc(Datum2); NeustesDatum := IntToStr(Datum); end; Datum1 := EncodeDate(StrToInt(Copy(SmartListView1.Items[I].SubItems[1],7,4)),StrToInt(Copy(SmartListView1.Items[I].SubItems[1],4,2)),StrToInt(Copy(SmartListView1.Items[I].SubItems[1],0,2))); Datum2 := EncodeDate(StrToInt(Copy(DateToStr(Date),7,4)),StrToInt(Copy(DateToStr(Date),4,2)),StrToInt(Copy(DateToStr(Date),0,2))); Datum := Trunc(Datum1) - Trunc(Datum2); if SmartListView1.Items.Count = 1 then StatusBar2.Caption := SmartListView1.Items[I].SubItems[1] + ' / ' + SmartListView1.Items[I].SubItems[2]; if Datum < StrToInt(NeustesDatum) then begin StatusBar2.Caption := SmartListView1.Items[I].SubItems[1] + ' / ' + SmartListView1.Items[I].SubItems[2]; NeustesDatum := IntToStr(Datum); FirstTimeDate := False; end; end; end; end; Die EncodeTime Funktion funktionierte komischerweise nicht so, wie ich mir das vorgestellt habe, obwohl ich sie wie die Funktion EncodeDate angewendet habe. Als Ergebnis bekomme ich immer 0. Gruß Yheeky |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:14 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