Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit ändern (https://www.delphipraxis.net/58769-rave-reihenfolge-von-objekten-baendern-zur-laufzeit-aendern.html)

cs.rumpelstilzchen 12. Dez 2005 14:08

Datenbank: MS SQL-Server 2000 • Zugriff über: ADO

Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit ändern
 
Hallo Leute!

Bin wieder mal an meine Grenzen gestoßen :wall:

Problemstellung: Ein (Umsatz)-Bericht besteht aus verschiedenen Modulen. Der Anwender soll zur Laufzeit die Reihenfolge der Module festlegen können.

Im Rave (BE-Version von Delphi2005) besteht jedes Modul aus verschiedenen Bändern (Kopf, Body, Fuß). Diese sind innerhalb einer Region alle untereinander angeordnet.

Kann ich zur Laufzeit die Reihenfolge verändern?
Wenn ja, wie? :gruebel:

Danke schon mal im Voraus.

cs.rumpelstilzchen 21. Dez 2005 15:00

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Hmmm.... was ist los? Alle schon im Weihnachtsurlaub ? :wink:

Oder gibt's tatsächlich keine Lösung für das Problem? :chäffe_krank:

Bitte bitte bitte liebe Forumer, denkt nach! Lasst mich nicht hängen!

Schöne Weihnachtstage! :mrgreen:

MrSpock 21. Dez 2005 15:20

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Hallo cs.rumpelstilzchen,

da kann dir sicher Merlin17 helfen. Vielleicht ist er stark beschäftigt. Schick ihm doch mal ne PN it eine Link auf diesen Thread. Er freut sich bestimmt. :mrgreen:

cs.rumpelstilzchen 21. Dez 2005 15:38

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
THX Mr. Spock!

Hab grad selbst was gefunden!

Delphi-Quellcode:
        MyComponent := FindRaveComponent(szModulName,MyPage) as TRaveComponent;
        if MyComponent <> nil then
          MyComponent.Visible := True;
          MyComponent.BringToFront;
Das funzt! BringToFront setzt die Komponente zwar an das Ende des Reports (BringToFront! Klar! :zwinker: ), aber wenn ich das bei allen Komponenten des Reports nacheinander mache, erhalte ich die gewünschte Reihenfolge! :-D

Aaaaaaber....

Die erste Komponente auf dem Blatt - eine einfache Band-Komponente, alle anderen sind DataBand-Komponenten! - macht Ärger: EXCEPTION! :wall:


Danke für eure Hilfe!

cs.rumpelstilzchen 21. Dez 2005 16:11

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Noch ein Problem: Ich kann zwar die Eigenschaft Visible (und einige andere) manipulieren, aber "StartNewPage" und "FinishNewPage" fehlen! Oder ich find sie nicht? :gruebel:

Gibt es da irgendein Zauberwort? :witch:

merlin17 3. Jan 2006 14:39

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Zitat:

aber "StartNewPage" und "FinishNewPage" fehlen!
ist das Problem gelöst ? IIRC war doch im support-channel bei nevrona die frage von dir, oder ?


:-) thomas

merlin17 3. Jan 2006 14:40

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Zitat:

Die erste Komponente auf dem Blatt - eine einfache Band-Komponente, alle anderen sind DataBand-Komponenten! - macht Ärger: EXCEPTION
evtl. Rechtschreibfehler ??


:-) thomas, TeamNevrona

cs.rumpelstilzchen 3. Jan 2006 15:19

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Hallo Merlin 17!

Danke für deine Aufmerksamkeit. :spin:

In der Tat, ich habe von Nevrona eine Interessante Antwort erhalten:

Meine Frage war:
Zitat:

I want Rave to print components on a new page if the user wants to.
I tried to use the components properties like this:

MyComponent := FindRaveComponent(szModulName,MyPage) as TRaveComponent;
if MyComponent <> nil then
begin
MyComponent.Visible := True;
MyComponent.BringToFront;
end;

But i can't find the properties StartNewPage and FinishNewPage!

What i found is the Tag-propertie. So i decided to set it to 1 and then use this information in the Rave-Event-Programming. But the Tag-propertie is not known there!!!
Die Antwort dazu:

Zitat:

Hi Jürgen,

Thank you for including your Rave product (BE or BEX) and version. PLEASE do this in ALL support messages (check Rave Help About). It helps us provide a better support answer. For your information, Rave 6.0.1 is the BE (Borland Edition) product - not BEX which is an upgrade. The latest version of Rave 6 BEX is 6.0.5.

> I want Rave to print components on a new page if the user wants to. I
tried to use the components properties like this: ..... But i can't find the properties StartNewPage and FinishNewPage! What i found is the Tag-propertie. So i decided to set it to 1 and then use this information in the Rave-Event-Programming. But the Tag-propertie is not known there!!!

The first thing I have to say is FindRaveComponent is simply a back-door to the visual designer that was intended for "MINOR" changes or adjustments to visual reports before the report is started. Once the report has started, the FindRaveComponent code is NOT used. Tip #79 "Create Reports without Visual Designer" on our web site "Tips and Tricks"
page has a full paragraph on this. Basically, if you are doing more than one or two "simple" properties (left, top, color etc) then you really should be looking at true code-base reporting. If I could go back in time - I would strongly recommend that the "FindRaveComponent" not have been developed or released. I would not and do not recommend that you use the FindRaveComponent method for anything other than very simple things.

The Rave Reports event system has been significantly improved since it was first introduced in Rave BE 5.0.8. The FindRaveComponent method allowed early Rave 5 users to do some things that the early scripting engine could not do. However, the scripting engine (events) has matured considerably since its introduction and became as powerful (later releases of Rave 5), then even more powerful (Rave 6) than the FindRaveComponent method. The scripting engine can make conditional changes as the report is running - something the FindRaveComponent method never could do.

In fact, if you are using Rave 6 or later, then I would say you should focus on using combinations of parameters and Rave events. If you cannot do it with parameter and events, then you probably need to look at a "true code-based" solution and not the FindRaveComponent method.

That said, "StartNewPage" and "FinishNewPage" are properties of a Band component. I did a quick test in both the event system and in my test project with a FindRaveComponent and had no problem. However, I believe that some of the components are "set" to the "designer" setting when the report starts. So "back-door" changes may appear to be ignored.

Technical Support
support@nevrona.com
Wobei man sich den Satz "If I could go back in time - I would strongly recommend that the "FindRaveComponent" not have been developed or released." dringend merken sollte! Wer weiss wielange das überhaupt noch so möglich sein wird!

Es ist tatsächlich nicht möglich die Eigenschaften StartNewPage und FinishNewPage direkt im Delphi zu manipulieren! Und im Rave habe ich innerhalb eines Events keinen direkten Zugriff auf Parameter und auf den 'Tag'-Wert.
Also hab ich den unter Programmierern so beliebten 'Schrägdurchdiebrustinsauge'-Ansatz probiert:
- Parameter für jedes der zu steuernden Module angelegt
- zu jedem Datenband einen Footer hinzugefügt
- dort ein DataText-Objekt mit Inhalt zugehöriger Parameter
- jedem Footer ein 'BeforePrint'-Event verpasst
- im Event abhängig vom Inhalt des Datatext-Objekts die Eigenschaft 'FinishNewPage' gesetzt
Ein bisserl Umständlich, aber es funzt!!!! :thumb:

Mit Rave kann man schon ne Menge anstellen, aber nach wie vor finde ich es äußerst befremdlich, daß es keine vollständige Dokumentation dazu gibt! :evil:

Es ist doch lächerlich, da wird das runde Rad immer wieder neu erfunden nur weil der Hersteller keine Lust hat mal was schriftliches zu Produzieren, mit dem man wirklich arbeiten kann! :wall:

Wie weit bist du mit deinem Buch zu Rave? Hätte das Zeug zum Bestseller! :dancer2:

Übrigens hast du richtig vermutet, das Problem mit der Exception war tatsächlich ein 'Dreckfuhler'. Das Objekt hatte im Rave einen anderen Namen! :oops:

So long und nochmals Danke

Jürgen

merlin17 3. Jan 2006 16:34

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Hallo,

ich habe den Thread [ND-8B7T3P-1] mitgelesen <g>.
Zitat:

Wobei man sich den Satz "If I could go back in time - I would strongly recommend that the "FindRaveComponent" not have been developed or released." dringend merken sollte! Wer weiss wielange das überhaupt noch so möglich sein wird!
keine Panik, ich gehe davon aus, dass die Nevronies dies nicht kappen werden..... aber es ist eben ein nicht korrekter Weg, um in dem Rave-stream (mehr ist
die RAV-Datei nicht, aber nicht weitersagen :drunken: ) vor dem execute noch etwas zu verändern. Aber hier gibt es selbst Nevrona-intern die zwei Meinungen.

Die Eigenschaft ist aber definitiv darüber zu erreichen, auch JimD hat es in der Antwort ja geschrieben.
habe gerade in altes Rave-projekt gesucht:
Delphi-Quellcode:
 RaveSeite :=
    DM.RaveProject1.ProjMan.FindRaveComponent('Haushaltsstellen.Seite1',
    nil) as TRavePage;
  SeitenschnittBand := DM.RaveProject1.ProjMan.FindRaveComponent('BandGLZ_GH',
    RaveSeite) as TRaveBand;
  // Seitenwechsel:
  case RG_SW_HHST.ItemIndex of
    0: SeitenschnittBand.StartNewPage := False;
    1: SeitenschnittBand.StartNewPage := True;
  end;
Zitat:

Mit Rave kann man schon ne Menge anstellen, aber nach wie vor finde ich es äußerst befremdlich, daß es keine vollständige Dokumentation dazu gibt!
aber es wird doch von Version zu Version besser :thumb:
Zitat:

Wie weit bist du mit deinem Buch zu Rave? Hätte das Zeug zum Bestseller!
kennst du die unendliche geschichte ; anfangen habe ich mit Rave4 und kaum dachte ich, jetzt bin ich PageMaker fertig, gab es wieder was neues,
sei es CLX, .net, Rave5, Rave6, Rave7, Kylix, Eventscripting etc.etc. :freak:
aber ob Du es glaubst oder nicht, 2006 habe ich als DeadLine definiert, evtl. als courseware wie dr.bob :duck:
Zitat:

Übrigens hast du richtig vermutet, das Problem mit der Exception war tatsächlich ein 'Dreckfuhler'. Das Objekt hatte im Rave einen anderen Namen!
:wall: kenn' ich

:-) thomas, TeamNevrona

cs.rumpelstilzchen 3. Jan 2006 18:39

Re: Rave: Reihenfolge von Objekten (Bändern) zur Laufzeit än
 
Aaaaaaaaargghhhh.... :wall:

Ich Depp! :stupid:

Wer lesen kann...

Delphi-Quellcode:
as TRavePage
Und ich benutze as TRaveComponent !!!!! (Wegen FindRaveComponent)!!!

Dümmer geht's nümmer. :oops:


Danke :thumb: für den (wohl unbewussten ?) Hinweis deinerseits Thomas! Hätte ich wohl auch eher drauf kommen können! (Der Support von Nevrona allerdings auch!)

Jetzt hab ich natürlich auch Zugriff auf StartNewPage!

Also gut 5 Stunden Arbeit und Recherche investiert und jetzt alles wieder löschen und vernünftig proggen :coder2: das Programmiererleben kann so schön sein!!!!

Und wieder bewahrheitet sich:
"Marketingsprüche sind schnell geschrieben, Know-How dauert wesentlich länger!"


In diesem Sinne: mach hin mit deinem Buch Thomas!!!!!!! :spin:

THX
Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz