Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Form in Programm (https://www.delphipraxis.net/52295-form-programm.html)

arbu man 26. Aug 2005 21:19


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.

Jelly 26. Aug 2005 23:13

Re: Form in Programm
 
Hast du an das anschliessend ShowWindow gedacht... etwa so:
Delphi-Quellcode:
while Windows.SetParent(AnwH, FormH)=0 do begin end ;
ShowWindow(AnwH, SW_SHOWMAXIMIZED);
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.

arbu man 26. Aug 2005 23:28

Re: Form in Programm
 
juhu, die form wird angezeigt, DANKE !!!

arbu man 27. Aug 2005 18:42

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:
ShowWindow(GetWindow(Handle,GW_OWNER),SW_HIDE);
Vor der Taskleiste verstecken, wie kann jetzt die Form/Anwendung vor der Taskleiste verstecken?

Jelly 28. Aug 2005 20:10

Re: Form in Programm
 
Zitat:

Zitat von arbu man
Vor der Taskleiste verstecken, wie kann jetzt die Form/Anwendung vor der Taskleiste verstecken?

Das würd mich auch brennend interessieren, hab nämlich genau dasselbe Problem :?

jensw_2000 29. Aug 2005 00:05

Re: Form in Programm
 
Da habe ich was für euch (gefunden)...

stammt aus diesem Thread:

http://www.delphipraxis.net/internal...deletetabentry

Delphi-Quellcode:
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.
Aufruf im DLL-Form - FormCreate

Delphi-Quellcode:
  TaskbarIntf.DeleteTabEntry(findwindow('TApplication', nil));
...und schon ist der Taskbareintrag des DLL-Forms weg ...

Jelly 29. Aug 2005 07:25

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.

jensw_2000 29. Aug 2005 07:39

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 ...

Jelly 29. Aug 2005 08:21

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.

arbu man 31. Aug 2005 14:05

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:
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;
Danke an Alle! :-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:46 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