Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
1-1082987766
der
2004-04-26 17:56
2004.05.16
Parent созданный в рантайме. Как обратиться?


1-1082706710
13-Drakosha
2004-04-23 11:51
2004.05.16
Трабл с RxRichEd


6-1079985711
it
2004-03-22 23:01
2004.05.16
Отловить DialUp соединение


14-1082889813
Nikolay M.
2004-04-25 14:43
2004.05.16
Крутится в голове песТня, а названия не помню :(


14-1082625216
Roof
2004-04-22 13:13
2004.05.16
Delphi 7 подвисает при запуске проекта





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский