Nie dodałem pytania na temat wszystkich opcji w systemie logów ponieważ staram się szanować Wasz czas wiec jeśli w miarę ogarniam sam to po co trolowac forum.
Tyle, że to są cenne informacje, dzięki którym nie trzeba się domyślać części funkjonalności; Zawsze można napisać wszystkie, ale podkreślić te, które umie się zrobić czy wie się mniej więcej;
- system pewien sam zapisywać logi do pliku ini dla danego dnia. Jeśli nastąpi zmiana daty automatycznie tworzy nowy sektor w ini, czyści listboxa i zaczyna wstawiać nowe logi.
Więc potrzeba Ci metodę, która potrafi wczytywać i zapisywać logi do pliku INI
; A czy strukturę tegoż pliku masz zaplanowaną, czy też potrzebujesz to skonsultować? Skoro dla jednego dnia logowania będzie jedna sekcja w pliku, to każdy log będzie musiał być zapisany w jednym wierszu w pliku; A skoro log będzie się składał z kilku informacji - musisz je oddzielić separatorem, by można było te informacje od siebie oddzielić podczas wyświetlania ich w kontrolce, np.:
Kopiuj
[08.04.2013]
0=Moduł|Priorytet|Data|Komunikat
1=Moduł|Priorytet|Data|Komunikat
2=Moduł|Priorytet|Data|Komunikat
[09.04.2013]
0=Moduł|Priorytet|Data|Komunikat
1=Moduł|Priorytet|Data|Komunikat
2=Moduł|Priorytet|Data|Komunikat
3=Moduł|Priorytet|Data|Komunikat
4=Moduł|Priorytet|Data|Komunikat
i tak dalej; Dzięki separatorowi będzie można wydzielić poszczególne informacje po to, by łatwo je wyświetlić w osobnym stylu w kontrolce (inny styl dla modułu, inny dla priorytetu, inny dla daty, jeszcze inny dla komunikatu); Identyfikatory sekcji dla danego dnia mogą być inne, żeby można było je łatwo porównać z obecną datą;
- Po uruchomieniu programu następuje sprawdzenie czy w ini sa już logi z danego dnia jeśli tak wczytuje juz istniejące rekordy i zaczyna dodawać kolejne, jesli nie tworzy sektor.
Więc po uruchomieniu musisz sprawdzić, czy sekcja o identyfikatorze takim, jaka jest przekonwertowana data istnieje czy nie; Obsługę plików INI
pewnie znasz, więc nie będę wypisywał metod potrzebnych zarówno do wykonania sprawdzenia istnienia sekcji, jak również wczytania jej zawartości;
-Automatycznie kasuje wszystkie elementy ini w zadeklarowanych przez użytkownika interwalach czasowych tydzień, miesiąc, itd.
Więc możesz załadować listę samych identyfikatorów wszystkich sekcji i w pętli sprawdzasz czy mieszczą się w przedziale, czy nie; Jeśli nie mieszczą się (są za stare) - usuwasz całą sekcję;
-Umożliwia wczytanie z ini do listboxa wszystkich dni jako pojedynczych dat(bez logow) i po kliknięciu na dany dzień ładuje odpowiadające mu rekordy.
To samo co wyżej - pobierasz listę samych identyfikatorów sekcji; Użytkownik po wybraniu danej pozycji wskaże tym samym nazwę sekcji, z której odbędzie się wczytywanie logów;
-Umożliwia określenie przez użytkownika priorytetów zapisanych bądź ignorowanych do zapisu logów (czyli główne założenie tego tematu).
Czyli podczas ładowania logów do kontrolki sprawdzasz czy spełniają zadane kryteria i jeśli tak - dodajesz do kontrolki, jeśli nie - pomijasz i sprawdzasz dalej;
Oraz coś co możne uda sie dodać możliwość sortowania logów wg. rodzaju Komunikatu oraz ktorego z modułów programu dotyczy log.
No widzisz, teraz doszła dodatkowa informacja do klasy logu jak moduł wysyłający komunikat;
Sort powinien być realizowany w następujący sposób: jeśli użytkownik wybierze ze chce zobaczyć logi dotyczące np. bledow zostaną wczytane błędy
To nie jest sortowanie (które dotyczy ułożenia elementów w liście), tylko filtrowanie (które dotyczy wybrania odpowiednich elementów, a odrzucenie tych, które nie spełniają wymogów);
drugi np combo box powinien umożliwiać wysortowanie z załadowanych już bledow lokalizacje komunikatu. np moduł wysyłki @.
To już jest sortowanie; Tylko że nie napisałeś jak oznaczasz poszczególne moduły; Najprościej to przydzielić im identyfikatory liczbowe, które przechowywane będą w polu logu, a podczas wyświetlania ich w kontrolce będą konwertowane do postaci zrozumiałej; Np. "moduł wysyłki" będzie miał identyfikator 1
, ale w kontrolce wyświetlisz pełną nazwę Moduł wysyłki
pobraną z macierzy identyfikatorów; W ten sposób sortowanie będzie można przeprowadzić sprawnie i bez zbędnego kombinowania, a w zdarzeniu rysującym odpowiednią pozycję w TListBox
według indeksu modułu pobierzesz i narysujesz pełną jego nazwę z macierzy;
Z tym ze sort to kwestia drugoplanowa.
Skoro już myślisz o sortowaniu - zaimplementuj od razu.
EDIT: A nie zastanawiałeś się nad innym typem pliku do tego typu rzeczy, niż INI
?