Autor Beitrag
goose
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Do 25.08.05 13:44 
Hallo,

kleines Problem : Ich hab eine DLL in der wird eine Form erstellt und auch angezeigt.
Problem ist nun der TaskBarEintrag. Wie kann ich den denn verbergen ?

Ich hab folgendes gefunden und ausprobiert, ging aber nicht :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
// das is die DLL 
uses
  Unit1 in 'Unit1.pas' {Form1};
.
.
.

// und hier wird die Form erstellt ( das wird von dem Programm automatisch 
// aufgerufen beim starten
procedure ModuleInit; stdcall;
begin
  Form1:=TForm1.Create(Application);
end;

procedure ModuleDeinit; stdcall;
begin
  Form1.Release;
end;


in der Unit1 hab ich das hier versucht :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
begin  
   ShowWindow( Application.Handle, SW_HIDE );  
   SetWindowLong( Application.Handle, GWL_EXSTYLE,
         GetWindowLong(Application.Handle, GWL_EXSTYLE) or                              
         WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);  
        ShowWindow( Application.Handle, SW_SHOW );
end;


und auch das hier :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.FormCreate(Sender: TObject);
begin  
   ShowWindow( Form1.Handle, SW_HIDE );  
   SetWindowLong( Form1.Handle, GWL_EXSTYLE,
         GetWindowLong(Form1.Handle, GWL_EXSTYLE) or                              
         WS_EX_TOOLWINDOW and not WS_EX_APPWINDOW);  
        ShowWindow( Form1.Handle, SW_SHOW );
end;


Ging aber beides nicht.
Wie kann ich denn den blöden Eintrag in der Taskleiste wegbekommen ?

Dank Euch
Matthias

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
Sillium
Hält's aus hier
Beiträge: 8



BeitragVerfasst: So 11.09.05 14:47 
Hi,

ich hoffe ich kann noch helfen!!

Probiere mal en folgenden code aus!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
    Params.ExStyle := WS_EX_TOOLWINDOW
end;


Also bei mir hat das funktioniert!!

Viel Spaß!!

Moderiert von user profile iconraziel: Code- durch Delphi-Tags ersetzt.
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: So 11.09.05 17:42 
Hallöchen,

ich danke Dir,

aber ich hab das jetzt schon anders gelöst.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
  handle:=GetActiveWindow;
  Application.handle:=handle;
  Application.CreateForm(Tf_main, f_main);
  Application.CreateForm(Tf_settings, f_settings);
  Application.CreateForm(Tf_routing, f_routing);
  Application.handle:=0;
  f_main.LoadSettings;


Dank Dir aber trotzdem.
Vielleicht mach ich es ja dann beim nächsten Projekt so.

Danke
Matthias
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: So 11.09.05 20:37 
Lässt Du mich mal in den Code des Programmes sehen der die Form aus der DLL aufruft?

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: So 11.09.05 21:01 
Ja das is gar nicht so schwerwie ich es mir gemacht habe:

die dll erstellst Du ganz normal mit einer Form drin.
darfst die >Form natürlich nur erstellen lassen und nicht anzeigen :-)

also :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
library xyz;

uses
  .
  .
  unit1 in 'unit1.pas' {Form1}


var
  handle : HWND;
begin
  handle:=GetActiveWindow;
  Application.handle:=handle;
  Application.CreateForm(TForm1, Form1);
  Application.handle:=0;
end.


Hab das jetzt ein bischen abgekürzt und hoffe das ist alles richtig so,
aber das Prinzip sollte klar sein oder ?

Matthias
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Mo 12.09.05 15:46 
Hi,

dieses vorgehen ist allerdings gefährlich. Es kann nämlich passieren, daß die DLL in einer falschen Anwendung läuft.
Du solltest zum einen im Hauptprogramm nicht das Application Handle auf 0 setzen (was passiert, wenn ein anderes Programm das auch schon macht?) und zum anderen solltest du dann das Handle lieber an die DLL übergeben.

Gruß
Ken

_________________
Eine Klasse beschreibt die Struktur und das Verhalten einer Menge gleichartiger Objekte.
goose Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 93



BeitragVerfasst: Mo 12.09.05 17:44 
Hallo,

naja aber so gehts eben das die DllForm keinen taskbarEintrag hat.
Aber wenn Du sagst so sollte man das nicht machen, dann
sag doch mal wie man es machen muss ?

Matthias