Autor Beitrag
GuaAck
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 301
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: So 03.02.19 01:14 
Hallo,

ich habe seit vielen Jahren ein Programm, um Messdaten in 3D darzustellen. Mit Maus und Wheel kann ich schieben, drehen zoomen, also bestens. Ich mache das mit DirectX, das in einem TFrame im MainForm läuft.

Nun habe ich spezielle Messdaten, für die ich gerne vier solcher Frames auf dem Bildschirm hätte. Mein Ansatz:

ausblenden Delphi-Quelltext
1:
2:
3:
TPlott3D_multi = CLASS
  frame: array[0..3of TPlott3D;
END;


In meinem bisherigen Programm habe ich als Test alle "Plott3D" ersetzt durch:
ausblenden Delphi-Quelltext
1:
2:
FOR i_frame:=0 TO 3 DO
  Plott3D_Multi.frame[i_frame]....


Erwartet hatte ich nun vier gleiche Bilder in den vier Frames im Mainform. Aber nur der letzte Frame zeigt das Bild.

Jetzt erscheint mir das sogar logisch: DirectX nutzt ja die Hardware der Grafikkarte und die nimmt das, was zuletzt kommt.

Mein ursprüngliches Programm kann ich ohne Probleme mehrfach starten, funktioniert. Windows sichert also wohl bei einem Prozesswechsel die Daten.

Nun meine zwei Fragen:
a) Liege ich mit meiner Einschätzug richtig? Oder müsste es mit mehreren Frames gehen und ich habe ein falsches Verständnis?

b) Würde es gehen, wenn ich DirectX in vier einzelnen Threads unterbringe? Aus dem Thread würde zwar auf die Frames im MainForm zugegriffen, was eigenlich nicht sein sollte, aber ich habe mit solchen Konstrukten bisher keine Problem gehabt.

Vielleicht gibt es ja auch noch ander Lösungsideen.

Viele Grüße
GuaAck
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2295
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: So 03.02.19 06:41 
Guten Morgen GuaAck,

für eine anständige Antwort, ist deine Beschreibung zu schwammig formuliert.
Ein Codebeispiel wäre nicht verkehrt.

Wenn die TPlot3D-Objekte sowieso auf der "MainForm" landen, wozu platzierst du sie dann einzeln auf ein TFrame, welches auf der TForm landet?

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1169
Erhaltene Danke: 81

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: So 03.02.19 14:02 
Hallo,

ich habe bisher kaum mit DirectX gearbeitet. Dafür einiges mit OpenGL und einem 2D Renderer.
Das einzige Problem das mir aufgefallen ist, ist zwangsweise beim Anzeigen der Inhalte in Fenstern mit Synchronize zu arbeiten. Sonst bleibt immer mal was weg.
Allerdings rendere ich nicht in Frames sondern in TImages und deren TBitmap Eigenschaft.
Verwendest du Delphi oder Lazarus?

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
GuaAck Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 301
Erhaltene Danke: 28

Windows 8.1
Delphi 7 Pers.
BeitragVerfasst: Mo 04.02.19 21:06 
Hallo,

ich arbeite mit Delphi 7.0.

Warum Frames? Das weiß ich nicht mehr. Als ich vor vielen Jaheren mit DirectX anfing, da war das in einem Beispiel so gemacht, also habe ich es auch so gemacht und es funktionierte ja gut, also kein Anlass, was zu ändern. Ich pobiere aber mal, es in TImage zu machen.

Gruß GuaAck
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1169
Erhaltene Danke: 81

Win7
DXE2 Prof, Lazarus
BeitragVerfasst: Di 05.02.19 09:43 
Wenn ich micht recht erinnere haben Frames eigene Handles, also HDC. Was man bei Panels nicht hat. Deswegen zeichnet man halt auf dem Mainform oder in Frames, soweit man die arbeit mit einem TBitmap vermeiden will. Ich finde Bitmaps aber praktischer da man die auch einfach alle zusammen in ein großes Image zeichnen oder zum Debuggen auf die Platte schreiben kann.

Wenn das Programm nicht zu groß ist, dann steig damit auf die Emba/Delphi Community Version um. Das bringt massen Vorteile. Als einziger Nachteil ist die Größe der Exe zu nennen.

_________________
Solange keine Zeile Code geschrieben ist, läuft ein Programm immer fehlerfrei.
Ich teste nicht, weil ich Angst habe Fehler zu finden.
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2295
Erhaltene Danke: 420

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Mi 06.02.19 19:20 
Wenn man schlau ist, dann zeichnet man weder auf einem TForm, noch auf einem TFrame, da diese Fenster selbst permanent "bemalt" werden. Das merkt man dann am besten, sobald diese in Bewegung versetzt werden und man selbst etwas darauf zeichnet.
Ein TPanel, welches von TGraphicControl abstammt, wäre dafür garnicht so ungeeignet.
Entscheidend ist nicht die Eigenschaft .HDC, sondern .Parent, um ein Fenster auf ein Fenster zu platzieren.

Notwendig sind die TFrame Komponenten nicht.
Ich kann nur mutmaßen, dass sie für Schiebeeffekte via DragNDrop gedacht sind.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)