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/)
-   -   Delphi dynamische QRLabels auf QuickReport wie löschen? (https://www.delphipraxis.net/60869-dynamische-qrlabels-auf-quickreport-wie-loeschen.html)

Tyler 13. Jan 2006 11:28


dynamische QRLabels auf QuickReport wie löschen?
 
Salut :)

zur Laufzeit erstelle ich dynamisch über ein Array of TQRLabel ein paar Labels auf einem Quickreport und fülle diese.

Möchte ich nun diese Labels löschen und erneut füllen, erhalte ich eine Zugriffsverletzung, trotz dem ich das Array vorher per FOR-TO-Schleife gelöscht habe - vermutlich wird so zwar das Array geleert, die Komponenten auf dem QUickreport bleiben aber wohl erhalten.

Ich müsste also den Quickreport zurücksetzen können. Z.B. in dem ich ihn auf eine externe Form auslager, welche ich kurzzeitig schliesse und wieder neu erstelle? Das ist aber ncht praktikabel für mich - im Moment benutze ich je Quickreport ein Tabsheet. Mit eigenen Formen würde ich irgendwann die Übersicht verlieren.

HAt wer ne Idee?

MrSpock 13. Jan 2006 12:20

Re: dynamische QRLabels auf QuickReport wie löschen?
 
Hallo Tylor,

wenn du das Label löscht musst du es natürlich vor dem Füllen wieder mit create erstellen. Würde es denn nicht Sinn machen, einfach nur den Text zu ändern?

Tyler 13. Jan 2006 12:50

Re: dynamische QRLabels auf QuickReport wie löschen?
 
Nicht, wenn ich einfach die ganze Prozedure von vorne starte, weil der Anwender den Button halt nochmal drücken möchte :)

Es geht ja offensichtlich darum, dass sich die Labels nicht vom QReport löschen lassen, da dieser bereits gerendert wurde.

omata 13. Jan 2006 17:56

Re: dynamische QRLabels auf QuickReport wie löschen?
 
Moin,

wenn du Komponenten dynamisch auf einem Quickreport erzeugst, geht das nur im Konstruktor.
Es ist auch nicht sinnvoll die erzeugten Komponenten selber wieder freizugeben.
Da der Report der Parent ist, sorgt dieser auch wieder für die Freigabe.

Du solltest die im Konstruktor erzeugten Komponenten in einem Unit-Globalen-Array zusätzlich ablegen, damit du in den anderen Routinen deines Reports Zugriff auf diese Komponenten hast. Um das Freigeben brauchst du dich nicht kümmern. Wenn dein Report jetzt neu erzeugt werden soll (ohne ihn neu zu createn) dann musst du dein Array durchgehen und die Komponenten zurücksetzen bzw. neu setzen (z.B. die Caption, Left, Top oder Height um des unsichtbar zu machen - Enabled klappt nämlich leider nicht - setzen)

Anders geht es nicht.

Da du die Anzahl der erzeugten Komponenten (nach dem Kontruktoraufruf) nicht mehr ändern kannst, kann das eventuell zu Problemen führen. Oder ist diese Anzahl immer gleich?
Wenn nein, solltest du den Report einfach zerstören und neu generieren lassen.
Wenn ja, siehe vorherigen Absatz.

MfG
Thorsten

crystalkind 26. Jan 2006 11:22

Re: dynamische QRLabels auf QuickReport wie löschen?
 
hi,

wenn du nur die labels, die in einer bestehenden qr-instanz drin sind, wegnehmen willst, reicht es nicht, diese instanzen, die in einem separaten array abgelegt sind, dort zu zerstören. Es gibt ein qr-internes array Controls, welches dann die zerstörten instanzen referenziert => resultat: fehler bei zugriff. Um den qr zu leeren bzw. die controls zu löschen, entfernst du in einer schleife immer control[0] mit removecontrol, bis controlCount = 0 ist. so müsst es gehen :spin2:

cu :hi:


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