Zmiana rozmiarów panelu

Odpowiedz Nowy wątek
2011-09-04 16:44
marek100
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?

edytowany 1x, ostatnio: madmike, 2016-12-13 18:26
DA SIĘ. Temat można zamknąć, bo odpowiedź na pytanie udzielona. - payl 2011-09-04 17:55
payl, ty się chyba nie wysypiasz i odreagowujesz na forum - krwq 2011-09-05 20:13
Taaaa... :D . Albo raczej: Nie lubię działu newbie i tych co tutaj piszą (mimo że to było w dziale Delphi jak odpisywałem). Albo raczej: Nie lubię głupich pytań (Da się?! Nie było wcześniej słowa 'jakoś' :-] ). Krwq, nie martw się, ja zawsze nie wyspany. - payl 2011-09-05 20:32

Pozostało 580 znaków

2011-09-05 07:14
marek100
0

A jak to zrobić??

Pozostało 580 znaków

2011-09-05 13:26
0

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

Pozostało 580 znaków

2011-09-05 14:09
marek100
0

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

Pozostało 580 znaków

2011-09-05 15:07
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.

Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.
edytowany 1x, ostatnio: kAzek, 2011-09-05 15:09

Pozostało 580 znaków

2011-09-05 15:18
marek100
0

dzieki wielkie działa

Pozostało 580 znaków

2011-09-06 09:07
marek100
0

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

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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