Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.16;
Скачать: CL | DM;

Вниз

Выезжающая боковая панель   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
3-1082642368
Paranoik
2004-04-22 17:59
2004.05.16
Картинки и базы данных


6-1080227029
Pr0t0n
2004-03-25 18:03
2004.05.16
SMS b Delphi Часть Вторая.


6-1080142505
Katya_mgkit
2004-03-24 18:35
2004.05.16
NetBios


1-1083169178
Svetka*
2004-04-28 20:19
2004.05.16
??????????


14-1083025226
Yttrium
2004-04-27 04:20
2004.05.16
IL. Нафига он нужен?