![]() |
TPanel während der Laufzeit die Größe verändern ?
Hallo Alle!
Wie kann man ein TPanel während der Laufzeit mit der Maus die Größe verändern? Gruß Heike |
Re: TPanel während der Laufzeit die Größe verändern ?
eine möglichkeit wäre so... (nur die 5 ecken, ohne cursoränderung)
Delphi-Quellcode:
werte für perform stehen da:
procedure TForm1.Panel1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var r1,r2:Trect; begin releasecapture; r1:=rect(0,0,5,5); r2:=rect(panel1.width-5,panel1.height-5,panel1.width,panel1.height); if ptInRect(r1,Point(x,y)) then Panel1.PerForm(WM_SysCommand, $F004, 0) else if ptInRect(r2,Point(x,y)) then Panel1.PerForm(WM_SysCommand, $F008, 0) else if ptInRect(rect(r1.left,r2.top,r1.right,r2.bottom),Point(x,y)) then Panel1.PerForm(WM_SysCommand, $F007, 0) else if ptInRect(rect(r2.left,r1.top,r2.right,r1.bottom),Point(x,y)) then Panel1.PerForm(WM_SysCommand, $F005, 0) end; ![]() es gab auch noch ne WindowStyleZuweisung per SetWindowLong (mit cursoränderung und weniger code), finde die aber grade nicht. HTH Frank |
Re: TPanel während der Laufzeit die Größe verändern ?
|
Re: TPanel während der Laufzeit die Größe verändern ?
Vielen Dank, an Euch Beiden.
Ich habe es hinbekommen. Gruß Heike |
Re: TPanel während der Laufzeit die Größe verändern ?
und wie hast du es gemacht?
(falls mal wieder jemand das problem hat) Gruß Frank |
Re: TPanel während der Laufzeit die Größe verändern ?
Zitat:
Gruß Heike |
Re: TPanel während der Laufzeit die Größe verändern ?
ich würde die rects im onresize des panels berechnen (r1-r4,für jede ecke) und im mousemove die rects durchprobieren und entsprechend den cursor setzen...
so in etwa (getestet):
Delphi-Quellcode:
Gruß Frank
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TEdge=(eNone,eTopLeft,eTopRight,eBottomLeft,eBottomRight); TForm1 = class(TForm) Panel1: TPanel; procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Panel1Resize(Sender: TObject); procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private-Deklarationen } r1,r2,r3,r4:TRect; edge:TEdge; public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.DFM} 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; end. |
Re: TPanel während der Laufzeit die Größe verändern ?
Wofür ist eigentlich ReleaseCapture gut. Ohne gehts zar nicht, aber warum?
|
Re: TPanel während der Laufzeit die Größe verändern ?
Also die wörtliche Übersetzung verrät es einem schon fast.
Der Cursor wird von der Anwendung gelöst, sodass du auch ein Resize über die Anwendung hinaus machen kannst. Vor allem beim Resizen eines Formulars ist das ganz wichtig! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 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