AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

FindComponent in anderer Unit

Ein Thema von Andreas L. · begonnen am 3. Sep 2006 · letzter Beitrag vom 29. Mär 2011
Antwort Antwort
Seite 1 von 2  1 2   
Andreas L.
(Gast)

n/a Beiträge
 
#1

FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:19
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:
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, pngimage, JvGif, ExtCtrls;
Aufgerufen wird die Procedure von einer anderen Unit (mit Form) aus wie folgt.

procedure blubbCreate(form1, 'Titel', 5, 5, 5, 5); 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);

Die procedure ruft folgenden Code auf:

Delphi-Quellcode:
 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;
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 )

Schonmal Danke
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#2

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:22
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...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:22
FindComponent ist eine Methode der Form. Du musst also nur das FindComponent deiner anderen Formularinstanz aufrufen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#4

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:31
Zitat von 3_of_8:
FindComponent ist eine Methode der Form. Du musst also nur das FindComponent deiner anderen Formularinstanz aufrufen.
Es kompiliert

Aber jetzt bekomm eich eine Exception wenn ich der SCrollbox ein Parent zuweise. Woran könnte das liegen?

Parent:=TPanel(wParent.FindComponent(sName)); wParent ist bei meinen Beispiel aufruf Form1 und sName einfach nur ein String. Die SCrollbox soll quasi auf den vorhin erstellten Panel abgelegt werden.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:35
Parent:=TWinControl(wParent.FindComponent(sName));
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:37
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:37
-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.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:38
Ich dachte Parent wäre eine TWinControl-Eigenschaft?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:41
Zitat von 3_of_8:
Ich dachte Parent wäre eine TWinControl-Eigenschaft?
Stimmt ist vom Typ TWinControl
Markus Kinzler
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#10

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 16:33
Oops, es ist keine Exception sondern eine AV (siehe Anhang). Der Code Parent:=TWinControl(wParent.FindComponent(sName)); ruft die selbe AV auf.

Was ist casten? Wie verwenden ich TObjectList? Was heißt Form1 instantieert?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 06:14 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