Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
ВнизВыезжающая боковая панель Найти похожие ветки
← →
TechnoDreamer © (2004-05-02 14:07) [0]Подскажите, есть ли какой-нибуть компонент делающий подобное.
Как например сделано в ICQ4? Или что-нибуть почитать по этому поводу, а даже не знаю по какой фразе это искать!
← →
Rouse_ © (2004-05-02 16:26) [1]Вот такое чтоли?
procedure TForm1.Button1Click(Sender: TObject);
var
F: TForm;
M: TMemo;
B: TButton;
I: Integer;
begin
F := TForm.Create(Self);
F.Left := Left - 100;
F.Width := 100;
F.Height := Height;
F.Top := Top;
F.BorderStyle := bsToolWindow;
M := TMemo.Create(F);
M.Parent := F;
M.Align := alTop;
B := TButton.Create(F);
B.Parent := F;
B.OnClick := Button2Click;
B.Caption := "Close";
F.Show;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
TForm(GetParentForm(TButton(Sender))).Close;
end;
← →
DVM © (2004-05-02 16:32) [2]
> Rouse_ © (02.05.04 16:26) [1]
может он про AppBar?
← →
Rouse_ © (2004-05-02 17:59) [3]> [2] DVM © (02.05.04 16:32)
Не знаю :)
Я асей не пользуюсь, у меня другой клиент :)
← →
Polevi © (2004-05-02 22:57) [4]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/functions/shappbarmess age.asp
← →
TechnoDreamer © (2004-05-02 23:29) [5]> Rouse_
Не, что то типа этого, но совсем не так.
>Polevi
Ссылка, не рабочая.
В общем смысл такой, есть окно. В правой части окна, расположена панель, по левой стороне панельки (в середине) кнопочка. Нажимаешь эту кнопочку, панель уезжает в сторону освобождая место (не обязательно с анимацией), соответственно кнопочка теперь висит на узкой полоске в на краю окна, нажимешь еще раз, она назад выезжает. Такое в многих программах реализовано.
Может кто подскажет?
← →
Rouse_ © (2004-05-02 23:55) [6]Эх - где наша не пропадала :)
Ну вот делать мне сегодня нечего, лови: :)unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
Panel: TPanel;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Panel) then
begin
Panel := TPanel.Create(Self);
with Form1 do
begin
Left := Left - 100;
Width := Width + 100;
end;
Panel.Left := 96;
Panel.Top := 0;
Panel.Height := Height - GetSystemMetrics(SM_CYCAPTION) - 10;
Panel.Parent := Self;
end
else
begin
FreeAndNil(Panel);
Width := Width - 100;
Left := Left + 100;
end;
end;
end.
Теперь оно? :)
← →
TechnoDreamer © (2004-05-03 01:02) [7]В общем, вот так. Подразумевается что кнопка тонкая и находится в на правой грани формы.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Controls, StdCtrls, {Variants,} Graphics, Forms,
Dialogs, ExtCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
Panel: TPanel;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if not Assigned(Panel) then
begin
Panel := TPanel.Create(Self);
Panel.Left := Form1.ClientWidth-100;
Panel.Top := 0;
Panel.Height := Height - GetSystemMetrics(SM_CYCAPTION) - 10;
Panel.Width := 100;
Panel.Parent := Self;
Button1.Left:=Button1.Left-100;
end
else
begin
FreeAndNil(Panel);
Button1.Left:=Button1.Left+100;
end;
end;
end.
Только в этом примере, все компоненты в панели в реалтайме придется создавать, что не сильно удобно.
← →
Rouse_ © (2004-05-03 01:15) [8]А ты создавай в Design и Visible используй, ну и пару процедур для отрисовки и анимации...
← →
Andy BitOff © (2004-05-03 04:56) [9]Брось на форму Панель и Таймер. На событие таймра поставь эту процедурку. Интервал таймера на 1.
procedure TForm1.Timer1Timer(Sender: TObject);
var
y,a:integer;
po,Cpo:TPoint;
con:TControl;
begin
GetCursorPos(po);
y:=po.y;
po:=ScreenToClient(po);
Cpo:=Form1.ClientOrigin;
con:=Form1.ControlAtPos(po,True,True);
if (con<>nil) and (y>Cpo.y) and (y<Cpo.y+Form1.ClientHeight) then begin
if (con.Name="Panel1") or (con.Parent.Name="Panel1") then begin
if Panel1.Top<0 then
if Panel1.Top+3<0 then Panel1.Top:= Panel1.Top+3 //показать
else Panel1.Top:=0;
end;
end
else begin
a:=7-Panel1.Height;
if Panel1.Top>a then
if Panel1.Top-3>a then Panel1.Top:= Panel1.Top-3 //убрать
else Panel1.Top:=a;
end;
end;
← →
Andy BitOff © (2004-05-03 05:25) [10]А вот тоже самое, только с права
procedure TForm1.Timer1Timer(Sender: TObject);
var
y,a:integer;
po,Cpo:TPoint;
con:TControl;
begin
GetCursorPos(po);
y:=po.y;
po:=ScreenToClient(po);
Cpo:=Form1.ClientOrigin;
con:=Form1.ControlAtPos(po,True,True);
if (con<>nil) and (y>Cpo.y) and (y<Cpo.y+Form1.ClientHeight) then begin
if (con.Name="Panel1") or (con.Parent.Name="Panel1") then begin
if Panel1.Left>Form1.ClientWidth-Panel1.Width then
if Panel1.Left+Panel1.Width-3>Form1.ClientWidth then Panel1.Left:= Panel1.Left-3 //показать
else Panel1.Left:=Form1.ClientWidth-Panel1.Width;
end;
end
else begin
a:=Form1.ClientWidth-7;
if Panel1.Left<a then
if Panel1.Left+3<a then Panel1.Left:= Panel1.Left+3 //убрать
else Panel1.Left:=a;
end;
end;
← →
Polevi © (2004-05-03 09:19) [11]> [5] TechnoDreamer © (02.05.04 23:29)
ссылка рабочая, если пошевелить мозгами (пробел лишний удалить)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.033 c