Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Probleme mit Fastreport - Ausgabe einer StringList
NOS1971 - Mo 03.02.14 20:08
Titel: Probleme mit Fastreport - Ausgabe einer StringList
Hallo zusammen,
ich versuche einen Report zu generieren und habe es soweit im Griff das ich meine Texte etc. gesetzt bekomme. Nun bin ich an dem Punkt wo ich eine StringList ausgeben möchte und habe das entsprechend dem Beispiel auch alles in meine Software integriert mit dem Ergebnis dass das GetValue des Reports nicht aufgerufen wird. Die DataSet Compo ist auf dme Mainform vorhanden. Länge wird vor dem Erzeugen des Reports auch per Code gesetzt. Zum Schluss erscheint sooft wie ich in der StringList Werte habe der Name der Komponente. Dann habe ich gecheckt ob die GetValue Routine gecalled wird aber da passiert nix.
ANy idea ?
Grüße und Dank vorab,
Andreas
Lemmy - Mo 03.02.14 20:50
Implementier mal OnNewGetValue des UserDataset... wird die aufgerufen?
Grüße
NOS1971 - Mo 03.02.14 20:59
Lemmy hat folgendes geschrieben : |
Implementier mal OnNewGetValue des UserDataset... wird die aufgerufen?
Grüße |
wird auch nicht aufgerufen ... die demo läuft aber einwandfrei ...
Hier mal mein Code der generate routine
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| tbpSpiderPager.ActivePageIndex := 2;
KeywordList.RangeBegin := rbFirst; KeywordList.RangeEnd := reCount; KeywordList.RangeEndCount := MultiThreadedWebAnalyser.CompleteKeywordList.Count;
Report.PreviewOptions.ThumbnailVisible := true; Report.ShowReport; |
und die OnBeforePrint
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| procedure TfrmWebsiteSpider.ReportBeforePrint(Sender: TfrxReportComponent); begin if Sender.Name = 'memoAnalysisReportName' then TfrxMemoView(Sender).Text := sReportWebSiteAnalysisOf; if Sender.Name = 'memoAnalysisDomainName' then TfrxMemoView(Sender).Text := MultiThreadedWebAnalyser.AnalyseURL; if Sender.Name = 'memoAnalysisCreatedWith' then TfrxMemoView(Sender).Text := sReportCreatedWith; if Sender.Name = 'memoCreationDateLabel' then TfrxMemoView(Sender).Text := sReportCreatedAtDate + ':'; if Sender.Name = 'memoCreationTimeLabel' then TfrxMemoView(Sender).Text := sReportCreatedAtTime + ':'; if Sender.Name = 'memoCreationDate' then TfrxMemoView(Sender).Text := DateToStr(MultiThreadedWebAnalyser.StartTime); if Sender.Name = 'memoCreationTime' then TfrxMemoView(Sender).Text := TimeToStr(MultiThreadedWebAnalyser.StartTime) + ' ' + sReportClock; if Sender.Name = 'memoAnalysedDomain' then TfrxMemoView(Sender).Text := MultiThreadedWebAnalyser.AnalyseURL; if Sender.Name = 'memoAnalysedDomainLabel' then TfrxMemoView(Sender).Text := sReportAnalysedURL + ':'; if Sender.Name = 'memoNeededTime' then TfrxMemoView(Sender).Text := TimeToStr(MultiThreadedWebAnalyser.StopTime - MultiThreadedWebAnalyser.StartTime) + ' (' + inttostr(SecondsBetween(MultithreadedWebAnalyser.StopTime, MultiThreadedWebAnalyser.StartTime)) + ' ' + sSeconds + ')'; if Sender.Name = 'memoNeededTimeLabel' then TfrxMemoView(Sender).Text := sReportNeededTime + ':'; if Sender.Name = 'memoURLBasicData' then TfrxMemoView(Sender).Text := sReportURLBasicData; if Sender.Name = 'memoAnalysedLinksLabel' then TfrxMemoView(Sender).Text := sReportAnalysedLinks + ':'; if Sender.Name = 'memoAnalysedLinks' then TfrxMemoView(Sender).Text := IntToStr(MultiThreadedWebAnalyser.ProgressData.AnalysedCount); if Sender.Name = 'memoProcessedLinksLabel' then TfrxMemoView(Sender).Text := sReportProcessedLinks + ':'; if Sender.Name = 'memoProcessedLinks' then TfrxMemoView(Sender).Text := IntToStr(MultiThreadedWebAnalyser.ProgressData.ProcessedCount); if Sender.Name = 'memoFoundKeywords' then TfrxMemoView(Sender).Text := IntToStr(MultiThreadedWebAnalyser.CompleteKeywordList.Count); if Sender.Name = 'memoFoundKeywordsLabel' then TfrxMemoView(Sender).Text := sDifferentFoundKeywords + ':'; if Sender.Name = 'memoURLBasicData' then TfrxMemoView(Sender).Text := sURLBasicData; if Sender.Name = 'memoGlobalKeywordData' then TfrxMemoView(Sender).Text := sDifferentFoundKeywords;
end; |
Lemmy - Mo 03.02.14 21:40
nein, nochmal von vorne. Die Komponente "KeyWordList" - was ist das? Eine TfrxUserDataset? Dann implementier von dieser Komponente die OnNewGetValue - nix vom Report. Und selbstverständlich auch alle anderen notwendigen Ereignisse (OnFirst, ....) Damit iterierst Du durch deine Datenmenge und kannst die Daten an den Report senden.
Wenn Du nur einen Datensatz hast, dann kannst Du das auch über Variablen lösen, dann brauchst Du auch kein MasterDataset
NOS1971 - Mo 03.02.14 22:00
Also ...
KeywordList ist ein tfrxUserDataSet ... es kommen noch verschiedene stringgrids oder listen mit mehreren spalten dazu später ... hier ist es eine liste genutzter keywords einer url bzw einer gesamten gespiderten webseite
auch von dem DataSet wird weder GetValue noch NewGetValue aufgerufen
Lemmy - Mo 03.02.14 22:19
Und die restlichen Events hast Du auch implementiert (OnCheckEOF, OnFirst, OnNext, onPrior)? Kannst Du mal das Projekt hier rein stellen oder ist das zu umfangreich?
NOS1971 - Mo 03.02.14 22:22
Lemmy hat folgendes geschrieben : |
Und die restlichen Events hast Du auch implementiert (OnCheckEOF, OnFirst, OnNext, onPrior)? Kannst Du mal das Projekt hier rein stellen oder ist das zu umfangreich? |
nein ... die anderen events habe ich nicht genutzt ... im moment, so als rookie, wüsste ich auch nicht was da rein sollte ... zum reinstellen ist es zu umfangreich ... ich nutze noch tms und andere compos und der spider etc. hängt auch mit drin
Lemmy - Mo 03.02.14 22:56
Also, du hast eine Liste, z.B: deine Stringlist mit dem schönen Namen "Werte", dann brauchst Du noch einen Zeilenzähler z.B. AktuelleZeile
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| OnCheckEOF:
AktuelleZeile >= Werte.Count;
OnPrior: Dec(AktuelleZeile);
OnNext: Inc(AktuelleZeile);
OnFirst:
AktuelleZeile := 0; |
NOS1971 - Mo 03.02.14 23:01
Wird das denn nicht in KeywordList.RecNo automatisch gehandelt ... ich hatte es so verstanden das ich dem datensatz sage wie er zählen soll und wie hoch die anzahl der einträge ist und er dann x mal das getvalue aufruft ... so ist es in der demo auch
bye the way sollte es auch so funzen das ich in der GetValue des Reports folgendes mache
Delphi-Quelltext
1: 2:
| if CompareText(VarName, 'memoKeyword') = 0 then Value := MultiThreadedWebAnalyser.CompleteKeywordList[KeywordList.RecNo]; |
ich habe das gefühl irgendwas dummes fehlt noch was ich übersehe ... leider ist die docu an der stelle auch sehr dürftig gestaltet finde ich
NOS1971 - Mi 05.02.14 17:17
Und ich hatte Recht :-) ... es war mal wieder was total dummes ... es funktioniert einwandfrei über den report.getvalue event ... wichtig ist, und das war der einzige fehler, das der text des memos im masterdata band des reports mit dem namen "memoKeywordList" in eckige Klammern gefasst wird -> also "[memoKeywordList]"
Thats all :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!