Thema: Delphi Plugin-System fragen

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.288 Beiträge
 
Delphi 12 Athens
 
#15

Re: Plugin-System fragen

  Alt 21. Mai 2010, 12:55
OK, dann erklärt das schonmal das Verschwinden der Nicht-VCL-Komponenten.

Delphi erstellt die internen Windows-Controls gerne mal neu, wenn sich der Fenster-Style verändert.
Dabei gehen natürlich alle WinAPI-Sachen verloren.
Danach wird die Anzeige dann aus den VCL-Objekten neu aufgebaut, aber dort fehlen natürlich die "externen" Controls und alle (der VCL unbekannten und somit nicht beachteten) Änderungen via WinAPI.



Einzige Idee, welche ich aktuell hätte, wäre:

> vor dem (Un)Docking:
- alle externen Controls suchen
(im Fall der GibMirPanel wäre es einfach, denn da müßte man nur diese paar Panels prüfen)
- also via WinAPI alle ChildControls in den entsprechenden Komponenten (Fenster, Panels usw.) suchen, diese mit den Handles der VCL abgleichen >> übrig blieben dann nur die Fremdkomponenten
(sobkomponenten von Fremdkomponenten könnte man wohl erstmal ignorieren)
- dann eine temporäre (unsichtbare) Form erzeugen, darauf die Fremdkomponenten via MSDN-Library durchsuchenSetParent zwischenparken
- dabei die Verbindung von Handle der Fremdkomponente und der VCL-Komponente merken

> nun (un)docken

> nach dem (Un)Docking:
- jetzt die Fremdkomponenten wieder via MSDN-Library durchsuchenSetParent auf die neuen Windows-Controls (neues Handle zu den gemerkten VCL-Objekten) übergeben.
- eventuell Tempform löschen

(klingt schlimmer, als es ist )


Im Falle einer in ein Panel eingebundenen Form, könnte man sie auch mal kurzzeitig auf SetParent(..., nil) setzen und braucht womöglich keine Tempform.


Tja, wenn du alles/vieles über über die Pluginschnittstelle, als Weiterleitung zur Programminternen VCL, erzeugen ließest, dann würde die VCL alles kennen und nach dem Neuaufbau wäre nichts verschwunden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat