![]() |
Panel bewegen und groesse auf Form ändern ?
Hallo,
ich möchte ein Image oder einen Panel auf meine verschielbar machen und seine Abmessung (Width und height) direkt mit der Maus ändern Wie kann sowas schaffen ? |
Re: Panel bewegen und groesse auf Form ändern ?
Hallo,
vielleicht geht es mit den Events onMouseEnter, dann auf Mousebutton prüfen (onMouseDown) und Flag setzen für onMouseMove. So irgendwie würde ich es versuchen. |
Re: Panel bewegen und groesse auf Form ändern ?
Delphi-Quellcode:
mit dem vergrößern ist das nicht ganz so einfach, dazu gibt es aber z.b. TSizeCtrl von
if (Button=mbLeft) and (sender is TImage) then
begin ReleaseCapture; (sender as TImage).Parent.Perform(WM_NCLBUTTONDOWN,HTcaption,0); end; ![]() ![]() ein anderer Ansatz wäre z.b. so (hier nur für die Ecken, aber die kanten sollten auch kein Problem sein...):
Delphi-Quellcode:
HTH Frank
type
TEdge=(eNone,eTopLeft,eTopRight,eBottomLeft,eBottomRight); TForm1 = class(TForm) ... private { Private-Deklarationen } r1,r2,r3,r4:TRect; edge:TEdge; ... procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if ptinRect(r1,Point(x,y)) then edge:=eTopLeft else if PtInRect(r3,Point(x,y)) then edge:=eBottomRight else if ptinRect(r2,Point(x,y)) then edge:=eTopRight else if PtInRect(r4,Point(x,y)) then edge:=eBottomLeft else edge:=eNone; case edge of eNone:Panel1.Cursor:=crDefault; eTopLeft,eBottomRight:Panel1.Cursor:=crSizeNWSE; eTopRight,eBottomLeft: Panel1.Cursor:=crSizeNESW; end; end; procedure TForm1.Panel1Resize(Sender: TObject); begin r1:=rect(0,0,5,5); r3:=rect(panel1.width-5,panel1.height-5,panel1.width,panel1.height); r2:=rect(r1.left,r3.top,r1.right,r3.bottom); r4:=rect(r3.left,r1.top,r3.right,r1.bottom); end; procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if edge<>eNone then begin releaseCapture; case edge of eTopLeft:Panel1.PerForm(WM_SysCommand, $F004, 0); eTopRight:Panel1.PerForm(WM_SysCommand, $F007, 0); eBottomLeft:Panel1.PerForm(WM_SysCommand, $F005, 0); eBottomRight:Panel1.PerForm(WM_SysCommand, $F008, 0); end; end; end; |
Re: Panel bewegen und groesse auf Form ändern ?
Hi
Bei einem TPanel müsste auch folgendes funktionieren:
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 inherited CreateParams(Params); Params.Style := Params.Style or WS_SIZEBOX; end; procedure TPanel.WMNCHitTest(var Message: TWMNCHitTest); begin inherited; if Message.Result = htClient then Message.Result := htCaption; end; |
Re: Panel bewegen und groesse auf Form ändern ?
Liste der Anhänge anzeigen (Anzahl: 1)
Danke Frank
mit dem Vorschlag kann ich den Panel an seine 4 Ecken seine Groesse ändern Ich wollte das Prinzip mit dem ein Shape leider hat ein Shape nicht alle Events ! Es fehlt die Event Onresize by Shape |
Re: Panel bewegen und groesse auf Form ändern ?
Ich hab hier diese Function gefunden und dort jene Procedur,
nur leider verhalten die sich nicht so wie ich das gerne möchte. Programmieren besteht nicht daraus sich im Internet fertigen Quellcode zu suchen und daraus mit Hilfe anderer ein halbwegs laufendes Programm zum laufen zu bringen. :wink: |
Re: Panel bewegen und groesse auf Form ändern ?
Zitat:
Delphi-Quellcode:
wie immer ungetested, nur ums Prinzip zu veranschaulichen.
TMyShape=class(TShape)
private fOnResize:TNotifyEvent; public procedure Setbounds(ALeft, ATop, AWidth, AHeight: Integer); override; published property onResize:TNotifyEvent read fOnResize write fOnResize; ... procedure TMyShape.Setbounds(ALeft, ATop, AWidth, AHeight: Integer); begin inherited; if assigned(fOnResize) then fOnResize(self); end; Gruß Frank |
Re: Panel bewegen und groesse auf Form ändern ?
Da TShape von TControl abgeleited wurde, ist das onResize Ereignis schon vorhanden, man muss es nur als published deklarieren.
Delphi-Quellcode:
type
TMyShape= class(TShape) published property onResize; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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