|
Вопрос # 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]:
Спасибо, буду разбираться.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|