Delphi-PRAXiS
Seite 1 von 2  1 2      

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 Panel Professionel Resizen mit pfeilen etc... (https://www.delphipraxis.net/111982-panel-professionel-resizen-mit-pfeilen-etc.html)

hedie 12. Apr 2008 20:08


Panel Professionel Resizen mit pfeilen etc...
 
Hallo

Ich möchte, das wenn man an die Ecken eines Panels kommt mit der maus
das die Normalen Pfeile angezeigt werden um etwas zu Resizen.

Ich hab es geschafft, das ich mit diesem Code die untere kannte eines Panels erkennen kann.

Delphi-Quellcode:
if (cursorpos.y-Form1.Top-(GroupBox1.Top+Panel3.Top+Panel5.Top+27+Panel5.Height)) = 1 then Panel5.Cursor:=crSizeNS;
Aber ich bin mir sicher das das noch besser und einfacher geht....

Hat da jemand einen Tipp für mich oder eine Idee?

Und weiss vieleicht auch noch jemand wie ich das Panel am schluss Resizen kann.
Also mit height und width ist klar aber das es beim ziehen der maus resized wird meine ich....


Danke schonmal

Fussball-Robby 12. Apr 2008 20:19

Re: Panel Professionel Resizen mit pfeilen etc...
 
Du prüfst, wo sich die Maus befindet und hast im OnMoueMove folgendes:
Delphi-Quellcode:
  if ssLeft in Shift then
  begin
    ReleaseCapture;
    Panel1.Perform(WM_SYSCOMMAND, XX, 0);
  end;
Wobei du XX ersetzen musst, je nach dem, wo sich die Maus befindet:
Delphi-Quellcode:
$F001: linke Seite
$F002: rechte Seite
$F003: oben
$F004: Ecke links oben
$F005: Ecke rechts oben
$F006: unten
$F007: Ecke links unten
$F008: Ecke rechts unten
Am besten deklarierst du diese Werte vorher als Konstanten.


Mfg

bitsetter 12. Apr 2008 21:05

Re: Panel Professionel Resizen mit pfeilen etc...
 
Hi,

oder du überschreibst CreateParams vom Panel und fügst den Style WS_SIZEBOX hinzu:
Delphi-Quellcode:
type
  TPanel= class(ExtCtrls.TPanel)
  public
    procedure CreateParams(var Params: TCreateParams); override;
  end;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TPanel.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);

  Params.Style := Params.Style or WS_SIZEBOX;
end;

end.
Edit: Es wird dann wohl besser aussehen, wenn du auch noch die Eigenschaft BevelOuter auf bvNone setzt.

hedie 12. Apr 2008 21:18

Re: Panel Professionel Resizen mit pfeilen etc...
 
Wooooowww is ja meeega geil....

Danke Viel Viel mal euch beiden

das hat ausgezeichnet geklappt :D

hedie 12. Apr 2008 22:51

Re: Panel Professionel Resizen mit pfeilen etc...
 
was mache ich, wenn ich nun einzelne Panels dennoch
NICHT resizen möchte?

Fussball-Robby 12. Apr 2008 22:57

Re: Panel Professionel Resizen mit pfeilen etc...
 
Du leitest vorher noch eine andere Klasse von TPanel ab, in der du die CreateParams nicht überschreibst:
Delphi-Quellcode:
type
  TMyPanel= class(ExtCtrls.TPanel);
  TPanel= class(ExtCtrls.TPanel)
  public
    procedure CreateParams(var Params: TCreateParams); override;
  end//[..]
Mfg

Die Muhkuh 12. Apr 2008 23:03

Re: Panel Professionel Resizen mit pfeilen etc...
 
Hi,

dann würde ich aber TMyPanel ableiten und überschreiben und das andere Panel so lassen, wie es ist.

xy124 13. Apr 2008 09:43

Re: Panel Professionel Resizen mit pfeilen etc...
 
is ja geil!!!!
geht das auch mit anderen komponenten?

und wie verschiebt man komponenten - geht das auch so einfach?

hedie 13. Apr 2008 09:45

Re: Panel Professionel Resizen mit pfeilen etc...
 
Jep

verschieben kannst du eine Komponente hiermit im MouseDown Ereigniss

Delphi-Quellcode:
// Mausereignisse abfangen
  ReleaseCapture;
  // mit TWinCotrol verschieben, $F012 verschiebt den Button
  TWinControl(Sender).Perform(WM_SYSCOMMAND, $F012, 0);

Fussball-Robby 13. Apr 2008 09:46

Re: Panel Professionel Resizen mit pfeilen etc...
 
Verschieben:
Delphi-Quellcode:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  ReleaseCapture;
  (Sender as TWinControl).Perform(WM_SYSCOMMAND, $F012, 0);
end;
kan aber auch ins OnMouseDown


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:35 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