Results 1 to 7 of 7

Thread: NLDLogListview

  1. #1
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,084

    Thumbs up NLDLogListview

    Versiehistorie

    Omschrijving:
    NLDLogListView is listview die een melding showt en deze wegschrijft in een bestand, al dan niet met een datumnotatie, en een image.

    Oorsprong:
    De oorsprong was puur voor eigen gebruik, om een melding die een applicatie geeft, netjes af te werken, en op te slaan in een log bestand


    Gebruik:
    Plaats een TNLDLogListview component op je Form en geeft de de properties eventueel een waarde.
    Een greep uit de meest belangrijke, naast de al bestaande properties wel overerft zijn uit de TListview.

    * Aantalregels: Beperkt het aantal regels inde listview om te voorkomen dat deze volloopt en je ellelange lijsten met meldingen krijgt, met uiteindelijk geheugeproblemen tot gevolg.
    * CombineSameEvents: Combineerd gelijke achtereenopvolgende meldingen tot 1 melding.
    * CreateLogFile: Een bestand aanmaken
    * DateLog: Een datumregel in je lognaam opnemen.
    * DateTimeFormatString: Datum/tijd format opgeven
    * InclDateTime: Bovenstande datum/tijd aan je melding meegeven.
    * InclPrefix: Iets ervoor toevoegen (zie prefix)
    * InclSeparator: Scheidings teken toevoegen (zie separator)
    * InclSuffix: Iets erachter toevoegen (zie suffix)
    * LargeImages: interne imagelijst zie smallimages
    * Logfilename: default = logfile.txt of Log+ddmmyy.txt als datelog true is.
    * Logfilepath: default is applicationpath (dus leeg)
    * LogID: melding/infonummer meegeven aan logregel
    * LogIDLong: kies nummer of melding zie Logoptie
    * LogOptie: toegekende naam van melding
    * LogOptieNummer: toegekend imagenr/relatie tot naam
    * LogStatuspaneel: doorgeven van info aan statusregel
    * LogText: doorgeven van melding aan een panel
    * LogTime: toegekende tijd doorgeven aan een panel
    * Options_toDisplay: Filter de meldingen, true is doorgeven aan listview
    * Options_toFile: Filter de meldingen, true is doorgeven aan logbestand.
    * Smallimages: Interne imagelijst ingevuld met vor mij de meest voorkomende meldingen:
    0 Information Uitroepteken
    1 Confirmation Vraagteken
    2 Warning Waarschuwing
    3 Error Rood Kruis
    4 TimeEvent Horloge
    5 Custom pijlup
    6 Empty leeg
    * Version: versienummer
    * Viewstyle: de normale vsicon,vslist,vsreport & vsSmallicon optie's
    Largeimages zijn ook smallimage's en als firstcolomn false is zie je geen tekstegel onder het icon!


    Een tweetal events, BeforAdditem & AfterAdditem komplementeren het geheel.


    Bugs:
    CombineSameEvents gaat soms niet goed, dan krijg je een dubbelle tijd.


    Wensen, opmerkingen, en suggesties hoor ik graag
    Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  2. #2
    en de latest en greatest versie staat nu ook in FreeVCS.
    Marcel

  3. #3
    Het is best handig om iets snel naar het scherm te loggen. Ik misbruik hier zelf nogal eens een memo voor. Met dit component wordt het echter direct een stuk professioneler en dat is natuurlijk wel fijn en handig.

    Een eerste blik op je code verraadt dat je er flink je best op hebt gedaan. Het ziet er allemaal behoorlijk netjes uit.

    Helaas vraag ik me wel af of je component met de juiste insteek is gemaakt. Je gebruikt nu een visueel component om naar te loggen. Dit lijkt me in lang niet alle gevallen wenselijk, omdat je lang niet altijd je log wilt zien en het bovendien vertragend kan werken om steeds je schermweergave bij te werken. Als ik log naar een memo, dan is dat vaak in een klein testje. Als ik meer nodig heb, dan wordt het ook hoog tijd om een goede en structurele oplossing te zoeken. Je hebt tenslotte niet altijd een form, of je werkt met meerdere forms die tussentijds vrijgegeven worden. Je wilt niet zo'n listview door je applicatie gaan verplaatsen omdat je werkt met dynamische forms.

    Mijn insteek zou zijn, maak een onzichtbare logger class, met een globale instantie. Hierdoor kun je door alle lagen van je applicatie heen deze logger aanroepen. Die logger geef je dan een property 'Enabled' die aangeeft of er uberhaupt gelogd moet worden. Ook stel je hierin de verschillende log opties in.

    Vervolgens kun je een log viewer instantieren en deze koppelen aan je logger. Die log viewer kan deel uitmaken van, of een koppeling zijn naar je log view grid. Je kunt er op dat moment dus makkelijk voor kiezen om wel of niet te loggen naar een grid. Hierbij hoef je dus ook geen rekening te houden met het in de lucht houden van je grid. Dat probleem heb je nu wel als je het form waarop het grid staat vrij wilt geven.

    Het loggen naar file kun je inbouwen in je logger, maar hiervoor kun je beter ook een aparte viewer/listener maken. Maak een algemene viewer/listener interface en leidt hiervan enkele varianten af, die de gelogde gegevens opslaan in een listview, een file of een database, of (via messages of COM) doorsturen naar een losse applicatie (a la CodeSite).

    Het voordeel is dat je logger class zelf erg lightweight is en met een Enabled property zelfs nagenoeg helemaal uit te schakelen is. Zodoende kun je ten alle tijden loggen, zonder dat je moeilijk hoeft te doen met if's en defines. Het daadwerkelijk loggen hangt dan vooral af van de geregistreerde listeners.

    Maargoed. Da's leuk voor versie 2.
    1+1=b

  4. #4
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,084
    Quote Originally Posted by GolezTrol View Post
    Helaas vraag ik me wel af of je component met de juiste insteek is gemaakt. Je gebruikt nu een visueel component om naar te loggen. Dit lijkt me in lang niet alle gevallen wenselijk, omdat je lang niet altijd je log wilt zien en het bovendien vertragend kan werken om steeds je schermweergave bij te werken.
    Het is een produkt wat zo gegroeid is, de oorspronkelijke opzet was: zonder iets in te stellen een componentje op je form zetten en werken.

    Quote Originally Posted by GolezTrol View Post
    Mijn insteek zou zijn, maak een onzichtbare logger class, met een globale instantie. Hierdoor kun je door alle lagen van je applicatie heen deze logger aanroepen. Die logger geef je dan een property 'Enabled' die aangeeft of er uberhaupt gelogd moet worden. Ook stel je hierin de verschillende log opties in. Vervolgens kun je een log viewer instantieren en deze koppelen aan je logger. Die log viewer kan deel uitmaken van, of een koppeling zijn naar je log view grid. Je kunt er op dat moment dus makkelijk voor kiezen om wel of niet te loggen naar een grid. Hierbij hoef je dus ook geen rekening te houden met het in de lucht houden van je grid. Dat probleem heb je nu wel als je het form waarop het grid staat vrij wilt geven.
    De meeste applicatie's zijn voor mij niet zo waanzinnig uitgebreid zoals jij omschrijft, en zo lang het componentje op het mainform staat, werkt het zoals het moet werken, snel en simpel.

    Quote Originally Posted by GolezTrol View Post
    Het loggen naar file kun je inbouwen in je logger, maar hiervoor kun je beter ook een aparte viewer/listener maken. Maak een algemene viewer/listener interface en leidt hiervan enkele varianten af, die de gelogde gegevens opslaan in een listview, een file of een database, of (via messages of COM) doorsturen naar een losse applicatie (a la CodeSite).
    Het voordeel is dat je logger class zelf erg lightweight is en met een Enabled property zelfs nagenoeg helemaal uit te schakelen is. Zodoende kun je ten alle tijden loggen, zonder dat je moeilijk hoeft te doen met if's en defines. Het daadwerkelijk loggen hangt dan vooral af van de geregistreerde listeners.
    Maargoed. Da's leuk voor versie 2.
    Versie 1 is er nog niet eens ;-), vooralsnog zit ik op 0.90 omdat er best nog wel wat aan geschaaft kan worden. Een Log class heb ik hier ook nog liggen, maar persoonlijk pak ik toch ff snel dit componentje, net zo als jouw voorkeur bij een memo ligt.
    Mocht het zover komen dat ik toch de boel wil aanpassen, zal ik aan je denken, wellicht kan ik nog wat van jouw expertise leren :-)

    Vr.Gr. Peter
    10.4.2, Delphi2010, of Lazarus 2.2.0

  5. #5
    Het is inderdaad wel aardig wat werk. Ik wou een opzetje maken om de boel te demonstreren, maar daar ben ik maar niet aan begonnen toen ik bedacht wat ik daarvoor zou moeten doen. Daar kan ik altijd nog aan werken als je versie 1 hebt afgerond

    Toch zit dat extra werk vooral in de implementatie van je component en niet in de toepassing ervan. Wanneer je een singleton, global logger maakt (die je ook gebruikt om naar te loggen, dan kunnen listeners zichzelf daarbij registreren.

    Voor het gebruik van je component verandert er dus eigenlijk niets. Het enige verschil is dat je logt naar de globale logger instance i.p.v. rechtstreeks naar het grid. Om de boel te tonen in het grid hoef je dan echter niets meer te doen dan het grid op je form plaatsen. Het grid kan zichzelf dan aan de logger koppelen.

    Je component zelf wordt wel een stuk ingewikkelder. Je krijgt aggregatie-classes die tussen je logger en je viewer (je listview) hangen. De status van die classes moet goed in de gaten gehouden worden door je listview en door je logger. Al met al niet iets wat je in tien minuutjes maakt.
    Last edited by GolezTrol; 29-Mar-08 at 21:09.
    1+1=b

  6. #6
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,084
    Quote Originally Posted by GolezTrol View Post
    Je krijgt aggregatie-classes die tussen je logger en je viewer (je listview) hangen. De status van die classes moet goed in de gaten gehouden worden door je listview en door je logger. Al met al niet iets wat je in tien minuutjes maakt.
    AAAAAAHHHH hogere programmeer kunsten,.. dat laat ik voorlopig aan de echte experts over :-)
    10.4.2, Delphi2010, of Lazarus 2.2.0

  7. #7
    Senior Member Wok's Avatar
    Join Date
    Dec 2002
    Location
    Alkmaar
    Posts
    2,084
    VersieUpdate 0.91

    * CombineSameEvents: Foutjes aangepast lijkt nu goed te gaan
    * WriteIdle : tijd liep niet verder dan 00:01:05, is verholpen
    * DisabledImages : toegevoegd om een extende toolbar te voorzien van images

    Bugs:
    -

    Wensen, opmerkingen, en suggesties hoor ik graag
    Peter
    Attached Files Attached Files
    10.4.2, Delphi2010, of Lazarus 2.2.0

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •