[Gelöst] Parent eines Objekts aus .ini-Datei auslesen

Rund um die LCL und andere Komponenten
Antworten
ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

[Gelöst] Parent eines Objekts aus .ini-Datei auslesen

Beitrag von ConcAPPtLab »

Hallo liebes Forum,

ich sitze gerade an einem Problem: Ich habe ein Programm, dass eine Benutzeroberfläche mit Panels in einer .ini-Datei abspeichern soll. Funktioniert so weit auch ganz gut, nur eine Sache macht mir zu schaffen: Der Parent.
Es gibt ja anscheinend keine Methode, Einträge einer .ini-Datei als Objekt auszulesen. Deswegen habe ich den Umweg über ReadString gemacht. Die Frage ist nur, wie ich diesen String in ein Objekt umgewandelt bekomme. Im Internet habe ich folgenden Code gefunden, aber er führt nicht zum gewünschten Ergebnis, es wird kein Objekt ausgegeben:

Code: Alles auswählen

 
FindComponent(iniFile.ReadString('Panel'+IntToStr(i), 'Parent', 'Form2')) as TForm
Kann mir vielleicht jemand eine Möglichkeit zeigen, einen String in ein Object zu konvertieren? Ich hatte auch noch was mit StringList und so gelesen, aber das schien mir ziemlich aufwendig dafür.

Ich bin dankbar für jede Antwort, die mir weiterhilft :)
Grüße,
ConcAPPtLab
Zuletzt geändert von ConcAPPtLab am Di 28. Apr 2015, 18:03, insgesamt 1-mal geändert.
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

Warf
Beiträge: 2302
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Parent eines Objekts aus .ini-Datei auslesen

Beitrag von Warf »

Ein TWinControl ist ja mehr als ein Name, aber ein TWinControl hat einen Namen über den man ihn suchen kann mit FindComponent

ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: Parent eines Objekts aus .ini-Datei auslesen

Beitrag von ConcAPPtLab »

Genau. Aber immer wenn ich dies einsetze, kommt die Fehlermeldung 'Project project1 hat eine Exception-Klasse >>EInvalidOperation<< ausgelöst mit der Meldung:
Control 'Panel0' has no parent window

In Datei '.\include\wincontril.inc' in Zeile 7344

Diese Fehlermeldung sagt mir nichts. Außer, dass Panel0 ancheinend keinen gültigen Parent hat. zugewiesen habe ich den Parent aber mit dem oben beschriebenen Code (bei dem definitiv 'Form2' als Antwort herausgegeben wird).

Ich hatte zum Testen folgendes eingesetzt:

Code: Alles auswählen

//mein Panel, das erzeugt wurde
UserPanels[i].Panel.Parent:=FindComponent('Form2') as TForm;
Und dann erscheint diese Fehlermeldung...
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

Warf
Beiträge: 2302
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: Win10 | Linux
CPU-Target: x86_64

Re: Parent eines Objekts aus .ini-Datei auslesen

Beitrag von Warf »

Ich denke das Problem ist dass du nicht in der Richtigen Komponente suchst, FindComponent sucht nach Komponenten innerhalb der aktuellen Form. Versuch stattdessen mal Application.FindComponent. Außerdem, wenn du dir nicht sicher bist ob der Parent eine Form ist nutze caste es lieber in ein WinControl (das erwartet die Parent Eigenschaft auch).

Code: Alles auswählen

Application.FindComponent('Name') as TWinControl
Außerdem überprüfe vorher ob ein Valider Zeiger zurückgegeben wurde.

Code: Alles auswählen

var
  cmp: TComponent;
..
cmp := Application.FindComponent('Name');
if Assigned(cmp) And (cmp Is TWinControl) then
  Foo.Parent := cmp as TWinControl
else
  Foo.Parent := StandartParentFallsKeineKomponenteGefundenWurde;

ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: Parent eines Objekts aus .ini-Datei auslesen

Beitrag von ConcAPPtLab »

Cool danke, funktioniert einwandfrei :)

Ich werde jetzt noch schnell googlen was assigned() und foo machen. Denn das weiß ich nocht nicht.

Vielen Dank für die schnelle Hilfe,
ConcAPPtLab
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

mark332
Beiträge: 202
Registriert: Do 16. Mai 2013, 13:49
OS, Lazarus, FPC: Windows 10 H.P. (x64) / Ubuntu 14.04.X
CPU-Target: AMD Octacore 4.0GHz

Re: Parent eines Objekts aus .ini-Datei auslesen

Beitrag von mark332 »

ConcAPPtLab hat geschrieben:Cool danke, funktioniert einwandfrei :)

Ich werde jetzt noch schnell googlen was assigned() und foo machen. Denn das weiß ich nocht nicht.

Vielen Dank für die schnelle Hilfe,
ConcAPPtLab
"Assigned" mach prinzipiell nur den check, ob ein bezeichner = nil ist

soll heißen "Assigned(b)=true" ist gleich mit "b<>nil"
(http://lazarus-ccr.sourceforge.net/docs ... igned.html)

"Foo" soll vermutlich nur dein Object darstellen ;)

MfG

mark332
------------------------------------------------------------
Warum gibt es hier eigentlich kein [SPOILER][/SPOILER] ?

ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: [Gelöst] Parent eines Objekts aus .ini-Datei auslesen

Beitrag von ConcAPPtLab »

Okay, Dankeschon :)

Im Internet stand was von Foo Test, deswegen habe ich gedacht, es wäre nochmal ne besondere Art von Sicherung :p

Dankeschön und Grüße
ConcAOPPtLab
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

Antworten