Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Hinzufügen von Komponenten zu einer Form
Mitmischer 1703 - Sa 09.10.10 08:21
Titel: Hinzufügen von Komponenten zu einer Form
Hi DF :)!
Seit letzter Stunde erschien beim Starten eines meiner Programme die Fehlermeldung "Klasse nicht gefunden", nachdem ich eine neue Komponente aufs Formular gezogen habe. Den Grund habe ich dann gefunden - die neue Komponente wurde im Public-Bereich deklariert und nicht direkt unter der Klassendeklaration, also:
Delphi-Quelltext
1: 2: 3: 4:
| Form = TForm public |
Ich habe die Komponentendeklaration dann nach oben gezogen und voilà - funktioniert. Nun frage ich mich aber:
1. Warum fügt Delphi alle neuen Komponenten in den Public-Bereich ein? Kann man das abstellen?
2. Warum wird die Fehlermedlung geworfen, wenn die Komponente im Public-Bereich deklariert wird?
jaenicke - Sa 09.10.10 08:39
Mitmischer 1703 hat folgendes geschrieben : |
1. Warum fügt Delphi alle neuen Komponenten in den Public-Bereich ein? Kann man das abstellen? |
Das ist ein Fehler. Das ist bei mir noch nie passiert. Vielleicht hast du selber in die Standardsichtbarkeit oben irgendetwas geschrieben oder so, so dass Delphi durcheinander kommt. :nixweiss:
Mitmischer 1703 hat folgendes geschrieben : |
2. Warum wird die Fehlermedlung geworfen, wenn die Komponente im Public-Bereich deklariert wird? |
Weil dort nur selbst deklarierte Sachen rein gehören, genauso wie Komponenten nur in die Standardsichtbarkeit gehören. Nur dann wird glaube ich der entsprechende Code eingebunden, der für die Verknüpfung der Klasse mit der Information aus der Formulardefinitionsdatei (.dfm) notwendig ist.
Mitmischer 1703 - Sa 09.10.10 08:42
Hmm... Merkwürdig.
Und warum darf ich den Public-Bereich eigentlich nicht löschen :(?
Dann sagt er mir, dass das Feld MainForm keine entsprechende Komponente hätte :shock:...
jaenicke - Sa 09.10.10 08:44
Dann stimmt in dem Projekt etwas nicht. Ohne den Quelltext kann ich aber nicht so direkt sagen was. Das kann am Quelltext selbst liegen, aber auch an dem in der Formulardefinitionsdatei.
Ein Beispiel sind seltsame Bezeichnungen von Komponenten oder Variablen oder Typen (die in Konflikt mit delphieigenen stehen).
Mitmischer 1703 - Sa 09.10.10 08:46
hier :)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| type TMainForm = class(TForm) CB_Bidirectional: TCheckBox; Panel1: TPanel; Panel2: TPanel; BitBtn1: TBitBtn; LB_To: TListBox; LB_From: TListBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; LblTo: TLabel; LblFrom: TLabel; LblCosts: TLabel; procedure LB_Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure BitBtn1Click(Sender: TObject); private FLookupTable : array of array of Single; FFrom : String; FTo : String; procedure FillLookupTable(Size : Cardinal); procedure RefreshGUI; function CalculatePrice(From, &To : Cardinal) : Single; public end; |
ah, hab's! Der Ampersand scheint doch nicht ganz so zu funktionieren, wie gewünscht... der zweiter Parameter bei CalculatePrice darf nicht so heißen wie ein Schlüsselwort, auch nicht mit einem Ampersand davor...
jaenicke - Sa 09.10.10 08:48
Du hast da ein kaufmännisches Und vor dem To, das geht nicht. ;-)
// EDIT:
Ja, genau.
Nebenbei:
Ich setze da in der Regel ein großes A vor Parameter. So wird es oft gemacht, genau wie das F bei privaten Feldern.
Martok - Sa 09.10.10 13:59
jaenicke hat folgendes geschrieben : |
Mitmischer 1703 hat folgendes geschrieben : | 2. Warum wird die Fehlermedlung geworfen, wenn die Komponente im Public-Bereich deklariert wird? | Weil dort nur selbst deklarierte Sachen rein gehören, genauso wie Komponenten nur in die Standardsichtbarkeit gehören. Nur dann wird glaube ich der entsprechende Code eingebunden, der für die Verknüpfung der Klasse mit der Information aus der Formulardefinitionsdatei (.dfm) notwendig ist. |
Und falls das noch jemand genauer wissen will:
"nichts" in einer
class wirkt wie
published - und nur damit wird die Art RTTI generiert, die zum Laden benötigt wird: nicht für
public, und schon gar nicht für
private
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!