Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi bsSingle BorderStyle von Form1 ohne Maximieren ? (https://www.delphipraxis.net/167483-bssingle-borderstyle-von-form1-ohne-maximieren.html)

Premaider 1. Apr 2012 13:12

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 ?

mkinzler 1. Apr 2012 13:17

AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
 
Den Eintrag aus BorderIcons rausnehmen

Premaider 1. Apr 2012 13:20

AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
 
Dann ist es aber ja nur grau. ich möchte es wenn möglich ganz weghaben

Popov 1. Apr 2012 13:37

AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
 
Mit Hilfe der Api wirst du es wahrscheinlich hinkriegen.

Bummi 1. Apr 2012 13:44

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.

himitsu 1. Apr 2012 13:50

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.

Bummi 1. Apr 2012 14:04

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.

Premaider 1. Apr 2012 14:04

AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
 
Zitat:

Zitat von Bummi (Beitrag 1159671)
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.

Habe eine neue Unit erstellt und das ganze von dir eingefügt. Folgende Fehlermeldungen:
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

Popov 1. Apr 2012 14:42

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:
and not (WS_MINIMIZEBOX or WS_MaximizeBOX)
. Also beides.

Hier das gleiche in grün:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  SetWindowLong(Handle, GWL_STYLE,
    GetWindowLong(Handle, GWL_STYLE)
    and not (WS_MINIMIZEBOX or WS_MAXIMIZEBOX));
end;
Kannst du experimentieren.

Ansonsten siehe Beitrag von himitsu.

Furtbichler 2. Apr 2012 07:06

AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
 
Delphi-Quellcode:
BorderStyle := bsDialog
reicht nicht?

Bummi 2. Apr 2012 07:28

AW: bsSingle BorderStyle von Form1 ohne Maximieren ?
 
@Furtbichler

dann ist es ja nicht mehr sizeable

DeddyH 2. Apr 2012 07:34

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.

Delfiano 6. Okt 2020 10:24

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:

procedure 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;
Mag sein, dass es so etwas umständlich ist, aber so kann man minimieren und wenn man auf maximize
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