AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FindComponent in anderer Unit

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

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

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:40
Zitat:
Was ist casten?
TPanel(), TWinControl()
Zitat:
Was heißt Form1 instantieert?
Wurde schon einen Instanz der Klasse TForm1 erzeugt?

Warum brichst du den Cast und den Zugriff nicht auf:

Delphi-Quellcode:
if wParent.FindComponent(sName) <> nil then
    Parent:=TWinControl(wParent.FindComponent(sName));
Markus Kinzler
  Mit Zitat antworten Zitat
Andreas L.
(Gast)

n/a Beiträge
 
#12

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:47
Zitat von mkinzler:
Zitat:
Was heißt Form1 instantieert?
Wurde schon einen Instanz der Klasse TForm1 erzeugt?

Warum brichst du den Cast und den Zugriff nicht auf:

Delphi-Quellcode:
if wParent.FindComponent(sName) <> nil then
    Parent:=TWinControl(wParent.FindComponent(sName));
Instanz wurde erzeugt. Ich habe deinen Code verwendet, die AV komt trotzdem. Warum?
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#13

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 15:56
Hallo onlinehome,

Zitat von onlinehome:
Delphi-Quellcode:
TPanel.Create(Parent).Name:=Name; // <-- Instanz erzeugen, aber Zeiger nicht speichern?
with TPanel(FindComponent(Name)) do
  begin
   Parent:=Parent; // <--- das kann nicht funktionieren
   Width:=Width; // woher soll der Compiler wissen,
   Height:=Height; // ob du den Prozedurparameter
   Left:=Left; // oder die Eigenschaft meinst?
   Top:=Top; //
   Color:=clWhite;
   Caption:='';
  end;
Ich vermute, du möchtest so etwas erreichen:

Delphi-Quellcode:
procedure CreatePanelWithScrollBox (aParent: TWinControl;
                                    aName: string;
                                    aLeft, aTop, aWidth, aHeight: Integer);
var
  lPanel : TPanel;
  lScrollBox : TScrollBox;
begin
  // Panel erzeugen
  lPanel := TPanel.Create(aParent);
  with lPanel do
    begin
      Name := aName;
      Parent := aParent;
      SetBounds (aLeft, aTop, aWidth, aHeight);
      Color := clWhite;
      Caption := '';
    end;
  // ScrollBox erzeugen
  lScrollBox := TScrollBox.Create(lPanel);
  with lScrollBox do
    begin
      Name := aName + 'page';
      Parent := lPanel;
      Align := alClient;
      Color := clWhite;
    end;
end;
Ich habe den Code nicht getestet, Fehler sind möglich.

Gruß Hawkeye
  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
 
#14

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 16:11
Eine AV IST eine Exception.
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
 
#15

Re: FindComponent in anderer Unit

  Alt 3. Sep 2006, 16:29
Zitat von Hawkeye219:
Hallo onlinehome,

Zitat von onlinehome:
Delphi-Quellcode:
TPanel.Create(Parent).Name:=Name; // <-- Instanz erzeugen, aber Zeiger nicht speichern?
with TPanel(FindComponent(Name)) do
  begin
   Parent:=Parent; // <--- das kann nicht funktionieren
   Width:=Width; // woher soll der Compiler wissen,
   Height:=Height; // ob du den Prozedurparameter
   Left:=Left; // oder die Eigenschaft meinst?
   Top:=Top; //
   Color:=clWhite;
   Caption:='';
  end;
Ich vermute, du möchtest so etwas erreichen:

Delphi-Quellcode:
procedure CreatePanelWithScrollBox (aParent: TWinControl;
                                    aName: string;
                                    aLeft, aTop, aWidth, aHeight: Integer);
var
  lPanel : TPanel;
  lScrollBox : TScrollBox;
begin
  // Panel erzeugen
  lPanel := TPanel.Create(aParent);
  with lPanel do
    begin
      Name := aName;
      Parent := aParent;
      SetBounds (aLeft, aTop, aWidth, aHeight);
      Color := clWhite;
      Caption := '';
    end;
  // ScrollBox erzeugen
  lScrollBox := TScrollBox.Create(lPanel);
  with lScrollBox do
    begin
      Name := aName + 'page';
      Parent := lPanel;
      Align := alClient;
      Color := clWhite;
    end;
end;
Ich habe den Code nicht getestet, Fehler sind möglich.

Gruß Hawkeye
Ja, so hatte ich das auch schonmal. Keine Ahnung wieso ich diese Lösung damals nicht mehr verwendet habe. Mein Source ist shcon etwas älter Danke an alle. Schönen Sonntag Abend noch.
  Mit Zitat antworten Zitat
Benutzerbild von MacGuyver
MacGuyver

Registriert seit: 9. Sep 2003
Ort: Wildeshausen
293 Beiträge
 
Turbo Delphi für Win32
 
#16

AW: FindComponent in anderer Unit

  Alt 29. Mär 2011, 08:39
Moin Leute,

ich musste mich gerade mit dem Thema auseinandersetzen.

Also:
Der Owner ist die Form. Ganz wichtig. Jedes Control muss beim Create die Form übergeben bekommen. Die Form "besitzt" alle Controls, ist halt wie der König und sein Folk.

Bei dem neu erzeugten Control muss Parent auf seinen Vorfahr gesetzt werden, damit da die Verbindung für die Gui da ist.

FindComponent: NUR in der Form aufrufen. Die Funktion durchläuft die Components, die nur in der Form gesetzt sind.

FindControl: Die Funktion läuft über die Contols, die Nachfahren.
Will man über FindControls eine Komponente finden, muss man von der Form aus rekursiv alle Controls durchlaufen. Das kann man sich sparen, indem man gleich von der Form aus FindComponent aufruft.

Man kann Controls umhängen und verschieben, wie man will. In Components bleiben sie erhalten. Wird ein Control freigegeben, verschwindet der Eintrag auch aus dem Components.
Englisch eine Weltsprache? Zu kompliziert und der nahe Osten würde Englisch als Pflichtweltsprache nicht akzeptieren.
IDO wäre genau das Richtige: http://forum.idolinguo.de/index.php oder www.idolinguo.de
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 23:32 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