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 :(
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');
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
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]
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;
<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...
i jeszcze url ode mnie :)
http://www.delphibasics.co.uk/RTL.asp?Name=FormatDateTime
[hurra]
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 ? :/
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 :(
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 :(
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>
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;
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 ? :/
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...
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
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????
na początku był problem z plikami INI więc pomyślałem że się przyda