Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel (https://www.delphipraxis.net/87124-onbeforeresize-bzw-onafterresize-bezogn-auf-ein-tpanel.html)

hhluemmel 23. Feb 2007 16:03


OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Zur Zeit entwickle ich eine Komponente, die vom TCustomPanel abgeleitet
wird. Auf diesem Panel werden verschiedene weitere Panels dargestellt.

Wie kann ich für ein TCustomPanel abfragen, wann mit dem Resize begonnen bzw.
wann es abgeschlossen ist?

Ich möchte gern im Ereignis "OnBeforeResize" ein BeginUpdate und im "OnAfterResize"
ein EndUpdate realisieren!

Ähnlich wie dieses hier, nur dieses bezieht sich ja auf ein DelphiForm!

Procedure OnBeforeResize (var msg: TMessage); message WM_ENTERSIZEMOVE;
Procedure OnAfterResize (var msg: TMessage); message WM_EXITSIZEMOVE;

// implementation

Procedure TForm1.OnBeforeResize(var msg: TMessage);
begin
//..
end;


Procedure TForm1.OnAfterResize(var msg: TMessage);
begin
//..
end;

Danke

DGL-luke 23. Feb 2007 16:24

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Kannst du genau so machen. Einfach in deine Deklaration die zwei Message-Handler rein und implementieren.

hhluemmel 24. Feb 2007 09:24

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Das hatte ich schon versucht, nur die werden leider nicht aufgerufen!

DGL-luke 24. Feb 2007 10:05

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Hmm... müssten aber... zeig mal deinen Code.

Ein Problem könnte ja noch sein, dass dein Panel solche Nachrichten einfach nciht kriegt, weil es ja keinen SizeGrip hat.

Da müsstest du SetBounds, SetWidth, SetHeight etc. überschreiben und da deinen Eventhandler aufrufen.

EDIT: bzw. da würden dann andere Messages kommen... die weiß ich aber grad nicht auswendig.

SirThornberry 24. Feb 2007 11:04

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
es genügt nur SetBounds zu überschreiben da SetWidth etc. auch letztendlich SetBounds aufruft.

hhluemmel 24. Feb 2007 11:18

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Hier mal der eine Code-Auszug ... wo bzw. wie müsste SetBounds überschreiben?

Danke


Delphi-Quellcode:
  TTestPanel = class(TPanel)
  private
    { Private-Deklarationen }
    Procedure OnBeforeResize (var msg: TMessage); message WM_ENTERSIZEMOVE;
    Procedure OnAfterResize (var msg: TMessage); message WM_EXITSIZEMOVE;
  protected
    { Protected-Deklarationen }
  public
    { Public-Deklarationen }
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
  published
    { Published-Deklarationen }
  end;


{ TTestPanel }

constructor TTestPanel.Create(AOwner: TComponent);
begin
  inherited Create (AOwner);
end;

destructor TTestPanel.Destroy;
begin

  inherited;
end;

procedure TTestPanel.OnAfterResize(var msg: TMessage);
begin
 // hier die Anweisung nach dem Resize
end;

procedure TTestPanel.OnBeforeResize(var msg: TMessage);
begin
 // hier die Anweisung vor dem Resize
end;

DGL-luke 24. Feb 2007 15:35

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
BeforeResize wirst du nicht bekommen. bzw. so müsste man es machen:

Delphi-Quellcode:
//in den public-Abschnitt deiner Deklaration
procedure SetBounds(AWidth, AHeight: Integer); override; //hoffe das AWidth, AHeight passt

//implementieren:

procedure TTestPanel.SetBounds(AWidth, AHeight: Integer); override;
var Allowed: Boolean;
begin
Allowed := true;
DoBeforeResize(AWidth, AHeight, Allowed); //das gehört als virtuelle Methode rein, wenn du wi9llst, dass andere es anständig ableiten können
if Assigned(OnBeforeResize) then
  OnBeforeResize(Self, AWidth, AHeight, Allowed); //Allowed jeweils als var-Parameter

if Allowed then
  begin
    inherited;
    DoAfterResize;
    if Assigned(OnAfterResize) then
      OnAfterResize(self);
  end;
end;
Die "Do"-Methoden und die "On"-Events musst du natürlich auch noch entsprechend deklarieren/implementieren.

EDIT: Ich habs im Moment nicht so mit Typen...

hhluemmel 25. Feb 2007 09:50

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Danke erstmal für die Hilfe ..

SetBounds(ALeft, ATop, AWidth, AHeight: Integer); override;

Der Aufruf sieht so aus, nur zur Info ...

DGL-luke 25. Feb 2007 10:04

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Richtig. Die Events musst du dann natürlich auch entsprechend deklarieren.

hhluemmel 25. Feb 2007 12:21

Re: OnBeforeResize bzw. OnAfterResize bezogn auf ein TPanel
 
Besten Dank für die Hilfe, klappt alles bestens!


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:44 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