C++Builder 2010 RaveReport - Linie zeichnen bei OnGetText



  • Hallo,

    ich verwende in meinem Projekt den RaveReport 7.7.0. Ich habe auf meinem Report ein DataViewDataBand, auf dem eine horrizontale Linie vorhanden ist. Es werden nun einzelne Namen aufgeführt. Die Namen kommen aber auch öfter untereinander vor. Sieht ungefähr so aus:

    Müller 112
    Müller 113
    Müller 117
    Meier 888
    Meier 879
    Schulze 556

    Jetzt möchte ich die Linie aber nur zeichnen lassen, wenn sich der Name geändert hat. Dazu habe ich im EventEditor zu dem DataText (dort wird der Name ausgegeben) das Event "OnGetText" genutzt, um den aktuellen Wert zu erhalten. Diesen vergleiche ich nun und bei ungleich soll die Linie gezeichnet werden. Hier mal mein Code:

    newVAR := Value;
    if newVAR = oldVAR then
    HLine3.Visible := False;
    else
    HLine3.Visible := True;
    oldVAR := newVAR;
    end if;
    

    Das Problem ist, dass der Wert irgendwie nicht verglichen wird und die Linie somit immer gedruckt wird.

    Kann da jemand helfen?

    Danke
    Torsten



  • Hallo,

    ich habe es bereits gelöst 😃 Denn man muss wissen, dass die o.g. Funktion bei jedem Eintrag nur einmal durchlaufen wird 😮 Somit ist die Speicherung des alten Wertes natürlich hinfällig. Denn dieser steht ja beim nächsten Durchlauf nicht mehr zur Verfügung.
    Die Lösung ist halt, einen Parameter im jeweiligen RaveReport zu erzeugen. In diesen Parameter schreibt man dann halt den alten Wert. Beim nächsten Durchlauf wird dieser Parameter erst wieder gelesen, dann verglichen und ggf. neu gesetzt. Das ganze sieht dann so aus:

    function...
    var
    newVAR: String;
    oldVAR: String; 
    
    begin
    oldVAR := RaveProject.GetParam('oldVAR');
    newVAR := Value;
    
    if newVAR = oldVAR then
    HLine3.Visible := False;
    else
    HLine3.Visible := True;
    RaveProject.SetParam('oldVAR', newVAR);
    end;
    end OnGetText;
    

    Gruß
    Torsten


Log in to reply