![]() |
FMX:OpenGL-Panel oder Layout in 2D Formular
Hallo,
Wie kann ich unter FMX ein 3D-Panel oder Layout in ein 2D Formular einbetten ? Ich möchte eine Opengl-Anwendung nach FMX portieren. |
AW: FMX: 3D-Panel oder Layout in 2D Formular
Zitat:
auf einem Firemonkey HD Formular kannst du eine ![]() Bei mir hat sich Delphi jedoch oft aufgehanden und ist dann abgestürzt, direkt bei 3D Formularen klappt es jedoch ohne abstürze. Freundliche Grüsse |
AW: FMX: 3D-Panel oder Layout in 2D Formular
Das würde ich ehrlich gesagt nicht empfehlen. TViewport3D rendert in ein Bitmap und das wird dann angezeigt. Guck dir mal TCustomContextOpenGL.DoCopyToBitmap an. Das ist grottenlangsam. Besser du nimmst gleich ein Form3D und packst die 2D Anzeige in einen Layer.
|
AW: FMX: 3D-Panel oder Layout in 2D Formular
Zitat:
Freundliche Grüsse |
AW: FMX:OpenGL-Panel oder Layout in 2D Formular
kann ich auch reine OpenGL-Panel anlegen, so wie bei VCL ?
Sowas bräuchte ich. |
AW: FMX:OpenGL-Panel oder Layout in 2D Formular
Zitat:
![]() Wie es mit Windows und Mac aussieht kann ich dir nicht sagen, habe aber gelesen das es nicht einfach (vielleicht auch unmöglich) sein soll Firemonkey dazu zu überreden ein eigenes OpenGL context zu erstellen. Wenn ich den Link dazu noch finde editiere ich ihn rein. Freundliche Grüsse Edit: ![]() |
AW: FMX:OpenGL-Panel oder Layout in 2D Formular
Ich kann es Dir nicht genau sagen, aber bei GLScene funktioniert es wohl. Dort gibt es eine Unit "GLScene.FMX.Viewer". Es wird wohl irgendwie ein Kontext erzeugt.
Vlt hilft Dir das ja weiter. P.S.: Wenn Du es geschafft hast, dann bitte eine Rückmeldung. ![]() |
AW: FMX:OpenGL-Panel oder Layout in 2D Formular
Hallo Milos, Hallo Jens01 so gehts z.B.:
1.Dieses VCL-Panel FMX-Adapter einbinden ![]()
Delphi-Quellcode:
unit FMXAdapter;
interface uses FMX.Forms, Vcl.ExtCtrls; type TFMX_Adapter_Panel = class(Vcl.ExtCtrls.TPanel) private FForm: TCommonCustomForm; procedure ResizeForm; procedure SetForm(const AForm: TCommonCustomForm); protected procedure Resize; override; public property Form: TCommonCustomForm read FForm write SetForm; end; implementation uses Types, Winapi.Windows, System.SysUtils, FMX.Platform.Win; { TFMX_Adapter_Panel } procedure TFMX_Adapter_Panel.Resize; begin inherited; ResizeForm(); end; procedure TFMX_Adapter_Panel.ResizeForm; begin if Assigned(FForm) then begin FForm.SetBounds(BorderWidth, BorderWidth, ClientWidth + BorderWidth, ClientHeight + BorderWidth); end; end; procedure TFMX_Adapter_Panel.SetForm(const AForm: TCommonCustomForm); begin FForm := AForm; FForm.BorderIcons := []; FForm.BorderStyle := TFmxFormBorderStyle.bsNone; FForm.Visible := True; Winapi.Windows.SetParent( FmxHandleToHWND(FForm.Handle),Handle ); FForm.Left:=0; FForm.Top:=0; FForm.Width:=width; FForm.Height:=height; ResizeForm(); end; end. 2. und in einem FMX-Fenster plazieren über:
Delphi-Quellcode:
FMX_Adapter_Panel.ParentWindow := FormToHWND( Self );
3. Ein weiteres FMX-Fenster FMX_Render_Form in diesem FMX_Adapter_Panel plazieren über: FMX_Adapter_Panel.Form:=FMX_Render_Form; // SetForm gegenüber dem Link geändert, damit sich das Form sauber im Panel plaziert. 4. Dann kannst Du Dein Bsp. drinnen laufen lassen, indem Du Dein FMX_Render_Form übergibst: ![]() ![]() Ich hab auch versucht in das VCL-Panel zu rendern. Es tat sich aber nichts. Beim FMX-Form im VCL-Panel geht es. Die Frage ist: Wie läuft das Ganze unter Android, wenn man bei diesem Weg ein VCL-Panel als Container nehmen muss ? Man kann auch ein FMX-Form in ein anderes legen über
Delphi-Quellcode:
doch wenn man den Rahmen und die Icons wegnimmt geht es nicht mehr - seltsam.
Winapi.Windows.SetParent( FmxHandleToHWND(Form_x.Handle),FmxHandleToHWND(Handle) );
Embarcadero könnte da mal was passendes liefern. |
AW: FMX:OpenGL-Panel oder Layout in 2D Formular
das funktioniert leider nur unter Windows.
Gibt es für Android auch eine Lösung ? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:56 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