Zmiana rozmiarów panelu

0

Witam,

znalazłem prosty sposób na zwiększanie rozmiarów panelu Run Time:

http://www.delphidabbler.com/tips/93

Da się jakoś przerobić ten kod, żeby dało zmienić się rozmiar tylko w 1 kierunku, np. żeby była aktywna tylko dolna krawędź, regulująca wysokość panelu?

0

A jak to zrobić??

0

Są do tego komponenty na torry. M.in też jakiś mój(nie jestem pewien, czy najnowsza wersja)

0

Możesz podać nazwę tego panelu. Znalazłem TEzTexturePanel, ale umożliwia zmianę rozmiarów w każdym kierunku.

0

Cała sztuka w odpowiedniej obsłudze komunikatu WM_NCHITTEST tak jak chciałeś masz przykład panelu który ma aktywną tylko dolną krawędź. Zasada działania jest prosta gdy kursor myszy znajdzie się nad dolną krawędzią zwracamy HTBOTTOM (czyli dolna krawędź) a wiec powoduje to zmianę kursora i umożliwia zmianę rozmiaru panela natomiast w pozostałych przypadkach zwraca HTCLIENT (czyli obszar klienta) a więc wtedy "normalne" zachowanie czyli po prostu nie można zmieniać rozmiaru.
Właściwie gdybyś dobrze popatrzył to pod podanym przez Ciebie linkiem można było znaleźć kod panelu nawet z możliwością poruszania nim wystarczyło popatrzyć jak to tam jest zrobione i trochę przerobić kod.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TMyPanel = class(TPanel)
  private
  protected
    procedure WMNCHitTest(var Msg: TWMNCHitTest); message WM_NCHITTEST;
  published
  end;

  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    fMyPanel: TMyPanel;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TMyPanel.WMNCHitTest(var Msg: TWMNCHitTest);
var
  p: TPoint;
begin
  inherited;
  p:= ScreenToClient(Point(Msg.Xpos, Msg.Ypos));
  if (p.y >= Height - BevelWidth) then
     Msg.Result:= HTBOTTOM
  else
    Msg.Result:= HTCLIENT;
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  fMyPanel:= TMyPanel.Create(Self);
  fMyPanel.Parent := Self;
  fMyPanel.Top := 20;
  fMyPanel.Left := 20;
  fMyPanel.Caption:= fMyPanel.ClassName;
end;

end.
0

dzieki wielkie działa

0

Mam jeszcze pytanie, jak można się szybko nauczyć najpotrzebniejszych funkcji WinAPI. Skąd wiedziałeś, że chodzi o TWMNCHitTest??

1 użytkowników online, w tym zalogowanych: 0, gości: 1