| 
| 
 | Вопрос # 2 127/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!В Winamp 5.0 есть выдвижная панель "Настройки". Как можно сделать такую в Delphi?
 
|  |   Вопрос задал: YPCom (статус: Посетитель)Вопрос отправлен: 26 ноября 2008, 14:11
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 16; последнее сообщение — 27 ноября 2008, 10:25; участников в обсуждении: 3. 
|   | Вадим К (статус: Академик), 26 ноября 2008, 14:24 [#1]:Там просто увеличивается размер окна. То есть что то в стиле Height := 200; Галочка "подтверждения прочтения" - вселенское зло. |  
|   | YPCom (статус: Посетитель), 26 ноября 2008, 14:33 [#2]:А если нужно открыть вправо? |  
|   | Вадим К (статус: Академик), 26 ноября 2008, 14:43 [#3]:width := 300? Конечно, можно сделать все через таймер и будет плавно открываться
 надо только убрать у формы скролы и компоненты, которые не влазят, будут просто скрываться.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | YPCom (статус: Посетитель), 26 ноября 2008, 14:49 [#4]:Нужно создавать 2 формы и делать одну невидимой? |  
|   | Вадим К (статус: Академик), 26 ноября 2008, 14:51 [#5]:зачем? можно и одной обойтись Галочка "подтверждения прочтения" - вселенское зло. |  
|   | YPCom (статус: Посетитель), 26 ноября 2008, 14:57 [#6]:А примерчик можно? |  
|   | YPCom (статус: Посетитель), 26 ноября 2008, 16:47 [#7]:Ясно, значит либо сами не знаем, либо секретами делиться не хотим. |  
|   | Вадим К (статус: Академик), 26 ноября 2008, 17:02 [#8]:просто на работе нет Делфи, а так слёту писать - могу не сделать "красиво". Галочка "подтверждения прочтения" - вселенское зло. |  
|   | CaDDaM (статус: Посетитель), 26 ноября 2008, 21:25 [#9]:конечно, данный пример не претендует на красоту да и простой слишком, но зато есть простор для фантазии)) : 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 ClientWidth := 230;
 Edit1.Visible := false;
 Edit1.Width := 50;
 Edit1.Left := 230;
 Button1.Left := 152
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 if Button1.Tag = 0 then
 begin
 Form1.ClientWidth := 300;
 Edit1.Visible := true;
 Button1.Tag := 1;
 end
 else
 begin
 Edit1.Visible := false;
 Form1.ClientWidth := 230;
 Button1.Tag := 0;
 end;
 end;
 
 надеюсь поможет
 |  
|   | Вадим К (статус: Академик), 27 ноября 2008, 01:40 [#10]:Обещал простой пример, сделал  На форму надо положить компонент таймер и кнопку, поближе к правому краю. Всё остальное сделат код сам.
 Код юнита привожу полностью, смотрим внимательно.
 
 unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    _max:integer;
    _min:integer;
    step:integer;
    direct:integer; // 1 развернуть, -1 свернуть.
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  Timer1.Enabled := true;
  Button1.Enabled := false;
  Button1.Caption := 'В процессе';
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  _min := width;           //Минимальный размер формы - текущий размер
  _max := _min + 300;  //Максимальный - на 300 пикселей быстро.
  step := 10;  //шаг изменения размера, меньше - плавнее
  Timer1.Enabled := false;
  Timer1.Interval := 10; //частота изменения размера. больше - медленее будет выежать.
  direct := 1;
  Button1.Enabled := true;
  Button1.Caption := 'Развернуть';
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
  var n:integer;
begin
  n := step * direct + width;
  if n >= _max then begin
     n := _max;
     Timer1.Enabled := false;
     direct := -direct;
     Button1.Enabled := true;
     Button1.Caption := 'Свернуть';
  end;
  if n <= _min then begin
     n := _min;
     Timer1.Enabled := false;
     direct := -direct;
     Button1.Enabled := true;
     Button1.Caption := 'Развернуть';
  end;
  Width := n;
end;
 
end.Это сделает "плавный выезд право", как отрегулировать скорость - коментарии в  коде. Код можно конечно причесать, но писался с тем подходом, что бы было понятно.В винампа конечно там две части как бы разного размера, и как бы граница есть. Но всё то рисуется - банальный обман зрения. Хотя никто не мешает сделать вторую форму выезжающей.
 Разница в размерах делается с помощью "регионов".
 Сами компоненты можно разместить на этой части формы. а потом уменьшить форму до нужных размеров.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | YPCom (статус: Посетитель), 27 ноября 2008, 07:53 [#11]:Но здесь изменяется вся форма, вместе с заголовком, а нужно сделать только часть ее, т.е. создать эффект выезжающей панели вправо от формы |  
|   | Вадим К (статус: Академик), 27 ноября 2008, 09:45 [#12]:Я написал, юзаем регионы! А сделать панель, которая выезжает за пределы своей формы - нельзя. 
 То есть, для начала, надо сделать форму, которая чуть больше, чем нужное для окна. А потом подрезаем.
 Или просто не в курсе, что такое регионы?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | YPCom (статус: Посетитель), 27 ноября 2008, 09:51 [#13]:К сожалению не знаю. Опыт работы с Delphi да и вообще программирования - месяц. Вот и ищу помощи на форумах. |  
|   | YPCom (статус: Посетитель), 27 ноября 2008, 09:57 [#14]:Слышал, что можно часть окна сделать невидимым и отображать анимацию панели в этой части. Только как это сделать? |  
|   | Вадим К (статус: Академик), 27 ноября 2008, 10:15 [#15]:Чувствую, что надо в профиле вводить новый пункт - "мой опыт программирования". Вот прямо на сайте есть статья
 Создание непрямоугольных форм в Delphi
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | YPCom (статус: Посетитель), 27 ноября 2008, 10:25 [#16]:Спасибо, буду разбираться. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |