Einzelnen Beitrag anzeigen

Benutzerbild von dor557
dor557

Registriert seit: 24. Okt 2004
Ort: Walldorf
197 Beiträge
 
Delphi 10.1 Berlin Starter
 
#6

Re: Habe den überblick verloren....

  Alt 15. Jan 2009, 02:00
@Sir Rufo

Danke dür deine mühe. Habe kurz vor deinem eintrag einen lösungsweg gefunden.

der sieht auf der nersten blick ähnlich aus habe 2 Funktionen geschrieben:

einmal :

Delphi-Quellcode:
Procedure TForm1.NightCalc(Beginn : double; Ende : Double; Gesamt : Double; var NightHours : Double);
var Nacht,Nacht1,Nacht2 : double;
begin
  Nacht1 := 0;
  Nacht2 := 0;
  if (Beginn >= strtotime('20:00')) and (ende <= strtotime('06:00')) then
    Nacht := Gesamt else
  begin
    if ((Beginn <= strtotime('20:00')) and (Beginn >= strtotime('06:00'))) then
        Nacht1 := strtotime('04:00');
    if Ende <= strtotime('06:00') then
        Nacht2 := ende;
    if (Ende > strtotime('06:00')) then
        Nacht2 := strtotime('06:00');
    if Beginn >= strtotime('20:00') then
        Nacht1 := (StrToDateTime('23:59:59') - Beginn) + StrToTime('00:00:01');
    Nacht := Nacht1 + Nacht2;
  ShowMessage(' Nacht1 = ' + format('%.2f',[Nacht1*24]) + ' und nacht2 = ' + format('%.2f',[Nacht2*24]));
  end;
  NightHours := Nacht;
end;
und dann noch die

Delphi-Quellcode:
Procedure TForm1.TagCalc(Beginn : double; Ende : Double; var NightHours : Double);
var Nacht,Nacht1,Nacht2,
    std, std2, std3 : double;
begin
  if beginn <= strtotime('6:00') then
  begin
    nacht1 := strtotime('6:00') - beginn;
  end else
  if Beginn >= strtotime('6:00') then
  begin
    nacht1 := strtofloat('0,00');
  end;
  if Ende >= strtotime('20:00') then
  begin
    nacht2 := Ende - strtotime('20:00');
  end else
  if Ende <= strtotime('20:00') then
  begin
    if Ende >= strtotime('06:00') then
      nacht2 := strtofloat('0,00');
  end;
  NightHours := Nacht1 + Nacht2;

end;
und der aufruf geht dann wie folgt :

Delphi-Quellcode:
procedure TForm1.ListView1DblClick(Sender: TObject);
var von, bis, TeilOne, TeilTwo : double;
    gesamt, TagGes, NachtGes : Double;
begin
  TagGes := 0;
  TeilOne := 0;
  TeilTwo := 0;
  Gesamt := 0;
  FEingabe.Datum.Text := ListView1.ItemFocused.Caption;
  FEingabe.Von.text := '';
  FEingabe.bis.Text := '';
  if FEingabe.showModal = mrOK then
  begin
    With Tage[strtoint(ListView1.ItemFocused.Caption)] do
    begin
      Tag := TagName[DayOfTheWeek(StrToDate(ListView1.ItemFocused.Caption+'.'+inttostr(Monat.Items.IndexOf(Monat.Text)+1)+'.'+Jahr.Text))];
      ArVon := Feingabe.Von.Text;
      ArBis := Feingabe.Bis.Text;
      von := StrToDateTime(FEingabe.Von.Text);
      bis := StrToDateTime(Feingabe.bis.Text);
      if von > bis then
      begin
        TeilOne := (StrToDateTime('23:59:59') - von); // zeit bis um 00:00 Uhr errechnen
        TeilTwo := (bis - StrToDateTime('00:00:01')); // zeit von null bis endzeit errechnen
        Gesamt := TeilOne + TeilTwo + StrToDateTime('00:00:02'); // Gesamtstunden errechnen
        NightCalc(von,bis,Gesamt,NachtGes);
      end else
      begin
        Gesamt := (bis - von);
        if Gesamt > (NachtGes) then
           Gesamt := (bis-von) else Gesamt := NachtGes;
        TagCalc(von,bis,NachtGes);
      end;
      if (von >= strtotime('20:00')) and (bis >= strtotime('20:00')) then
      NachtGes := gesamt;
      if (von <= strtotime('06:00')) and (bis <= strtotime('06:00')) then
      NachtGes := gesamt;
      TagGes := Gesamt - NachtGes;
      TStd := format('%.2f',[TagGes*24]);
      NStd := format('%.2f',[NachtGes*24]);
      GesamtStd := format('%.2f',[Gesamt*24]);
    end;
    with ListView1.ItemFocused do
    begin
      Subitems.Clear;
      SubItems.Add(Tage[strtoint(ListView1.ItemFocused.Caption)].Tag);
      SubItems.Add(FEingabe.Von.Text);
      Subitems.Add(Feingabe.bis.Text);
      Subitems.Add(Tage[strtoint(ListView1.ItemFocused.Caption)].TStd);
      Subitems.Add(Tage[strtoint(ListView1.ItemFocused.Caption)].NStd);
      Subitems.Add(Tage[strtoint(ListView1.ItemFocused.Caption)].GesamtStd);
    end;
    ListView1.GetNextItem(ListView1.ItemFocused,sdBelow,[isNone]).Selected := true;
    ListView1.GetNextItem(ListView1.ItemFocused,sdBelow,[isNone]).Focused := true;
  end;
end;
das ergebnis ist das geleiche denke ich mal. man sieht nur mal wieder das verschiedene wege nach rom Führen

Danke für die Antowrten.

gruss Sascha
Sascha Nickel
Man muss die Dinge nehmen wie sie kommen, man kann aber auch dafür sorgen das die dinge so kommen wie man sie nehmen möchte.
  Mit Zitat antworten Zitat