![]() |
FindComponent in anderer Unit
Hi,
ich habe mir eine Unit gebastelt mit einer procedure. Diese Procedure erstellt mehrere Komponenten auf den übergebenen parent. Damit ich auch die Eigenschaften dieser Komponenten verändern kann habe ich FindComponent verwendet. Leider meldet mir der Compiler das FindComponent ein undefinierter Bezeichner sei. Ich habe folgende Units eingebunden:
Delphi-Quellcode:
Aufgerufen wird die Procedure von einer anderen Unit (mit Form) aus wie folgt.
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, pngimage, JvGif, ExtCtrls;
Delphi-Quellcode:
Der erste Parameter ist das Parent (also die Form der aufrufenden Unit), 2 Titel und die anderen sind Integer für Width, Height, Left, Top);
procedure blubbCreate(form1, 'Titel', 5, 5, 5, 5);
Die procedure ruft folgenden Code auf:
Delphi-Quellcode:
Wieso kann ich FindComponent nicht benutzen. Geht es überhaupt so wie ich es gemacht hab auf einer Form von einer anderen Unit aus die also nichts mit den Form zu tun hat Komponenten zu erstellen? (Mir ist klar das ich die 2te Unit bei der Form-Unit einbinden muss ;-))
TPanel.Create(Parent).Name:=Name;
with TPanel(FindComponent(Name)) do begin Parent:=Parent; Width:=Width; Height:=Height; Left:=Left; Top:=Top; Color:=clWhite; Caption:=''; end; TScrollBox.Create(TPanel(FindComponent(Name))).Name:=Name+'page'; with TScrollBox(FindComponent(Name+'page')) do begin Parent:=TPanel(FindComponent(Name)).parent; Align:=alClient; Color:=clWhite; end; Schonmal Danke |
Re: FindComponent in anderer Unit
Wenn die komponente auf form1 liegt, musst du das findcomponent auch für form1 ausführen. dann müsste das auch hinhauen.
andere sache: warum findcomponent? Es gibt fast immer elegantere möglichkeiten, als da mindestens wären array und TObjectList... |
Re: FindComponent in anderer Unit
FindComponent ist eine Methode der Form. Du musst also nur das FindComponent deiner anderen Formularinstanz aufrufen.
|
Re: FindComponent in anderer Unit
Zitat:
Aber jetzt bekomm eich eine Exception wenn ich der SCrollbox ein Parent zuweise. Woran könnte das liegen?
Delphi-Quellcode:
wParent ist bei meinen Beispiel aufruf Form1 und sName einfach nur ein String. Die SCrollbox soll quasi auf den vorhin erstellten Panel abgelegt werden.
Parent:=TPanel(wParent.FindComponent(sName));
|
Re: FindComponent in anderer Unit
Delphi-Quellcode:
Parent:=TWinControl(wParent.FindComponent(sName));
|
Re: FindComponent in anderer Unit
ich würde dir dringendst empfehlen, FindComponent komplett aus deinem Code zu entfernen. das ist langsam und fehlerträchtig. Mach es, wie ich bereits vorgeschlagen habe, mit TObjectList oder einem array. Besonders wenn du eh alles selber erstellst, ist das viel sauberer.
zu deinem fehler: erstens ist das ein harte cast, und zweitens ist nicht gewährleistet, dass überhaupt was rauskommt. es könnte auch NIL rauskommen, das du dann auf TPanel castest und zuweist... das schreit ja förmlich nach AV. |
Re: FindComponent in anderer Unit
-Welche Exception?
-Ist die andere Form schon instantieert? Das casten nach nach TPanel ist übrigens unnötigt, da der parent ja auch von Typ TComponent ist. |
Re: FindComponent in anderer Unit
Ich dachte Parent wäre eine TWinControl-Eigenschaft? :gruebel:
|
Re: FindComponent in anderer Unit
Zitat:
|
Re: FindComponent in anderer Unit
Oops, es ist keine Exception sondern eine AV (siehe Anhang). Der Code
Delphi-Quellcode:
ruft die selbe AV auf.
Parent:=TWinControl(wParent.FindComponent(sName));
Was ist casten? Wie verwenden ich TObjectList? Was heißt Form1 instantieert? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:40 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 by Thomas Breitkreuz