Results 1 to 11 of 11

Thread: OnGetText wordt niet aangeroepen

  1. #1
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,662

    OnGetText wordt niet aangeroepen

    Ik heb een database met een hoop char velden, die alleen 'J' of 'N' hebben als waarde. Nu worden deze velden getoond met TDBText componenten.
    Met een OnGetText event wil ik de tekst formateren op deze manier:
    delphi Code:
    1. procedure TDMVerkopen.VerkoopordersfactuurgefactureerdGetText(Sender: TField;
    2.   var Text: string; DisplayText: Boolean);
    3. begin
    4.   if sender.AsString = 'J' then
    5.     text := 'Ja'
    6.   else
    7.     text := 'Nee';
    8. end;
    Op zich ziet dat er helemaal niet spannend uit. Maar er gebeurt niets. Als ik een break erop zet, wordt deze niet uitgevoerd. De tabel wordt wel geopend. Dat heb ik zelfs gechecked in de AfterOpen event. Er gebeurt gewoon iets.
    Eerst dacht ik dat het kwam, doordat er geen records aanwezig waren. Maar als dat het geval is, dan staat de dataset toch op een lege record, waardoor OnGetSet toch nog wordt uitgevoerd?
    Maar om zeker te weten heb ik alsnog in een browser een record aangemaakt. Ondanks alles wordt de OnGetEvent niet uitgevoerd.

    1. Is dit een bug?
    2. Doe ik het verkeerd?
    3. Werkt de OnGetSet event ook als er geen records zijn?

    Ik hoopte met iets simpels toch informatie te tonen op de juiste manier.
    Delphi is great. Lazarus is more powerfull

  2. #2
    Delphi & OO in Vlaanderen SamWitse's Avatar
    Join Date
    Sep 2007
    Location
    Brussel
    Posts
    808
    OnGetText wordt enkel opgeroepen als het veld 'gebruikt' wordt.
    Dus als er geen records zijn, wordt dit veld niet gebruikt, en dus ook geen OnGetText uitgevoerd.
    Als dit veld niet gedisplayed wordt (omdat je bijvoorbeeld geen TDBEdit hebt dat aan dit veld gekoppeld is), dan wordt OnGetText ook niet uitgevoerd.
    Ik heb ooit de waarde van een veld op een TPanel willen afbeelden, en heb daarvoor een TDBEdit op mijn scherm geplaatst en hidden gezet, juist om de OnGetText uit te laten voeren.

    Hopelijk helpt dit.
    Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration.

    Sam Witse.
    Delphi & OO in Vlaanderen

  3. #3
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,662
    Kortom, de OnGetText event werkt alleen voor een TDBEdit! Maar dan heeft het toch weinig functionaliteit?
    Delphi is great. Lazarus is more powerfull

  4. #4
    Niet alleen voor edits, maar ook andere gevallen waar een waarde getoond moet worden. Alleen als er helemaal geen controls zijn, dan heb je dus ook niets aan die OnGetText en wordt hij dus niet uigevoerd.

    Maar wellicht kun je wat meer vertellen over je beoogde doel. Er is dan misschien een andere manier om dat te bereiken.
    1+1=b

  5. #5
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,662
    Waar het op neer komt is het volgende:
    Ik heb een tabel met heel veel velden. Een aantal velden worden gevuld. Maar er zijn nog een hoop andere velden, die informatie tonen, die op andere manieren worden gevuld. Dan spreken we bijvoorbeeld over factuurgegevens en een aantal vlaggen, waardoor je men zien wat de status van dat record is. Die aantal vlaggen hebben een veldlengte van 1 karakter (vanwege de compabiliteit van de oude database). Nu wilde ik ik via een simpele OnGetText event de tekst laten formateren en deze te laten tonen. Als het veld NULL of 'N' is, wordt Nee getoond en als deze 'J' is, wordt Ja getoond. De meeste J en N konden dan via een link van de eerste OnGetText worden geformateerd.
    Nu kan ik dat ook presenteren via een AfterScroll event en de TDBText via components[i] laten verwerken, maar ik had dus gehoopt op een simpele manier.
    Delphi is great. Lazarus is more powerfull

  6. #6
    Dat is inderdaad precies waar je OnGetText voor kunt gebruiken. Je plaatst een data-aware control (Label, Edit, Grid, ...), koppelt dat aan je veld en de OnGetText wordt aangeroepen.

    Uiteraard moet je ook in die gevallen waar je zelf de text van een veld toont ook daadwerkelijk de Text property gebruiken, maar dat lijkt me duidelijk.
    Marcel

  7. #7
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,662
    Dat is allemaal leuk wat je zegt, Marcel. Maar het werkt niet met de TDBText. Ik zal eerst een goede record aanmaken en kijken wat er dan gebeurt. Er is interactie tussen de component en de datalink, dus lijkt mij logisch dat het gewoon moet werken.
    Delphi is great. Lazarus is more powerfull

  8. #8
    Hmm, heel raar. Want het is niet alleen allemaal heel leuk wat ik zeg, het werkt ook zo

    Ik heb een voorbeeldje gemaakt waarin je ziet hoe het werkt, zie de bijlage...
    Attached Files Attached Files
    Marcel

  9. #9
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,662
    Dit wil je niet geloven, maar ik vertel het toch.
    Na jouw voorbeeldje te kijken, Marcel, was ik er van overtuigd (er voor ook al) dat het gewoon moet werken. Ik heb een ander veld gepakt met daarin een OnGetText event en DEZE gaf wel aan wat hij moet doen. Vreemd, waarom wordt de eerste, die ik heb aangemaakt niet gepresenteerd. Ga ik elke TDBText af en wat blijkt; die TDBText was nog niet toegekend aan een dataveld. STOM STOM STOM .
    Het werkt dus wel degelijk zoals ik had verwacht. en tegelijk.
    Delphi is great. Lazarus is more powerfull

  10. #10
    Dat wil ik zeker geloven Soms zijn het nou eenmaal van die simpele dingen die mis gaan. Daarom hamer ik altijd op een testprojectje, al was het maar om voor jezelf te bewijzen dat het werkt zoals je verwacht.

    Meestal kom ik er halverwege het testprojectje al wel achter wat ik in het echte programma vergeten ben
    Marcel

  11. #11
    John Kuiper
    Join Date
    Apr 2007
    Location
    Almere
    Posts
    8,662
    Mijn planning was al om een testprojectje te maken, maar je was mij net voor met een voorbeeldje. Maar dat heeft het wel bespoedigd dat ik het probleem wat eerder heb opgelost, anders had ik het op een lange termijn geschoven.
    Delphi is great. Lazarus is more powerfull

Thread Information

Users Browsing this Thread

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

Tags for this Thread

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
  •