![]() |
Fremdes Programm in eigenem Programm steuern in Bezug auf die Größe.
Ich habe jetzt fast das ganze Forum durchsucht aber leider keinen passen Beitrag gefunden. Leider komme ich nicht auf die Lösung.
Ich kappsel ein fremdes Programm und lasse es maximiert auf meinem Eigenen anzeigen. Wenn ich jetzt aber das eigene Programm maximiere, ändert sich die Größe des fremden Programmes nicht mit. Es soll immer die Größe meines Programmes habe, wenn die fremde Anwendung maximiert ist. Ich habe einiges probiert aber nichts hat geklappt. Hier mein Code.
Delphi-Quellcode:
Danke im Voraus.
...
private { Private-Deklarationen } aWnd: hWnd; //Handle auf das Window welches man einsperren möchte ... procedure Tfrm_main.FormActivate(Sender: TObject); var AppName, AppExe : PAnsiChar; begin AppName := 'notepad'; AppExe := 'notepad.exe'; //ext. Anwendung aufrufen... ShellExecute(0, 'open', AppExe, nil, nil, SW_HIDE); // fremde Anwendung in eigene Anwendung kappseln aWnd := FindWindow(AppName, nil); while aWnd = 0 do aWnd := FindWindow(AppName, nil); //Solange warten bis Programm gestartet wurde Windows.SetParent(aWnd, Panel1.Handle); // SetWindowLong(aWnd,GWL_STYLE,GetWindowLong(aWnd,GWL_STYLE) and not WS_CAPTION); // Titelleiste ausblenden ShowWindow(aWnd, SW_MAXIMIZE); end; procedure Tfrm_main.FormResize(Sender: TObject); begin ShowWindow(aWnd,SW_MAXIMIZE); // passiert nichts SetWindowPos(aWnd, 0, 0, 0, frm_main.Width, frm_main.Height, SWP_SHOWWINDOW); // ist schon fast maximiert, aber es fehlt die untere Scrollleiste. end; Sven |
AW: Fremdes Programm in eigenem Programm steuern in Bezug auf die Größe.
Hallo,
nicht schön gelöst, aber bei mir funktioniert's (Win XP):
Delphi-Quellcode:
Das nur, bevor du gar keine Lösung findest.
procedure TForm1.FormResize(Sender: TObject);
begin ShowWindow(aWnd, SW_HIDE); ShowWindow(aWnd, SW_SHOWMAXIMIZED); // oder SW_MAXIMIZE end; Edit: Hm, das geht nur, wenn du das Hauptfenster z.B. maximierst. Eine Größenänderung mit der Maus funktioniert dann nicht mehr. Auch müsstest du verhindern, dass sich die Sub-Anwendung minimieren lässt. |
AW: Fremdes Programm in eigenem Programm steuern in Bezug auf die Größe.
Danke dir.
Wenn man den "Maximieren-Button" klickt, wird die Form auch wieder maximiert. Super. Leider aber kann ich das Hauptfenster mit Maus gar nicht mehr verändern. Woran liegt das? Kann man das vermeiden? Kann man vielleicht was mit SendMessage machen? Das Handle des Fensters hätte ich. |
AW: Fremdes Programm in eigenem Programm steuern in Bezug auf die Größe.
Jupp, das habe ich vorhin oben ergänzt.
Wenn du ein OnResized-Ereignis definierst (wie ![]()
Delphi-Quellcode:
Aber vielleicht gibt es schönere Lösungen.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, ShellAPI; type TForm1 = class(TForm) Panel1: TPanel; procedure FormActivate(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private-Deklarationen } aWnd: hWnd; //Handle auf das Window welches man einsperren möchte FResized: Boolean; FMaximized: Boolean; procedure WMSIZE(Var AMsg:TWMSize); message WM_SIZE; procedure WMEXITSIZEMOVE(Var AMsg:TMessage); message WM_EXITSIZEMOVE; procedure FormResized; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormActivate(Sender: TObject); var AppName, AppExe : PAnsiChar; begin AppName := 'notepad'; AppExe := 'notepad.exe'; //ext. Anwendung aufrufen... ShellExecute(0, 'open', AppExe, nil, nil, SW_HIDE); // fremde Anwendung in eigene Anwendung kappseln aWnd := FindWindow(AppName, nil); while aWnd = 0 do aWnd := FindWindow(AppName, nil); //Solange warten bis Programm gestartet wurde Windows.SetParent(aWnd, Panel1.Handle); // SetWindowLong(aWnd,GWL_STYLE,GetWindowLong(aWnd,GWL_STYLE) and not WS_CAPTION); // Titelleiste ausblenden ShowWindow(aWnd, SW_MAXIMIZE); end; procedure TForm1.FormCreate(Sender: TObject); begin FResized := false; FMaximized := (WindowState = wsMaximized); end; procedure TForm1.WMSIZE(var AMsg: TWMSize); begin inherited; if (AMsg.SizeType = SIZE_RESTORED) and FMaximized then begin FormResized; FMaximized := false; end; if (AMsg.SizeType=SIZE_MAXIMIZED) then begin FormResized; FMaximized := true; end; end; procedure TForm1.WMEXITSIZEMOVE(var AMsg: TMessage); begin inherited; FormResized; end; procedure TForm1.FormResized; begin ShowWindow(aWnd, SW_HIDE); ShowWindow(aWnd, SW_MAXIMIZE); end; end. |
AW: Fremdes Programm in eigenem Programm steuern in Bezug auf die Größe.
** PUSH **
Die Lösung von Matze ist ok aber nicht wirklich die Lösung. Gibt es eventuell noch eine besser? Mir würde auch reichen, wenn die Anwendung immer maximiert ist und sich so an das Hauptfenster anpasst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz