Registriert seit: 24. Okt 2004
Ort: Walldorf
197 Beiträge
Delphi 10.1 Berlin Starter
|
Re: Habe den überblick verloren....
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.
|
|
Zitat
|