Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Firemonkey SetParent (https://www.delphipraxis.net/182177-firemonkey-setparent.html)

Kenrai 7. Okt 2014 12:01

Firemonkey SetParent
 
Hallo zusammen,

undzwar habe ich folgendes Problem....
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
wnd2: HWND;
begin
    wnd2 := 0;
    wnd2 := Findwindow('CalcFrame', nil );
        SetWindowPos(wnd2, 0, 0, 0, 0, 0, SWP_NOSIZE or SWP_NOZORDER);
    if wnd2 <> 0 then begin
        windows.SetParent(wnd2, form1.panel1.Handle);
    end;
end;
Das ist der Code um ein Fenster (notepad) auf ein Panel zu werfen... Funktioniert einwandfrei in VCL, jedoch wollte ich das ganze dann in FireMonkey testen und da gings dann leider nicht, weil dort die Komponenten keine Handle haben :shock:
Es geht wenn man das Fenster auf die Form selber wirft, da werden dann aber bei Bewegung des Fensters einige Teile abgeschnitten oder Verschwinden, aber wenn ein anderes Programm ausgewählt wird, zeichnet sich das Fenster neu und alles passt wieder. Nun zu meiner Frage:
1. Ist es möglich durch ein paar tricksereien das Notepad innerhalb des Panels zu zeichnen?
2. Wie könnte man den "bug" optimieren, dass einige Teile abgeschnitten bzw nicht gezeichnet werden, wenn man notepad innerhalb von FireMonkey bewegt?

Su-Fu genutzt aber leider nichts passendes gefunden, falls jemand doch was hat einfach den Link posten :)

Vielen Dank im Voraus!

-Eugeene

-Edit-
Ups, in dem obrigem Beispiel war der Versuch mit dem Rechner von Windows.

mkinzler 7. Okt 2014 12:10

AW: Firemonkey SetParent
 
1.) Nein, weil nur das Fenster ein Fenster(object) aus Windowssicht ist.
2.) Schicke dem fremdem Fenster eine Redrawmessage

Delphi-Quellcode:
  Res := SentMessage( wnd2, WM_SETREDRAW, True,0);

Kenrai 7. Okt 2014 12:21

AW: Firemonkey SetParent
 
Vielen Dank!

Das es keine möglichkeit zum Parenten gibt ist schade...
Aber das mit dem Redraw Funktioniert, dankeschön!
Hab es so gelöst:

Delphi-Quellcode:
RedrawWindow(wnd2, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);


Grüße,

-Eugeene

himitsu 7. Okt 2014 12:24

AW: Firemonkey SetParent
 
Zitat:

Zitat von mkinzler (Beitrag 1275085)
1.) Nein, weil nur das Fenster ein Fenster(object) aus Windowssicht ist.

Alles Andere wird quasi direkt auf das eine Fenster/Canvas gemalt und da im FMX eigentlich keine weiteren VCL/Windows-Komponenten vorkommen, achtet natürlich auch niemand darauf, ob die übermalt werden.

Du kannst im Resize-Event des Panel dein Notepad positionieren und im Draw-Event das neumalen auslösen.
Wenn es nur ums Darstellen ginge, dann das extere Programm in einem unsichtbaren Dummy-Fenster verstecken (Parent) und im Draw die andere Form sich auf das Panel-Canvas malen lassen.


Man könnte natürlich auch Fragen was ein natives Windows-Fenster in einem "Nichtnativen"-Windows-Fenster zu suchen hat. :angel:

Kenrai 7. Okt 2014 12:57

AW: Firemonkey SetParent
 
Zitat:

Zitat von himitsu (Beitrag 1275091)
Du kannst im Resize-Event des Panel dein Notepad positionieren und im Draw-Event das neumalen auslösen.
Wenn es nur ums Darstellen ginge, dann das extere Programm in einem unsichtbaren Dummy-Fenster verstecken (Parent) und im Draw die andere Form sich auf das Panel-Canvas malen lassen.

Eigentlich eine gute Idee, aber wenn man in dem externem Fenster z.B. ein Video abspielt, würde das dann nicht ruckeln bzw. flackern? Oder auch bei anderen grafischen Sachen die sich oft verändern.

Grüße,

-Eugeene


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz