Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Titelleiste eines Fensters ausblenden (https://www.delphipraxis.net/10203-titelleiste-eines-fensters-ausblenden.html)

Niko 13. Okt 2003 17:03


Titelleiste eines Fensters ausblenden
 
Ich erzeuge ein Fenster über
Delphi-Quellcode:
CreateWindowEx(0, ClassName, AppName, 0, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0, HInstance, nil);
Trotzdem hat es eine Titelleiste (die ich nicht brauchen kann), weshalb ich versucht habe sie über
Delphi-Quellcode:
SetWindowLong(HMainWnd, GWL_STYLE, GetWindowLong(HMainWnd, GWL_STYLE) and not WS_CAPTION);
zu entfernen. Das Ergebnis sind allerdings eigenartige Darstellungsfehler.

Mit VCL funktioniert das über
Delphi-Quellcode:
SetWindowLong(MyForm.Handle, GWL_STYLE, GetWindowLong(MyForm.Handle, GWL_STYLE) and not WS_CAPTION);
MyForm.ClientHeight := MyForm.Height;
MyForm.Refresh;
Weiß jemand, was ich anders machen muss?

himitsu 13. Okt 2003 17:39

Re: Titelleiste eines Fensters ausblenden
 
Schon mal mit "MyForm.BorderStyle := bsNone;" versucht.

Niko 13. Okt 2003 18:58

Re: Titelleiste eines Fensters ausblenden
 
Zitat:

Zitat von himitsu
Schon mal mit "MyForm.BorderStyle := bsNone;" versucht.

Ja, genau das was dabei herauskommt möchte ich erreichen, aber eben nicht bei einer TForm, sondern bei einem über die API-Funktion CreateWindowEx erstellten Fenster.

Chewie 13. Okt 2003 19:01

Re: Titelleiste eines Fensters ausblenden
 
Was passiert, wenn du den Style gleich beim Erzeugen des Fensters angibst?

Niko 13. Okt 2003 19:19

Re: Titelleiste eines Fensters ausblenden
 
Es gibt eben leider keinen Style für keine Titelleiste, sondern eben nur WS_CAPTION für eine Titelleiste - und das gebe ich ja nicht an.
Übrigens hat das Fenster auch eine Titelleiste wenn ich für Style nicht 0 sondern zum Beispiel WS_VISIBLE setze.
Ach ja, ich arbeite unter Windows 98.

himitsu 13. Okt 2003 19:37

Re: Titelleiste eines Fensters ausblenden
 
Chewie könnte recht haben.

Der Style kann'ste glaub ich hier ändern:
CreateWindowEx(0, ClassName, AppName, 0, CW_USEDEFAULT...

Die Werte dürften unter TCreateParams stehen.
Da ich aber zur Zeit keine Hilfe installiert hab', kann ich auch nichts näheres dazu sagen.
lass aber gerade nach anderen Styles suchen...

Niko 13. Okt 2003 19:51

Re: Titelleiste eines Fensters ausblenden
 
Ich habe gerade herausbekommen, dass alle TForm-Fenster mit dem Stil WS_POPUP definiert werden. Also hab ich das auch probiert und siehe da: Mit diesem Stil wird nur eine Titelleiste erzeugt, wenn man auch WS_CAPTION angibt.
Damit wäre mein Problem eigentlich gelöst, aber mich würde trotzdem noch interessieren wieso das mit WS_POPUP geht und sonst nicht (bzw. was der Stil WS_POPUP überhaupt bewirkt).

graphicar 29. Jul 2004 13:54

Re: Titelleiste eines Fensters ausblenden
 
Tag Niko,

ich habe mich in letzter Zeit mit einem ganz ähnlichem Problem beschäftigt.
Mir ging es nicht darum, dem Fenster die Leiste oben zu klauen, eher wohl das
Fenster zu sperren. Du wolltest den Parameter WS_CAPTION raushauen und
ich wollte WS_DISABLED reinbasteln. Zwei Ideen mit ein und demselben Lösungsweg.

Ich hatte auch genau die gleichen Darstellungsfehler auf meiner Form und
merkte das dein Problem auch bei mir auftauchte. Ich hatte darauf beschlossen
Google.de aufzusuchen und dort brauchbares zu finden. Und tadaa:


Des Fehlers Lösung war einfach eine falsche
Verwendung der Delphi-Schlüsselwörter.



Grund für die Darstellungsfehler:

Der Styles-Eigenschaft eines Fenster wird Ramsch übergeben, nach dem
Ausführen dieses Ramsch-Styles wird das Fenster falsch dargestellt.



Lösung für die Übergabe:

Es wird ein anderes Schlüsselwort benötigt, um aus Ramsch eine klare,
brauchbare Anweisung zu machen, die Windows für seine Fenster braucht.



Lösungsbeispiel:

Delphi-Quellcode:
[...]

var
  Fenster_stil : Cardinal;
 
[...]

// Speichern des Standardstils für Wiederherstellung des Fensters.
Fenster_stil := GetWindowLong ( FormMain.hWnd, GWL_STYLE );

// Dem Fenster wird eine neue Eigenschaft hinzugefügt.
SetWindowLong ( FormMain.hWnd, GWL_STYLE, Fenster_stil or WS_DISABLED );

// Das Fenster wird auf den alten Fenstertil zurückgesetzt.
SetWindowLong ( FormMain.hWnd, GWL_STYLE, Fenster_stil );

[...]

So, Meister, ich hoffe das hat dein Problem gedanklich gelöst.
Dieser Thread ist mal wieder ein glänzendes Beispiel für die
Ausarbeitung und Vollendung einer Idee durch verschiedenen User.
Geniales Forum. :)

Cii jaa©$me
graphicar

Luckie 29. Jul 2004 14:00

Re: Titelleiste eines Fensters ausblenden
 
Äh. Das muss auch direkt gehen, schon beim erzeugen:
Delphi-Quellcode:
CreateWindowEx(0, ClassName, AppName, WS_VISIBLE or WS_POPUP,
    Integer(CW_USEDEFAULT), Integer(CW_USEDEFAULT), WINDOWWIDTH, WINDOWHEIGHT,
      0, 0, hInstance, nil);
Allerdings hat es jetzt auch keinen Rand.

Niko 29. Jul 2004 15:58

Re: Titelleiste eines Fensters ausblenden
 
@graphicar:
Danke für die Antwort, aber ich seh' den Unterschied zwischen deinem Code und dem in meinem ersten Beitrag nicht. :gruebel:

@Luckie:
So funktioniert's, wenn ich aber WS_POPUP weggelassen habe ging es nicht mehr und ich weiß nicht, warum.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 Uhr.
Seite 1 von 2  1 2      

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