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 VCL-Kompon.-Datenstruktur nur aus Form1-Unit nutzbar ?? (https://www.delphipraxis.net/133182-vcl-kompon-datenstruktur-nur-aus-form1-unit-nutzbar.html)

EccoBravo 27. Apr 2009 13:52


VCL-Kompon.-Datenstruktur nur aus Form1-Unit nutzbar ??
 
Hallo,

will datenintensive Datenstruktur einer VCL-Komponente K_EB_DCM, geladen in der Form1-Unit U_EB meines Projektes P_EB, aus einer Unterprogramm-Unit U_EB_DCM heraus mit Daten versorgen.

Das geht aber nicht, da es sich bei K_EB_DCM um eine VCL-Komponente handelt.
Es kommt die Compilermeldung zur Laufzeit in U_EB_DCM:
Im Project P_EB.exe ist eine Exception der Klasse EAccessViolation mit der Meldung "Zugriffsverletzung bei Adresse 0045E123 in Modul P_EB.exe".Schreiben von Adresse 000001B0 aufgetreten.

Wozu dieser Quatsch ?:

Die in der VCL-Komponente benötigte Datenmenge/Datenstruktur ist sehr groß.

Die Unterprogramm-Unit U_EB_DCM dient zum Einlesen der Daten aus einer Datei.

Die Datenmenge/Datenstruktur, die von der Komponente K_EB_DCM benötigt wird, ist sehr groß.
Die Daten sollen beim Einlesen gleich in die Datenstruktur der Komponente K_EB_DCM geschoben werden.

Die Komponente K_EB_DCM selbst soll dem Projekt als Speicher für die Datenmange/Datenstruktur dienen.
(ich will diese Datenmenge/Datenstruktur nicht zweimal in meinem Project anlegen)

Geht das überhaupt ?
Wenn ja, wie geht das ?
Gibt es eine bessere Lösung ?

Danke für Hilfe

EB

Phoenix 27. Apr 2009 14:05

Re: VCL-Kompon.-Datenstruktur nur aus Form1-Unit nutzbar ??
 
Ja, es gibt eine bessere Lösung.

Du packst die Datenstruktur in eine eigene Unit.
Diese Unit wird dann sowohl von der Unit die die Daten einliest als auch von der Komponente verwendet.

Der Speicher wird von der Unit reserviert, die die Daten einliest. Die Komponente selber erhält dann nur eine Referenz auf diese Daten.

Da Du nicht mit mehr Informationen rausrückst wie die Komponente die Daten derzeit verwendet und wie Du Dir das ganze im Detail vorstellst kann ich auch nicht konkreter werden. Aber wenn die Daten wirklich nur einmal im Speicher liegen sollen ist vielleicht das Stichwort 'Singleton' noch eine Alternative.

Edit nachtrag:
Wenn es eine Komponente sein soll, die nur die Daten hält, dann könntest Du diese ggf. auch auf ein Datenmodul legen, und dieses Datenmodul von allen benötigten Units aus anziehen.

hoika 27. Apr 2009 14:07

Re: VCL-Kompon.-Datenstruktur nur aus Form1-Unit nutzbar ??
 
Hallo,

da es sich um eine Klasse handelt,
übergebe die Variable deinem Unterprogramm als Parameter.


Delphi-Quellcode:
Datei: UEB.pas
TForm1 = class(TForm)
  K_EB_DCM: TK_EB_DCM;

implementation

procedure TForm1.LoadData;
begin
  _LoadData(K_EB_DCM);
end;

==========================

Datei U_EB_DCM.pas

interface

procedure _LoadData(theK_EB_DCM: TK_EB_DCM);

implementation

procedure _LoadData(theK_EB_DCM: TK_EB_DCM);
begin
  theK_EB_DCM.Name:= 'hoika' ;)
end;

Heiko


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

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