Procedura po 30 dniach

0

Mam takie pytanie, ponieważ sam nic niemoge wymyślić, jak wykonać procedure (chodzi mi o czyszczenie RichEdit) po określonym czasie wpisanym w Edit w dniach, np.: wyczyść RichEdit po 30 dniach ? Coś kombinuje z zapisem aktualnej daty do pliku i przy starcie jakoś analizowanie tych danych, ale niewiem jak to zrobić, bardzo proszę o pomoc, sam niedam radu :(

0

Sprobuj :
var Year,Month,Day,wYear,wMonth,wDay,dYear,dMonth,dDay:word;
begin
decodeDate(now,Year,Month,Day);
decodeDate(StrToDate(data pobrana z pliku - typu String),wYear,wMonth,wDay);
dDay := Day - wDay;
dMonth := Month - wMonth
if (dDay = 30) or (dMonth = 1) then ShowMessage('Minelo 30dni');

0

zapisz aktualną datę do pliku\rejestru oraz 'okres ważności' następnie przy uruchomieniu proga porównuj bieżącą datę z datą, która powstanie po odjęciu wpisanej liczby dni od zapisanej daty

0

Już zabieram się do testowania, tylko jeszcze małe pytanko: w jakim formacie ma być ta data ? 15.07.2004 niedziała :/ Ale i tak już stokrotne dzięki [browar]

0

OK postać daty już mam, tylko ktoś by mógł mi powiedzieć dlaczego mam tu access violation ? :(

begin
     Data := INI.ReadString('General', 'Date', DateToStr(Now));
     DecodeDate(Now, Year, Month, Day);
     DecodeDate(StrToDate(Data), wYear, wMonth, wDay);
     dDay := Day - wDay;
     dMonth := Month - wMonth;
     dYear := Year - wYear;
   if (dDay = QOptions.SpinEdit1.Value) or (dMonth = 1) or (dYear = 1) then RichEdit1.Clear;
      end;
0

<quote>OK postać daty już mam, tylko ktoś by mógł mi powiedzieć dlaczego mam tu access violation ? :(
<delphi>begin
Data := INI.ReadString('General', 'Date', DateToStr(Now));
quote>

Wydaje się, że tutaj masz błąd. Dalej procedury nie sprawdzalem, ale aby korzystac z pliku ini, musisz go najpierw utworzyc przypisując do odpowiedniej zmiennej, a na koncu zniszczyc te zmienną, np tak:

w uses: IniFiles;

i w twojej procedurze
<delphi>
procedure blalblabal;
var
PlikINI : TIniFile;
var
ile,i : integer;
begin
PlikINI:=TIniFile.Create(extractfilepath(application.ExeName)+'Dane.ini'); //powiozanie pliku ze zmienno
try
Data:=Plik.ReadString('Dane',ZapisanaData,''));//sekcja "Data", Ident: "ZapisanaData np typu String" - przypisanie wartosci do zmiennej Data

.
.//dalsze operacje, to jest porównanie uprzednio zapisanej daty, którą odczytalismy z datą dzisiejszą - jesli roznicca miedzy nimi jest 30 dni to zrob cos tam...

finally
PlikINI.Free;
end;
// polecam poczytac artykuł o plikach ini
Pozdr...

0

i jeszcze url ode mnie :)
http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime
[hurra]

0

Kurcze teraz zauważyłem, że najpoważniejszym problemem będzie zapisanie daty tylko raz w pliku, podczsa pierwszego uruchamiania programu, może jakieś pomysły ? :/

0

Przepraszam, że zaśmiecam forum moimi banalnymi pytaniami, ale już wszystko jest gotowe, ale dlaczego podczas kompilacji:

AssignFile(F, ExtractFilePath(Application.ExeName) + 'archivedat.dat');
     Reset(F);
     FSize := FileSize(F);
 begin
     case FSize of
    0: Write(F, DateToStr(Now));
   end;
     CloseFile(F);

wyskakuje błąd: Incompatible types: 'Byte' and 'String', może ktoś mi pomoże, proszę to już koniec :(

0

Proszę, czy nikt niezna naprawdę ja to skonwertowac na stringa (czy odwrotnie już sam niewiem :( ) Nigdzie niemogę tego znaleźć, a to już ostatnia rzecz, która mi przeszkadza w tej funkcji :(

0

OK postać daty już mam, tylko ktoś by mógł mi powiedzieć dlaczego mam tu access violation ? :(

begin
     Data := INI.ReadString('General', 'Date', DateToStr(Now));
     DecodeDate(Now, Year, Month, Day);
     DecodeDate(StrToDate(Data), wYear, wMonth, wDay);
     dDay := Day - wDay;
     dMonth := Month - wMonth;
     dYear := Year - wYear;
   if (dDay = QOptions.SpinEdit1.Value) or (dMonth = 1) or (dYear = 1) then RichEdit1.Clear;
      end;

na początkui powinieneś napisac ini.create i bu działało</b>

0

Sprawdź czy plik ini już istnieje. Jeśli nie istnieje to go stwórz a jak istnieje to nic nie rób

if FileExists('data.ini') then
 ShowMessage('pozostało Ci XXX dni');
else begin
 kod;
 kod;
 kod;
end;
0

Dzięki Volter za pomysł, dzięki niemu mam łatwiej, chociaŻ czy dalej, tym wiecej błędów, mialowicie jakplik instnieje i jest w nim data to wszystko działa jak należy, ale mam procedure, że kiedy pliku nieodnaleziono ma go stworzyć i wpisać w nim date, robi to kod:

AssignFile(TF, ExtractFilePath(Application.ExeName) + 'archivedat.dat');
    if not FileExists(ExtractFilePath(Application.ExeName) + 'archivedat.dat') then
  begin
   try
     Rewrite(TF);
     Writeln(TF, DateToStr(Now));
     finally
     CloseFile(TF);
     end;

Owszem tworzy plik, ale niewiem czemu niechce zapisać do niego daty :( Czy ktoś może powiedzieć co jest źle ? :/

0

Proszę, czy nikt niezna naprawdę ja to skonwertowac na stringa (czy odwrotnie już sam niewiem :(

Napisz całą funkcję (razem ze zmiennymi) i zaznacz miejsce gdzie Ci kompilator błąd wywala, to pomożemy...

0

Proponuję to zrobić na INI - najłatwiej
PRZYKŁAD Z HELPa:

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Top     := Ini.ReadInteger( 'Form', 'Top', 100 );
    Left    := Ini.ReadInteger( 'Form', 'Left', 100 );
    Caption := Ini.ReadString( 'Form', 'Caption', 'New Form' );
    if Ini.ReadBool( 'Form', 'InitMax', false ) then
      WindowState = wsMaximized
    else

      WindowState = wsNormal;
  finally
    TIniFile.Free;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action TCloseAction)
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Ini.WriteInteger( 'Form', 'Top', Top);
    Ini.WriteInteger( 'Form', 'Left', Left);
    Ini.WriteString( 'Form', 'Caption', Caption );
    Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );

  finally
    TIniFile.Free;
  end;
end;
[Form]
Top=100
Left=100
Caption=Default Caption
InitMax=0
0

Proponuję to zrobić na INI - najłatwiej
PRZYKŁAD Z HELPa:

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Top     := Ini.ReadInteger( 'Form', 'Top', 100 );
    Left    := Ini.ReadInteger( 'Form', 'Left', 100 );
    Caption := Ini.ReadString( 'Form', 'Caption', 'New Form' );
    if Ini.ReadBool( 'Form', 'InitMax', false ) then
      WindowState = wsMaximized
    else

      WindowState = wsNormal;
  finally
    TIniFile.Free;
  end;
end;

procedure TForm1.FormClose(Sender: TObject; var Action TCloseAction)
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create( ChangeFileExt( Application.ExeName, '.INI' ) );
  try
    Ini.WriteInteger( 'Form', 'Top', Top);
    Ini.WriteInteger( 'Form', 'Left', Left);
    Ini.WriteString( 'Form', 'Caption', Caption );
    Ini.WriteBool( 'Form', 'InitMax', WindowState = wsMaximized );

  finally
    TIniFile.Free;
  end;
end;
[Form]
Top=100
Left=100
Caption=Default Caption
InitMax=0

A co to ma do tematu????

0

na początku był problem z plikami INI więc pomyślałem że się przyda

1 użytkowników online, w tym zalogowanych: 0, gości: 1