Zitat von
Muetze1:
Leite dir eine eigene Komponenten von TWinControl ab. Dort kannst du das Fensterhandle nutzen um dein
DC zu bekommen (kennst du ja) und diesen musste dann zu deinem Plugin o.ä. senden für sein BitBlt. Vorteil einer eigenen Komponente: du kannst CreateWnd; überschreiben und bekommst somit mit, wenn das Control (somit das Fenster) neu erzeugt wird während der Laufzeit. Dies sollte nämlich wohl der eigentliche Grund sein, warum sich dein HDC ändert. Somit musst du das HDC nur dann neu senden, wenn es sich wirklich geändert hat und du bekommst es direkt mit. Auch halte ich nichts davon ein
VCL Element zu missbrauchen (Ein Panel oder ein Image ist definitiv keine Zeichenfläche!!)
Danke..
Wäre in Delphi eine möglichkeit
Das Problem ist nur ich habe mit vielen sprachen zu tun und muss quasi unabhängig jetzt von Delphi
(eigene anwendung) der
DLL das HDC übergeben.
Wie gesagt über GetDC(Panel. bla bla) funktioniert das auch aber nicht von der PaintBox
oder ähnlichen Controls aus anderen Sprachen
Früher habe ich eine Renderfunktion übergeben..
Delphi-Quellcode:
function BASS_SONIQUEVIS_Render2(
handle: HVIS;
Data, fft: Pointer;
canvas: DWORD;
flags, pos: DWORD): boolean;
stdcall;
damit war gewährt das immer ein gültiges
DC übergeben wurde
Das habe ich geändert da ich festgestellt habe das es einigen Leuten extrem schwer viel die richtigen FFT Daten zu übergeben.
Das geschieht jetzt innerhalb BassVis
Das problem ist nun das ich die PaintBox refreshen muss um BitBlt immer ein aktuelles HDC zu übergeben.
Innerhalb der
DLL kenn ich aber das Objekt nicht und schon gar nicht von welcher Sprache
aus auf das
DC geschrieben werden soll.
Finde nicht den weg um das HDC zu übergeben.
Das Rendern wird nur einmal initialisiert und dann innerhalb BassVis in einen Thread verwaltet.
Hat auch den vorteil das man innerhalb der Anwendung nichts mehr damit zu tun hat.
Timer usw..
Hmmm .. muss mal schaun. Schwierig zu lösen.
gruss Emil