Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Neusten Termin aus ListView (https://www.delphipraxis.net/277-neusten-termin-aus-listview.html)

Yheeky 27. Jun 2002 19:00


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

Daniel B 27. Jun 2002 19:03

Was gab es den für Probleme? Was genau kannst du nicht?

Christian Seehase 27. Jun 2002 19:04

Moin Yheeky,

in welcher Form speicherst Du denn den Zeitpunkt des Termines ab?

Yheeky 27. Jun 2002 22:49

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

Yheeky 27. Jun 2002 23:32

Geht nicht :cry:

Also hier nochmal eine etwas genauere Erklärung: Ich habe beispielsweise 3 Daten in meiner Terminliste:

Code:
Termin1 - Datum 29.06.02 - 15:00
Termin2 - Datum 30.06.02 - 14:00
Termin3 - Datum 28.06.02 - 16:00
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.

@Christian Seehase: Was meinst du genau?

Gruß Yheeky

Christian Seehase 27. Jun 2002 23:56

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.

Yheeky 27. Jun 2002 23:56

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:
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
...
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.

Danke schonmal!

Gruß Yheeky

Yheeky 28. Jun 2002 14:20

@Christian Seehase: Wie du oben im veränderten Posting siehst, lese ich die Daten direkt aus der ListView (SmartListView) aus...

Tpercon 28. Jun 2002 14:41

Hi

Hab in einem alten Programm von mir folgenden Code gefunden:
Code:
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;
Ist zwar nicht das wonach du eigenltich suchst, aber das müßte dir doch etwas weiterhelfen.
Ansonsten schreib dir doch ne procedure, die das ListView nach dem Datum sortiert.

Gruß

Daniel B 28. Jun 2002 14:47

Ein ListView-Sortier Algorithmus habe ich soeben in die Faq's geschrieben.

Yheeky 28. Jun 2002 15:20

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

Daniel B 28. Jun 2002 15:22

Oder du verteilst Datum und Uhrzeit auf 2 Spalten. Könnte man dadurch sogar einfach editieren.

Yheeky 28. Jun 2002 15:26

Sind 2 Spalten...

Tpercon 28. Jun 2002 17:29

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ß

Yheeky 28. Jun 2002 22:46

Also ich habe meine letzte Procedure überarbeitet und nun kam ich zu folgender:

Code:
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;
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?
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:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz