![]() |
Form in Programm
Hi,
ich habe ein Programm das durch module beliebig erweiterbar sein soll, diese module greifen nicht auf das eigentliche Programm zu sie könnten sogar als eingenständige Anwendungen laufen. Diese Module sollen im Programm auf einer Form angezeigt werden. Nun meine Frage wie binde ich diese Module am besten/einfachsten in mein Programm ein, einfache exe und dann über setparent oder über DLLs, und dann wie ? Nach einigen ausprobieren hab ich mich dafür entschieden die module als exe zu speichern und bei dem aufruf das handle der form zu übergeben, im module selber weise ich dann der form eigenschaft parentwindow das übergebene handle zu leider wird das module nicht auf der form angezeigt. |
Re: Form in Programm
Hast du an das anschliessend ShowWindow gedacht... etwa so:
Delphi-Quellcode:
Dabei ist AnwH das Handle deines MainForms der Anwendung, die du einbinden willst, und FormH das Handle des Form in deiner Hauptanwendung, in der du die 2. Anwendung anzeigen willst.
while Windows.SetParent(AnwH, FormH)=0 do begin end ;
ShowWindow(AnwH, SW_SHOWMAXIMIZED); |
Re: Form in Programm
juhu, die form wird angezeigt, DANKE !!!
|
Re: Form in Programm
Da habe ich mich wohl zufrüh gefreut :(
Zwar wird die Form nun im Programm angezeigt aber ich kann die Form nicht mehr mit
Delphi-Quellcode:
Vor der Taskleiste verstecken, wie kann jetzt die Form/Anwendung vor der Taskleiste verstecken?
ShowWindow(GetWindow(Handle,GW_OWNER),SW_HIDE);
|
Re: Form in Programm
Zitat:
|
Re: Form in Programm
Da habe ich was für euch (gefunden)...
stammt aus diesem Thread: ![]()
Delphi-Quellcode:
Aufruf im DLL-Form - FormCreate
unit TaskbarIntf ;
// Code: DelphiPraxis "SCP" interface uses ComObj,windows; const CLSID_TaskbarList: TGUID = '{56FDF344-FD6D-11d0-958A-006097C9A090}'; type ITaskbarList = interface ['{56FDF342-FD6D-11d0-958A-006097C9A090}'] function HrInit: HResult; stdcall; function AddTab(hwnd: Cardinal): HResult; stdcall; function DeleteTab(hwnd: Cardinal): HResult; stdcall; function ActivateTab(hwnd: Cardinal): HResult; stdcall; function SetActiveAlt(hwnd: Cardinal): HResult; stdcall; end; function DeleteTabEntry(Wnd: hWnd) : boolean; implementation function DeleteTabEntry(Wnd: hWnd) : boolean; const IID_ITaskBarList: TGUID ='{56FDF342-FD6D-11D0-958A-006097C9A090}'; var FTaskbarList: ITaskBarList; begin result := (Wnd <> 0); if result then try FTaskbarList := CreateComObject(CLSID_TaskbarList) as ITaskbarList; FTaskbarList.HrInit; result := (FTaskbarList.DeleteTab(Wnd) = S_OK); except On EOleSysError do result := false else raise; end; end; end.
Delphi-Quellcode:
...und schon ist der Taskbareintrag des DLL-Forms weg ...
TaskbarIntf.DeleteTabEntry(findwindow('TApplication', nil));
|
Re: Form in Programm
Danke für deinen Beitrag, Jens. Heisst das, dass die Form in einer DLL vorliegen muss... Das ist leider nicht der Fall... Ich starte einfach eine andere EXE aus meiner Anwendung heraus, und stelle diese innerhalb eines Panels meiner Anwendung dar. Das klappt soweit.
Mit deinem Code krieg ich die Fremdandwendung jedoch nicht aus der Taskleiste weg. ODer was mach ich falsch. |
Re: Form in Programm
Kann ich nicht wirklich sagen.
Ich habe damit die Taskbareinträge meiner DLL-Forms versteckt. Das ging soweit super. Wenn es mit dem Application Handle nicht funktioniert, versuch doch mal DeleteTabEntry mit dem Form Handle (der zu versteckenden Form) aufzurufen ... |
Re: Form in Programm
Klappt leider auch nicht, hatte ich bereits probiert.
Naja, so schlimm ists jetzt auch wieder nicht für mich, wenn die Anwendung in der Taskbar sichtbar ist. |
Re: Form in Programm
Hi, ich habe es geschafft, folgender code setzt die form auf das (durch paramstr übergebene panel.handle) Panel und versteckt die anwendung vor der taskleiste
Delphi-Quellcode:
Danke an Alle! :-D
procedure TForm1.FormShow(Sender: TObject);
begin if paramstr(1)<>'' then begin ShowWindow(GetWindow(Handle,GW_OWNER),SW_HIDE); while Windows.SetParent(self.Handle, strtoint(paramstr(1)))=0 do begin end ; ShowWindow(self.Handle, SW_SHOWMAXIMIZED); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 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