Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   ReportBuilder - Labels auf Region zur Laufzeit erzeugen (https://www.delphipraxis.net/157796-reportbuilder-labels-auf-region-zur-laufzeit-erzeugen.html)

JannesDKS 25. Jan 2011 14:51

ReportBuilder - Labels auf Region zur Laufzeit erzeugen
 
Moin Leute ich hab ein kleines Problemchen mit dem Reportbuilder.
Ich möchte in einem Report zur Laufzeit in einer ppRegion Labels erzeugen. und habe dafür folgenden Code geschrieben:

Delphi-Quellcode:
for i := 0 to ibds.FieldList.Count-1 do
    begin
      if not Varisnull(ibds.Fields[i].Value) then
      begin
        ppLBankLabel[i] := TppLabel.Create(pprBank);
        ppLBankLabel[i].Left := CompleteWidth;
        ppLBankLabel[i].Top := pprbank.Top + 2;
        ppLBankLabel[i].Caption := ibds.Fields[i].AsString;
        CompleteWidth := CompleteWidth + ppLBankLabel[i].Width +2;
      end;
    end;
Der Code läuft sauber durch, es sind aber leider auf dem Report keine Labels zu sehen. Ich dachte es liegt daran, dass ich ppLBankLabel[i].Parent nicht zugewiesen habe, aber beim debuggen sagt er, dass diese Eigenschaft Readonly ist.
Ich hab auch schon verschiedene Positionen für das ausführen dieses Codes ausprobiert. Ohne Erfolg. Sieht jemand meinen Fehler?

Metallicwar 25. Jan 2011 15:00

AW: ReportBuilder - Labels auf Region zur Laufzeit erzeugen
 
Hi JannesDSK,
bei Problemen mit dem Reportbuilder, habe ich mich immer an die newsgroup von Digital Metaphors gewendet.
Dazu lad dir Mozilla Thunderbird runter und richte die newsgroup ein und poste dort dein Problem mal. (http://www.digital-metaphors.com/sup...ewsgroups.html).
Dort bekommst du auch schnell und vorallem gute Antworten :-) (aber nicht so schnell wie hier)
sorry, dass ich dir nicht direkt weiterhelfen kann, aber falls ich Zeit finde und du dein Problem nicht schon selbst gelöst hast, werd ich's mir auch mal anschaun !

mfg David

Metallicwar 25. Jan 2011 15:11

AW: ReportBuilder - Labels auf Region zur Laufzeit erzeugen
 
vll kann es sein, dass du die erzeugten Objekte noch anzeigen musst.
Muss man ja beim Erzeugen von Objekten in Delphi auch :-)
also vll mal:
Delphi-Quellcode:
ppLBankLabel[i].Show
oder
Delphi-Quellcode:
ppLBankLabel[i].Visible := True
vll. hängt es damit zusammen *gg*

JannesDKS 25. Jan 2011 15:18

AW: ReportBuilder - Labels auf Region zur Laufzeit erzeugen
 
Hi Metallicwar,

hm, ja das hab ich auch schon ausprobiert. das ist es nicht. hab aber nochwas gefunden in der Newsgroup. Für den Tipp auch schon mal ein dickes Dankeschön

Delphi-Quellcode:
 for i := 0 to ibds.FieldList.Count-1 do
    begin
      if not Varisnull(ibds.Fields[i].Value) then
      begin
        ppLBankLabel[i] := TppLabel.Create(ppReport1);
        ppLBankLabel[i].Band := ppSummaryBand2;
        ppLBankLabel[i].Left := CompleteWidth;
        ppLBankLabel[i].Top := pprbank.Top + 2;
        ppLBankLabel[i].AutoSize := True;
        ppLBankLabel[i].Caption := ibds.Fields[i].AsString;
        CompleteWidth := CompleteWidth + ppLBankLabel[i].Width +2;
        ppLBankLabel[i].BringToFront;
        ppLBankLabel[i].Visible := True;
      end;
    end;
Geht immernoch nicht, aber wenigstens sagt er jetzt wenigstens, dass die Region der Parent der Labels ist. Immerhin ;-)

shmia 25. Jan 2011 15:31

AW: ReportBuilder - Labels auf Region zur Laufzeit erzeugen
 
Du kannst auch eine Region (mit allen Controls darauf) von einem Report auf einen anderen Report verschieben.
Du hast also einen Hauptreport und einen weiteren Hilfsreport, der nur als Container für ein oder mehrere Regionen dient.
Man kann die Regionen zwischen dem Hauptreport verschieben und wieder zurückbewegen.

Delphi-Quellcode:
// verschiebt die übergebene Region an den 1. leeren Platz
// auf dem Zielreport
procedure TForm1.MoveRegion1(const region: TppRegion);
begin
   // Region aktivieren
   region.Band := ReportMain.DetailBand;
   // Position der Region
   region.Left  := ppLine5.Left;
   region.Top   := ppLine5.Top;
   // richtige Breite der Region
   region.Width := ppLine6.Width;
   region.Height := ppLine6.Top-ppLine5.Top;
   region.Caption := '';
   region.Pen.Mode := pmNop;  // Rahmen ausschalten
//   region.Pen.Color := clRed; // Test
end;


// alle Regionen wieder entfernen (zurück auf den ursprünglichen Report)
procedure TForm1.ResetRegions;
   procedure ResetBandOfRegion(region:TppRegion);
   begin
      region.Band := ReportRegions.DetailBand;
   end;
begin
   ResetBandOfRegion(Region1);
   ResetBandOfRegion(Region2);
   ResetBandOfRegion(Region3);
end;

JannesDKS 25. Jan 2011 15:44

AW: ReportBuilder - Labels auf Region zur Laufzeit erzeugen
 
Hey Shmia,

danke für den Hinweis, aber das nützt mir hier eigentlich nix. Das problem ist eher, dass ich die Labels horizontal anordnen möchte. die captions aber immer unterschiedlich lang sind. Im einen Land hat der Bank-Code mehr stellen als in anderen, usw.
Daher kam ich auf die Idee, die Labels zur Laufzeit zu erzeugen und so den verfügbaren Platz ideal auszunutzen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:02 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