AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firemonkey SetParent

Ein Thema von Kenrai · begonnen am 7. Okt 2014 · letzter Beitrag vom 7. Okt 2014
Antwort Antwort
Kenrai

Registriert seit: 4. Jun 2014
11 Beiträge
 
#1

Firemonkey SetParent

  Alt 7. Okt 2014, 12:01
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
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.

Geändert von Kenrai ( 7. Okt 2014 um 12:06 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Firemonkey SetParent

  Alt 7. Okt 2014, 12:10
1.) Nein, weil nur das Fenster ein Fenster(object) aus Windowssicht ist.
2.) Schicke dem fremdem Fenster eine Redrawmessage

  Res := SentMessage( wnd2, WM_SETREDRAW, True,0);
Markus Kinzler
  Mit Zitat antworten Zitat
Kenrai

Registriert seit: 4. Jun 2014
11 Beiträge
 
#3

AW: Firemonkey SetParent

  Alt 7. Okt 2014, 12:21
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:

RedrawWindow(wnd2, nil, 0, RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);

Grüße,

-Eugeene
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Firemonkey SetParent

  Alt 7. Okt 2014, 12:24
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Okt 2014 um 12:27 Uhr)
  Mit Zitat antworten Zitat
Kenrai

Registriert seit: 4. Jun 2014
11 Beiträge
 
#5

AW: Firemonkey SetParent

  Alt 7. Okt 2014, 12:57
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:54 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