Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi (GLScene)zur Laufzeit erstellte FreeForm Objekte zugreifen (https://www.delphipraxis.net/57358-glscene-zur-laufzeit-erstellte-freeform-objekte-zugreifen.html)

terry43 19. Nov 2005 20:16


(GLScene)zur Laufzeit erstellte FreeForm Objekte zugreifen
 
Hallo hier ist Terry,
wenn mir bei meinem Problem jemand helfen könnte wäre ich sehr dankbar.
Ich programmiere einen Viewer mit Glscene (OpenGL).
Mir gelingt es nicht auf zur Laufzeit erzeugte FreeForm Objekte zuzugreifen. Dies
ist erforderlich um eine Datei zu erzeugen in der diverse Scenen Informationen gespeichert werden können.

FreeForm.Parent:=Self; funktioniert nicht.
das weitere tüfteln brachte auch nichts.
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var
  i: integer;
begin
  TFreeForm.Create(Self).Name := 'FreeForm';
  FreeForm:=TFreeForm(DummyCube1.AddNewChild(TFreeForm));
  FreeForm.Name := 'FreeForm';
  FreeForm.LoadFromFile('..\..\media\mushroom.3ds');
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  (FindComponent('FreeForm' as TFreeForm).position.x:=2;
end;
end;
[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

faux 19. Nov 2005 20:21

Re: Auf alle zur Laufzeit erstellten FreeForm Objekte zugrei
 
Hallo!

Les dir mal das hier durch: http://www.dsdt.info/grundlagen/sprache/oo.php. Da sind nämlich einige Fehler drinnen.

Was ist denn TFreeForm eigentlich?

Der_Unwissende 19. Nov 2005 22:37

Re: (GLScene)zur Laufzeit erstellte FreeForm Objekte zugreif
 
Hi,
da sind dir wohl echt ein paar Fehler zwischen gekommen. Bei der aktuellen Version von GLScene heißt die Klasse eigentlich TGLFreeForm. Mit z.B. folgendem Code solltest du das hinbekommen

Delphi-Quellcode:
var GLFreeForm : TGLFreeForm;
begin
  GLFreeForm := TGLFreeForm.Create(self.GLScene1);
  self.GLScene1.Objects.AddChild(GLFreeForm);
  GLFreeForm.Position.X := ....
end;
Und wenn du das Objekt suchst, ist der Name sicherlich nicht das Richtige, immerhin könntest du annonym so einige GLFreeForms einfügen. Wenn du jedenfalls nach einem FreeForm suchst, solltest du lieber die GLScene bemühen, in die du das Objekt eingefügt hast. Oder in deinem Fall, wenn du eh ein DummyCube mitbenutzt und der global (also z.B. schon zur Designzeit) gespeichert ist, kannst du auch direkt seine Childs durchgehen

Also entweder

Delphi-Quellcode:
  self.GLScene1.Objects.FindChild(ChildName : String, OnlyOwnChilds : Boolean); // bzw.
  self.GLDummyCube1.Objects.FindChild(ChildName : String, OnlyOwnChilds : Boolean)

oder

  for i := 0 to self.GLDummyCube1.Count - 1 do
    if (self.GLDummyCube1.Children[i] is TGLFreeForm) then
      ....

terry43 19. Nov 2005 22:59

Re: (GLScene)zur Laufzeit erstellte FreeForm Objekte zugreif
 
Hallo Wissender,

bin begeistert das eine wie das andere funktioniert,

wünsche noch eine gute Nacht.

Terry aus Berlin

Der_Unwissende 19. Nov 2005 23:05

Re: (GLScene)zur Laufzeit erstellte FreeForm Objekte zugreif
 
Ja, leider ist GLScene (mag es echt gerne) schlecht Dokumentiert. Aber wenn du genug damit machst, findest du dich auch irgendwann ganz gut darin zurecht.
Freut mich jedenfalls, dass ich helfen konnte (und bleibe Unwissend :mrgreen: )

Dir auch ne gute Nacht,
Der Unwissende aus Berlin

Ironmaster 9. Feb 2007 13:52

Re: (GLScene)zur Laufzeit erstellte FreeForm Objekte zugreif
 
hallo,
ich hatte das gleiche problem wie terry, welches ich nach diesen anweisungen lösen konnte. aber ein problem hab ich noch: ich möchte in die FreeForm natürlich ein Modell einfügen (.3ds) über

Delphi-Quellcode:
FreeForm.LoadFromFile('Pfad');
in anderen programmen die ich erstellt hab, funktioniert das wunderbar, aber nich wenn ich zur laufzeit die FreeForm erstelle. hab ich irgendwas vergessen?

danke schon mal

arbu man 9. Feb 2007 14:22

Re: (GLScene)zur Laufzeit erstellte FreeForm Objekte zugreif
 
hier kannst du Zum Beispiel sehen wie bei GLScene Objekte erzeugt werden:
Delphi-Quellcode:
MyFreeFormReferenz:= TGLFreeForm(GLScene1.Objects.AddNewChild(TGLFreeForm));


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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-2025 by Thomas Breitkreuz