Wyłączanie databand w Rave Reports

Wyłączanie databand w Rave Reports
0

Proszę o pomoc lub podpowiedź jak można w Rave Reports wyłączać databandy. Próbowałem korzystać z właściwośći visible w Rave w onbefore print takim kodem:

Kopiuj
 
if (DataMemo1.Text='') then
DataBand1.visible:=false;
else
DataBand1.Visible:=true;
end;

Kod się kompiluje ale niestety nie bardzo to chce działać, pomiędzy kolejnymi databandami nadal tworzą się niepotrzebne odstępy.
Dane do komponentu datamemo przekazuję parametrem z programu i to działa.
Jak można się dostać do komponentów Rave z poziomu programu ?

Proszę o wyrozumiałość, w Rave'a dopiero raczkuję. pozdrawiam

0

Problem rozwiązany,co prawda ciężko coś znaleźć w tym temacie ale można to zrobić z poziomu programu w taki sposób:

Kopiuj
if (RvProject1.projman.findravecomponent('NazwaRaportu.Strona', nil) as TRavePage) <> nil then
begin
         RapPage := (RvProject1.ProjMan.FindRaveComponent('NazwaRaportu.Strona',NIL) AS TRavePage);

         if (ROpis.Text='') then
         begin
            (RapPage.findcomponent('DataBand1') AS TRaveDataBand).Visible := False;
         end else
              begin
                RvProject1.SetParam('Opis',ROpis.Text);
              end; 
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
0

Niepotrzebnie dwa razy wyszukujesz - kod można uprościć:

Kopiuj
RapPage := RvProject1.Projman.FindRaveComponent('NazwaRaportu.Strona', nil);

if RapPage <> nil then
  if ROpis.Text = '' then
    (RapPage.FindComponent('DataBand1') as TRaveDataBand).Visible := False
  else
    RvProject.SetParam('Opis', ROpis.Text);

Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
0

Dzięki Furious, próbuję w podobny sposób wyłączyć zawartość całej strony i wszystko gra oprócz tego że chciałbym na raporcie tej pustej strony nie otrzymywać.
Korzystając z metody znalezionej w necie dostaję błąd invalid class typecast. Jak spowodować pokazywanie lub ukrywanie strony w raporcie, gdy jest ona pusta albo czy da się wyłączać poszczególne strony, visible powoduje ukrycie wszystkich komponentów a strona na wydruku pozostaje pusta.

Kopiuj
with Sender as TBaseReport do begin
    RaveProject.ExecuteReport('Report1');
    NewPage;
    RaveProject.ExecuteReport('Report2');
    NewPage;
    RaveProject.ExecuteReport('Report3');
  end; { with } 
flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
0

Błąd invalid class typecast dostajesz zapewne w linii:

Kopiuj
with Sender as TBaseReport do begin

dlatego, że w danym momencie Sender wskazuje na obiekt z innej klasy, niż TBaseReport; Zanim jednak dokonasz rzutowania sprawdź czym jest Sender - np. w taki sposób:

Kopiuj
if (Sender is TBaseReport) then
  with TBaseReport(Sender) do
  begin
    // tutaj instrukcje
  end;

w ten sposób jeśli Sender nie jest z klasy TBaseReport warunek (a tym samym kod) się po prostu nie wykona; Aby sprawdzić na jaką klasę wskazuje Sender wykorzystaj debager - wrzuć Sender.ClassName do okna Watches i postaw BreakPoint gdzieś w ciele zdarzenia i jeśli Sender jest z innej klasy to czas na zmiany w kodzie;

Co do tworzenia i obsługi raportów to niestety nic więcej nie jestem w stanie napisać, bo nigdy z nich po prostu nie korzystałem i nie znam się; Sporo informacji jest w sieci, więc odwiedź wuja Google i zapytaj go - może Ci coś podpowie.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.