Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DLL-Form und Taskbar (https://www.delphipraxis.net/95084-dll-form-und-taskbar.html)

Mattze 30. Jun 2007 14:53


DLL-Form und Taskbar
 
Hallo,

wenn ich eine Form aus einer DLL lade, so erscheint die "normalerweise" (da Fenster) in der Taskbar von Windows. Nun gibt es dagegen (natürlich) ein Mittel:
Delphi-Quellcode:
SetWindowLong(self.Handle, GWL_EXSTYLE, GetWindowLong(self.Handle, GWL_EXSTYLE) or WS_EX_TOOLWINDOW ) ;
Das Problem ist aber, dass ich dann bei einer ansonsten "normalen" Form einen schmalen transparenten Teil zwischen Titelzeile und Toolbar (Kein Menübar!?) bekomme. Das gefällt mir nicht.
Kann man den Streifen auch noch irgendwie beseitigen?

Gruß
Matthias

bitsetter 1. Jul 2007 00:06

Re: DLL-Form und Taskbar
 
Hi,

Delphi-Quellcode:
  protected
    procedure CreateParams(var Params:TCreateParams); override;
...

procedure TForm1.CreateParams(var Params:TCreateParams);
begin
  inherited CreateParams(Params);
  Params.ExStyle := Params.ExStyle or WS_EX_TOOLWINDOW;
end;
So kannst du auch den Style setzen und der Streifen war bei mir weg.

Mattze 1. Jul 2007 07:39

Re: DLL-Form und Taskbar
 
Hallo,

vielen, vielen Dank. Genau das war's. Da hätte ich ja noch lange suchen können.

Natürlich gibt es jetzt noch eine "Anschlussfrage". (Eigentlich traue ich mich nicht richtig, weil ich selber noch nicht genug gesucht habe!)

Die Caption vom Toolwindow ist ja schmaler als die normale. Wie kriegt man die auf Normalbreite?
(Ich glaube, ich habe da mal etwas gelesen oder sogar selber gemacht, aber ich komm' einfach nicht mehr drauf! Weißt Du das zufällig aus dem Stehgreif?)

Gruß und noch mal Danke
Mattze

SirThornberry 1. Jul 2007 08:53

Re: DLL-Form und Taskbar
 
Lass das Form einfach wie es ist, es hat bereits den Style das es nicht in der Taskleiste erscheint. Jedoch gibt es noch das Application-Object welches den Taskbareintrag "verzappft" und dort musst du ansetzen.

Könntest du bitte die Delphiversion im Profil angeben, ansonsten kann es durchaus passieren das die Lösung bei dir nicht funktioniert weil nicht alle Delphiversionen das gleich händeln.

Da wie bereits werwähnt das Fenster in der Taskleiste das Application-Window ist kannst du zumindest unter D7 es wie folgt ausblenden:
Delphi-Quellcode:
ShowWindow(Application.Handle, SW_HIDE);

Mattze 1. Jul 2007 09:34

Re: DLL-Form und Taskbar
 
Hallo,

danke für die schnelle Antwort.
Ich habe zwar D7pro, aber dafür kein Application-Objekt.
Die Form wird aus einer DLL heraus geladen. An sich kein Problem, aber ein Application und selbst eine "Ownerform" kann man da offenbar nicht setzen.

Inzwischen habe ich gesucht und nichts gefunden. Wie man die Höhe der Titelleiste bekommt - getsystemmetrics(SM_CYSize) - ist klar. Aber, wie man sie für eine Form und nur für diese setzt?
Das scheint doch nicht möglich zu sein.
Die einzige Variante, die ich bis jetzt gefunden habe: Keine Titelleiste und alles als Panel am oberen Rand der Form selber zeichnen. Aber das ist ein unsinniger Aufwand. Dann lasse ich es lieber so.

Gruß
Mattze

SirThornberry 1. Jul 2007 10:02

Re: DLL-Form und Taskbar
 
wenn du ein TForm hast bzw. davon abgeleitet hast, hast du auch ein Applicaiton-Object. Application ist eine globale Instanz von TApplication welche beim einbinden von forms instanziert wird.

Mattze 1. Jul 2007 10:17

Re: DLL-Form und Taskbar
 
Hallo,

nicht ganz!
Ich erstelle eine Form in irgendeiner Unit innerhalb einer DLL, "create" die in der DLL und zeige sie zur Laufzeit nur im Hauptprogramm an (Das create der Form liegt in einer DLL-Export-Prozedur).
Natürlich ist das Hauptprogramm eine Application, aber für die Form in der DLL existiert erst mal keine Application. Das ist ja wohl gerade der Witz und macht die DLL unabhängig von der Application.
Wenn ich die Form aus der DLL in der Application anzeigen lasse, kann ich aber die Application oder die "Rahmenform" als "aowner: TComponent" im create der DLL-Form nicht übergeben. Das gibt nach der Rückkehr aus dieser DLL-Form eine Schutzverletzung.
Ich bilde mir ein, hier im Forum doch eine Möglichkeit dafür gelesen zu haben, aber ich kann es nicht wiederfinden. Momentan geht es jedenfalls nur mit nil als owner.

Gruß
Mattze

SirThornberry 1. Jul 2007 10:21

Re: DLL-Form und Taskbar
 
das siehst du falsch. Sobald in der DLL die Unit "Forms" in irgendeiner Unterunit eingebunden wird (also sobald die unit Forms einkompiliert wird) so wird eine globale Instanz von TApplication angelegt

Mattze 1. Jul 2007 11:37

Re: DLL-Form und Taskbar
 
Hallo,

glaube ich nicht. Z. Bsp. kennt er die Klasse TApplication in der DLL gar nicht. Jedenfalls kann man sie da nicht benutzen.
Ich habe KEINE Application in der DLL. Sage mir, wie ich in der DLL auf Application zugreifen kann, wenn die DLL das gar nicht kennt. Dann glaube ich Dir sogar.

Jedenfalls will ich darüber gar nicht diskutieren. Jedenfalls geht die Lösung der "Urfrage" leider nicht über Application. Jedenfalls habe ich es bisher nicht hinbekommen.

Gruß
Mattze

SirThornberry 1. Jul 2007 11:42

Re: DLL-Form und Taskbar
 
dann binde die unit "forms" doch auch an der Stelle ein wo du das ansprechen willst. ansonsten kannst du es nur an der Stelle ansprechen wo du die Unit Forms in den uses hast.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:15 Uhr.
Seite 1 von 2  1 2      

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