![]() |
bsSingle BorderStyle von Form1 ohne Maximieren ?
Hey Leute ich möchte meinem Programm den BorderStyle bsSingle verpassen allerdings ohne Maximieren, also oben rechts nur minimieren und schließen. Wie mache ich das ?
|
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Den Eintrag aus BorderIcons rausnehmen
|
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Dann ist es aber ja nur grau. ich möchte es wenn möglich ganz weghaben
|
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Mit Hilfe der Api wirst du es wahrscheinlich hinkriegen.
|
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm=Class(Forms.TForm) public procedure GetBorderIconStyles(var Style, ExStyle: Cardinal); override; End; TForm2 = class(TForm) private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} { TForm } procedure TForm.GetBorderIconStyles(var Style, ExStyle: Cardinal); begin inherited; Style := Style and not (WS_MINIMIZEBOX or WS_MaximizeBOX) end; end. |
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Nein, was soll man mit der API da hinbekommen? (außer man zeichnet die Titelleiste komplett selber)
Das ist ein Standardverhalten von Windows. Wenn der Minimierenbutton vorhanden ist, dann auch der Maximimieren (wenn auch nur inaktiv). Ohne den Minimizebutton ist auch der Maximize weg. |
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
da habe ich oben doch gegen das KISS-Prinzip verstossen, besser so
Delphi-Quellcode:
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) private { Private-Deklarationen } public procedure GetBorderIconStyles(var Style, ExStyle: Cardinal); override; { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.GetBorderIconStyles(var Style, ExStyle: Cardinal); begin inherited; Style := Style and not (WS_MINIMIZEBOX or WS_MaximizeBOX) end; end. |
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Zitat:
Delphi-Quellcode:
[Fehler] Unit2.pas(13): Methode 'GetBorderIconStyles' nicht in Basisklasse gefunden
[Warnung] Unit2.pas(27): Datei nicht gefunden: 'Unit2.dfm' [Fataler Fehler] Project1.dpr(6): Verwendete Unit 'Unit2.pas' kann nicht compiliert werden |
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Premaider, was erwartest du jetzt mit deiner Frage? Selbst wenn der Tipp unter D7 funktionieren würde, das steht
Delphi-Quellcode:
. Also beides.
and not (WS_MINIMIZEBOX or WS_MaximizeBOX)
Hier das gleiche in grün:
Delphi-Quellcode:
Kannst du experimentieren.
procedure TForm1.FormCreate(Sender: TObject);
begin SetWindowLong(Handle, GWL_STYLE, GetWindowLong(Handle, GWL_STYLE) and not (WS_MINIMIZEBOX or WS_MAXIMIZEBOX)); end; Ansonsten siehe Beitrag von himitsu. |
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Delphi-Quellcode:
reicht nicht?
BorderStyle := bsDialog
|
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
@Furtbichler
dann ist es ja nicht mehr sizeable |
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Aber über die BorderIcons ist derselbe Effekt zu erreichen. Leider kann man den Maximize-Button nur zusammen mit dem Minimize-Button ausblenden, also nicht so, wie der TE es eigentlich möchte.
|
AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
Es gibt einen kleinen Trick mit Hilfsvariablen und FormResize.
BorderStyle:= bsSingle; // Damit die Grösse nicht verändert werden kann. Variablen: StartLeft, StartWidth, StartTop, StartHeight: integer; in FormActivate: StartLeft:=left; StartTop:= top; StartWidth:=width; StartHeight:=height; ausserdem für alle relevanten Inhalte doublebuffered:=true
Delphi-Quellcode:
Mag sein, dass es so etwas umständlich ist, aber so kann man minimieren und wenn man auf maximizeprocedure TForm1.FormResize(Sender: TObject); begin WITH Form1 DO BEGIN doublebuffered:=true; if windowstate=wsmaximized then begin windowstate:= wsnormal; left:=StartLeft; Width:=StartWidth; top:=StartTop; height:=StartHeight; windowstate:= wsnormal; end; if width>startwidth then begin left:=StartLeft; Width:=startwidth; end; if height>startheight then begin top:=startTop; height:=startheight; end; END; end; klickt, ändern sich das entsprechende Icon und vielleicht flackert das Programm minimal, z.B. die Position des Form-Capture. Getestet mit Delphi 7 unter Windows 8. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:37 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