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 trichedit Stream lesen Fehler kein übergeordnetes Fenster (https://www.delphipraxis.net/195527-trichedit-stream-lesen-fehler-kein-uebergeordnetes-fenster.html)

DrUArn 7. Mär 2018 11:44

trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
Hi, comm,

habe ein problem mit dem Schreiben und Lesen von Trichedit in Ressourcendatei:

Delphi-Quellcode:
//Save
procedure TForm1.SaveStream1Click(Sender: TObject);
 var tr:trichedit;

begin
tr:=trichedit.create(self);
tr.parent:=self;
WriteComponentResFile(SpeicherFilename, tr);
freeandnil(tr);
end;


//Load Var. A, funktioniert
procedure TForm1.LoadStream1Click(Sender: TObject);
 var tr:trichedit;

begin
tr:=trichedit.create(self);
tr.parent:=self;
ReadComponentResFile(SpeicherFilename,tr);
end;
Delphi-Quellcode:
//Load Var. B funktioniert nicht
procedure TForm1.LoadStream1Click(Sender: TObject);
 var tr:trichedit;
begin
tr:=ReadComponentResFile(SpeicherFilename,nil) as TRichEdit;
end;
Bei Var. B kommt Fehlermeldung "Fehler beim lesen von Richedit1.lines.strings: Element 'Richedit1' hat kein übergeordnetes Fenster"

Das übergeordnete Fenster scheine ich in Var. A ja mit dem setzen von Parents zu erzeugen.

Heißt das, dass Var. B Prinzipiell nicht für tRichedit's geignet ist?

Zusatzfrage: Um in Streams schreiben und lesen zu können, muß man mit registerclasses die die Classen
registrieren. Wird trichedit automatiscjh registriert - wenn ja wo (in ComCTRLs nicht).

Grüße Uwe

Redeemer 7. Mär 2018 15:26

AW: trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
Vielleicht so?
Delphi-Quellcode:
procedure TForm1.LoadStream1Click(Sender: TObject);
 var tr:trichedit;
begin
tr:=ReadComponentResFile(SpeicherFilename,nil) as TRichEdit;
tr.parent := self; // so?
end;

DrUArn 7. Mär 2018 15:58

AW: trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
Hallo Redeemer,
geht so nicht,
der Fehler erfolgt schon hier

Delphi-Quellcode:
tr:=ReadComponentResFile(SpeicherFilename,nil) as TRichEdit;
Parent darf nicht Nil sein, scheinbar für irgendwelche Schreiboperationen nötig. Man könnte statt Form1 (self)
auch ein anderen Richedit in Parent schreiben in Var. A - nicht Zielführend, aber mgl. .

Gruß Uwe

himitsu 7. Mär 2018 17:37

AW: trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
Man kann eine neue Komponente erstellen lassen (Parameter nil),
oder man lässt die Ressource in eine existierende Komponente schreiben, die man vorher auch selber erstellen kann.

Bei vorher erstellten Komponenten muß man wegen des Komponenten-Namen aufpassen (der muß leider in der DFM/Ressource drin sein, für die Rootkomponente)
ändert sich der Name, dann ist auch die Komponenten-Variable/Feld leer (published Feld in einem TComponent, wie z.B. der Form),
denn TComponent setzt Felder in seinem Owner, welche so heißen wie die Komponente.
> Bei Verwendung von solchen Feldern/Variablen, knallt es somit, nach dem Auslesen, wenn sich der Name geändert hat. (weil NIL)

DrUArn 7. Mär 2018 17:48

AW: trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
@Himitsu

Delphi-Quellcode:

procedure TForm1.Button2Click(Sender: TObject);
 var tr:trichedit;
begin
tr:=TRichEdit.Create(Self);
tr.name:='Willi'; //hieß beim Speichern 'Richedit_UA1'
tr.parent:=self;
tr.name:='Willi';
readComponentResFile(Speicherfiledockrich ,tr);

Memo1.Lines.Add(tr.name); //heißt wieder 'Richedit_UA1'
aber
Delphi-Quellcode:
tr:=ReadComponentResFile(Speicherfiledockrich ,nil) as TRichEdit;
kommt mit der oben erwähnten Fehlermeldung (kein gültiges Fenster vorhanden)
und man kann parent auch nicht mehr setzen.

Gruß Uwe

hoika 7. Mär 2018 18:52

AW: trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
Hallo,
dann nimm Application statt nil und setze das danach gleich auf Visible=False.

DrUArn 7. Mär 2018 19:08

AW: trichedit Stream lesen Fehler kein übergeordnetes Fenster
 
@Hoika

Hallo,
meinst du so:
Delphi-Quellcode:

//geht nicht:
tr:=ReadComponentResFile(Speicherfiledockrich ,application) as TRichEdit;
tr.visible:=false;
das geht nicht, kommt eine Fehler-Meldung: Fehler beim Lesen von Richedit1.Width: Eigneschaft Width existiert nicht.

Ich denke, da wird versucht, in Applikation die Datzen eines Richedit einzulesen, was wohl nicht gut wäre
.

Gruß Uwe


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