![]() |
TPanel sizeable machen?
Hallo Alle,
kann man ein TPanel sizeable machen? |
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: |
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; |
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; |
AW: TPanel sizeable machen?
Ein anderer Ansatz:
Delphi-Quellcode:
Du Kannst beide Methoden unabhängig voneinander benutzen. Viele Grüße
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; |
AW: TPanel sizeable machen?
Vielen Dank an Euch. Wieder was dazu gelehrnt.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:45 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