Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   TPanel sizeable machen? (https://www.delphipraxis.net/157591-tpanel-sizeable-machen.html)

smart 17. Jan 2011 18:17

TPanel sizeable machen?
 
Hallo Alle,

kann man ein TPanel sizeable machen?

haentschman 17. Jan 2011 18:22

AW: TPanel sizeable machen?
 
Hallo...
meinst du so richtig mit verändertem Cursor auf den Ecken / Kanten, wie ein Fenster ?
Prinzipiell sollte so etwas machbar sein. Allerdings wirst du alles Händisch programmieren dürfen.
:hi:

Björn Ole 17. Jan 2011 18:47

AW: TPanel sizeable machen?
 
Sehr rudimentär, auf jeden Fall noch ausbaufähig:
Delphi-Quellcode:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  panel: TPanel;
  point: TPoint;
begin
  panel := Sender as TPanel;
  point := panel.ScreenToClient(Mouse.CursorPos);
  panel.Tag := Integer((point.X > panel.Width - 10) or (point.Y > panel.Height - 10));
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  panel: TPanel;
  point: TPoint;
begin
  panel := Sender as TPanel;
  if Boolean(panel.Tag) then
  begin
    point := panel.ScreenToClient(Mouse.CursorPos);
    panel.Width := point.X;
    panel.Height := point.Y;
  end;
end;

procedure TForm1.Panel1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  panel: TPanel;
begin
  panel := Sender as TPanel;
  panel.Tag := Integer(false);
end;

Bummi 17. Jan 2011 19:26

AW: TPanel sizeable machen?
 
grade mal aus einer Komponente von mir herauskopiert
Delphi-Quellcode:

Procedure TSQLCreator2.MoveControl(ControlHandle:Integer);
begin
  releasecapture;
  sendmessage(ControlHandle, WM_NCLBUTTONDOWN, 2, 0);
end;



Procedure TSQLCreator2.SizeControl(ControlHandle:Integer);
begin
  releasecapture;
  sendmessage(ControlHandle, WM_syscommand, SC_size+6,-1);
end;

Procedure TSQLCreator2.SizeControlW(ControlHandle:Integer);
begin
  releasecapture;
  sendmessage(ControlHandle, WM_syscommand, SC_size+2,-1);
end;

Procedure TSQLCreator2.SizeControlB(ControlHandle:Integer);
begin
  releasecapture;
  sendmessage(ControlHandle, WM_syscommand, SC_size+8,-1);
end;

EDIT und noch ein Beispieleinsatz
Delphi-Quellcode:
procedure TSQLCreator2.TBLVorMouseDown(Sender: TObject;Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
    if y < TPanel(Sender).Height -10 then
       begin
       SizeControlW(TPanel(Sender).Handle);
       //RepaintLink;
       end
    else if (y > TPanel(Sender).Height -4) and (x > TPanel(Sender).Width -4) then
       begin
       SizeControlB(TSqlBox2(Sender).Handle);
      // RepaintLink;
       end
    else
       begin
       SizeControl(TSqlBox2(Sender).Handle);
     //  RepaintLink;
       end;
end;

Fussball-Robby 17. Jan 2011 19:44

AW: TPanel sizeable machen?
 
Ein anderer Ansatz:
Delphi-Quellcode:
type
  TPanel = class(ExtCtrls.TPanel)
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

{....}

procedure TPanel.CreateParams(var Params: TCreateParams);
begin
  //Damit wird dein Panel sizeable
  inherited CreateParams(Params);
  Params.Style := Params.Style or WS_SIZEBOX;
end;

procedure TPanel.WMNCHitTest(var Message: TWMNCHitTest);
begin
  //Damit kann man es zusaätzlich verschieben
  inherited;
  if Message.Result = htClient then
    Message.Result := htCaption;
end;
Du Kannst beide Methoden unabhängig voneinander benutzen. Viele Grüße

smart 17. Jan 2011 20:57

AW: TPanel sizeable machen?
 
Vielen Dank an Euch. Wieder was dazu gelehrnt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:02 Uhr.

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