AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi StringToComponent (Class TPanel not found.)
Thema durchsuchen
Ansicht
Themen-Optionen

StringToComponent (Class TPanel not found.)

Ein Thema von globalenemy · begonnen am 23. Apr 2014 · letzter Beitrag vom 23. Apr 2014
Antwort Antwort
globalenemy

Registriert seit: 24. Mär 2014
10 Beiträge
 
#1

StringToComponent (Class TPanel not found.)

  Alt 23. Apr 2014, 14:42
Delphi-Version: XE5
Grüße,

Ich hab mir folgende Funktionen geschnappt:
http://docwiki.embarcadero.com/CodeE...g_%28Delphi%29

Und möchte diese auf ein Panel mit beliebigem Inhalt anwenden. Allerdings bekomm ich die Fehlermeldung "Class TPanel not found.". Was hat das zu bedeuten?
Ist die funktion humbug, oder mach ich was falsch? Ich möchte ein Panel kopieren und als ein neues einfügen. Da die funktion die Namen der Komponenten nicht ändert muss ich das natürlich im string nachträglich selber tun. Das wird einfach per RegEx geschehn, denke ich.

Mein Panel als String:
Code:
'object InnerPanel1: TPanel'#$D#$A' Left = 0'#$D#$A' Top = 56'#$D#$A' Width = 200'#$D#$A' Height = 56'#$D#$A' BevelInner = bvRaised'#$D#$A' BevelKind = bkFlat'#$D#$A' BevelOuter = bvNone'#$D#$A' Caption = ''InnerPanel1'''#$D#$A' Color = clWindow'#$D#$A' DoubleBuffered = True'#$D#$A' ParentBackground = False'#$D#$A' ParentDoubleBuffered = False'#$D#$A' PopupMenu = FormDesigner.IPPopup'#$D#$A' ShowCaption = False'#$D#$A' TabOrder = 1'#$D#$A' DesignSize = ('#$D#$A'   196'#$D#$A'   52)'#$D#$A' object IP1LineActionBtmLft: TLine'#$D#$A'   Left = 0'#$D#$A'   Top = 0'#$D#$A'   Width = 200'#$D#$A'   Height = 56'#$D#$A'   Enabled = False'#$D#$A'   Style = lsBottomLeft'#$D#$A' end'#$D#$A' object IP1LineActionTopRht: TLine'#$D#$A'   Left = 0'#$D#$A'   Top = 0'#$D#$A'   Width = 200'#$D#$A'   Height = 56'#$D#$A'   Enabled = False'#$D#$A'   Style = lsTopRight'#$D#$A' end'#$D#$A' object IP1Label: TLabel'#$D#$A'   Left = 8'#$D#$A'   Top = 8'#$D#$A'   Width = 180'#$D#$A'   Height = 36'#$D#$A'   Alignment = taCenter'#$D#$A'   Anchors = [akLeft, akTop, akRight, akBottom]'#$D#$A'   AutoSize = False'#$D#$A'   Caption = ''action1'''#$D#$A'   Layout = tlCenter'#$D#$A'   ExplicitWidth = 184'#$D#$A'   ExplicitHeight = 40'#$D#$A' end'#$D#$A'end'#$D#$A
Hab grad mal verucht Zeile 15 des snippets in meinem Code umzusetzen:
'IPanel = class(TPanel);' und alle TPanel zu IPanel geschrieben.
ohne erfolg. (Class IPanel not found.)

Geändert von globalenemy (23. Apr 2014 um 15:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: StringToComponent (Class TPanel not found.)

  Alt 23. Apr 2014, 15:01
Vielleicht muss ExtCtrls eingebunden sein?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: StringToComponent (Class TPanel not found.)

  Alt 23. Apr 2014, 15:16
Nein, es müssen die Komponenten erst registriert werden, welche man da verwenden will,
denn wie soll der Loader die Typen sonst finden? (und wehe jemand erwähnt die neue RTTI, denn Diese kennt der Loader nicht)
Siehe RegisterClass(MyScrollBar); in dem Beispiel.


Ich empfehle diese aber vor Aufruf der Ladefunktion zu registrieren und danach dann (im finally) wieder zu deregistrieren, denn eine Klasse darf nur einmal registriert sein und der zweite Versuch wird eine Exception werfen (falls das nicht inzwischen umgebaut wurde).
(in dem Beispiel ging das, da die klasse sonst nirgendwo verwendet wird)

PS: Der VCL-Loader, welcher die DFMs läd, da hat entweder der Compiler oder der Loader (weiß jetzt nicht wer das genau macht) aus der Klassendefinition die Typen der published Felder ausgelesen und holt sich darüber die Typen, registriert Diese und läd dann erst die DFM.



[add]
RTTI: Man kann über einen unqulifizierten Namen (ohne Namespace/Unit) keinen Typen genau bestimmen/suchen.
Erstellt mal mehrere Units, da drin ist überall je eine TForm1 und dann versucht über die RTTI die "richtige" TForm1 aus den Vielen rauszufinden.
$2B or not $2B

Geändert von himitsu (23. Apr 2014 um 16:07 Uhr)
  Mit Zitat antworten Zitat
globalenemy

Registriert seit: 24. Mär 2014
10 Beiträge
 
#4

AW: StringToComponent (Class TPanel not found.)

  Alt 23. Apr 2014, 15:36
vielen dank himitsu. läuft rund.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:25 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