![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сворачивающаяся панель [XP]
serjo © (2008-09-29 22:28:00)В некоторых программах я видел сбоку такую кнопку в виде полоски, кликая по которой открывается дополнительная панель. Скажите (а лучше, если не затруднит покажите), как сделать такую фишку. Желательно код. Заранее вам благодарен.
Amoeba (2008-09-30 00:02:00) [1]http://www.torry.net/pages.php?id=161
Компонент TWhisperSplitter
{RASkov} (2008-09-29 23:53:00) [2]Попробуй такой пример:
Создай новый проект, дважды кликни по форме, тем самым добавив обработчик OnCreate.
Затем выдели всё что в окне редактора кода удали и замени его кодом ниже:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private { Private declarations }
FFrm: TForm;
procedure FormMove(var Ms: TMessage); message WM_MOVE;
procedure SetPosFrm(Frm: TForm);
procedure PnClick(Sender: TObject);
public { Public declarations }
end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var C, R: Integer;
begin
Width:=400;
Height:=250;
BorderStyle:=bsSingle;
Tag:=Integer(TPanel.Create(self));
with TPanel(Tag) do begin
Parent:=Self;
Align:=alRight;
Width:=7;
Caption:='>';
OnClick:=PnClick;
end;
FFrm:=TForm.Create(Self);
FFrm.BorderStyle:=bsNone;
FFrm.Width:=150;
for R:=1 to 7 do
for C:=1 to 4 do
with TButton.Create(FFrm) do begin
Parent:=FFrm;
BoundsRect:=Rect(25*C, 25*R, 25*C+25, 25*R+25);
end;
end;
procedure TForm1.SetPosFrm(Frm: TForm);
begin
Frm.Left:=Left+Width;
Frm.Top:=Top+GetSystemMetrics(SM_CYCAPTION);
Frm.Height:=Height-GetSystemMetrics(SM_CYCAPTION);
end;
procedure TForm1.PnClick(Sender: TObject);
begin
SetPosFrm(FFrm);
if FFrm.Visible then begin
AnimateWindow(FFrm.Handle, 200, AW_SLIDE or AW_HOR_NEGATIVE or AW_HIDE);
FFrm.Visible:=False;
TPanel(Tag).Caption:='>';
end else begin
AnimateWindow(FFrm.Handle, 200, AW_SLIDE or AW_HOR_POSITIVE);
FFrm.Visible:=True;
TPanel(Tag).Caption:='<';
end;
end;
procedure TForm1.FormMove(var Ms: TMessage);
begin
if not Assigned(FFrm) or not FFrm.Visible then Exit;
SetPosFrm(FFrm);
end;
end.
Это не готовое решение, так как тут имеются некоторые косяки и недочеты.... но думаю для старта пойдет.
<Evil> (2008-09-29 23:44:00) [3]panel1.visible := true; ?