"Frank Nørvig" <spam@noervig.dk> wrote in
news:3f5cb762$0$16866$edfadb0f@dread11.news.tele.dk:
> Hej Finn,
>
> Jeg tror du har misforstået mit spørgsmål. Jeg har ingen problemer
> med at create panelerne, men derimod med at gøre panelet resizeable
> for brugeren når programmet kører (runtime).
>
> Mvh Frank
>
>> hej der.......
>> i din form definere du under private flg: private p:TPanel;
>> naar du saa vil ha et panel, gør du bare flg:
>> p:=tpanel.Create(self); nemt ikk..........
>
....det er sikkert noget i stil med nedenstående du er ude efter:
en specialisering af et TPanel - det er ikke lavet færdigt, men det kan
du sikkert selv gøre - det kan kun gøre et panel større/mindre i bredden
og det verificeres ikke om brugeren forsøger at "vende" panelet ved at
trække i f.eks. venstre kant og flytte den over den højre (i det tilfælde
forsvinder panelet blot), og der er sikkert også andre faldgrupper, men
mon ikke det skulle give et skub i den rigtige retning :)
Propertien ResizeArea, angiver hvor stort område omkring kanten af
panelet, der skal være aktivt for resize.
Næste udvidelse kunne være at lave det så man kan bruge andet end
crDefault som "std" cursor for panelet, således at det brugeren
(programmøren) angiver som std. cursor, via Cursor propertien, for
panelet rent faktisk også bliver brugt....
unit Unit2;
interface
uses
ExtCtrls, Controls, Classes,
dialogs, Sysutils;
type
TResizePanel = class(TPanel) // Eventuelt TCustomPanel i stedet
private
sizing: (sdWest, sdEast, sdNorth, sdSouth);
FResizeArea: integer;
protected
procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
X, Y: Integer); override;
public
property ResizeArea: integer read FResizeArea write FResizeArea
default 10;
constructor Create(AOwner: TComponent); override;
end;
implementation
{ TResizePanel }
constructor TResizePanel.Create(AOwner: TComponent);
begin
inherited;
ResizeArea := 10;
end;
procedure TResizePanel.MouseDown(Button: TMouseButton; Shift:
TShiftState;
X, Y: Integer);
begin
inherited;
if (x < ResizeArea) then sizing := sdWest;
if (x > self.Width - ResizeArea) then sizing := sdEast;
end;
procedure TResizePanel.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
inherited;
if (x < ResizeArea) or
(x > self.Width - ResizeArea) and (self.Cursor <> crSizeWE) then
self.Cursor := crSizeWE
else
self.Cursor := crDefault;
end;
procedure TResizePanel.MouseUp(Button: TMouseButton; Shift: TShiftState;
X,
Y: Integer);
begin
inherited;
if sizing = sdWest then
begin
self.Width := self.Width - x;
self.Left := self.Left + x;
end;
if sizing = sdEast then
begin
self.Width := x;
end;
end;
end.
/Claus
--
Claus Christiansen, <mailto:NOSPAM@unipeople.dk>, leave the adr. as it is
personal: <
http://unipeople.dk/~cch>; pythia: <
http://www.pythia.dk>
===========================================================--------------
"Computers are useless. They can only give you answers" - Pablo Picasso