![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Ребят есть идея но не могу её реализовать в связи с нехваткой знаний .
Нужно сделать что то похожее на TabSet для его реализации я решил использовать панельки на данном этапе моя форма выглядит так метка 1. Так вот на метке 3 видно что панели добавляются в начало панели а нужно в конец и нужно чтоб панели растягивались по всей длине как на метки 3. вот мои наброски |
|
#2
|
|||
|
|||
|
Вот как сейчас
|
|
#3
|
||||
|
||||
|
Код:
property Align; |
|
#4
|
|||
|
|||
|
конкретней можно
Вот сам код кому неохота качать Код:
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ExtCtrls, Vcl.StdCtrls, Vcl.Buttons;
type
TForm1 = class(TForm)
Panel3: TPanel;
ListBox1: TListBox;
Panel4: TPanel;
Panel1: TPanel;
Panel2: TPanel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
procedure FormCreate(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure PClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
i,j,l: Byte ;
w,h: Integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Left:=10;
Form1.Width:= Screen.WorkAreaWidth - 20 ;
Form1.top:= Screen.WorkAreaHeight - Form1.Height;
end;
procedure TForm1.PClick(Sender: TObject);
begin
//ShowMessage('Нажата'+ (sender as TPanel).Caption);
for i:=0 to Panel1.ControlCount-1 do
if (Panel1.Controls[i] is TPanel) then // and (Panel4.Controls[i] <> Sender) and (Pos('Pages',TPanel(Panel4.Controls[i]).Caption) = 1)
begin
TPanel(Panel1.Controls[i]).Color:=clSilver;
(sender as TPanel).Color:= clLime;
end;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
Pages: array [0..20] of TPanel;
begin
Pages[i]:= TPanel.Create(Self);
with Pages[i] do
begin
Parent:=Panel1;
Align:=alLeft;
AlignWithMargins:=True;
//Left:=3;
// top:=3;
// Width:= Panel1.Width - 6;
// Height:= Panel1.Height - 6;
Color:=clSilver; // цвет панели
Name:='Pages'+inttostr(i); //
Caption:='Pages'+inttostr(i);
Font.Size:=9; // размер шрифта
Font.Style:=[fsbold]; // жирный шрифт
OnClick:=PClick; // клик для панели
ParentBackground:=False; // для окраски панели
ListBox1.Items.Add(Pages[i].Name);
end;
For j := 0 to ListBox1.Items.Count-1 do
begin
//TPanel(ListBox1.Items[j].s ListBox1[j]).SetBounds(l, 0, w, h);
Inc(l, w);
end;
Inc(i);
end;
end.Последний раз редактировалось M.A.D.M.A.N., 23.03.2014 в 13:04. |
|
#5
|
||||
|
||||
|
Цитата:
Код:
Left := Panel1.Width; А у тебя что, массив Pages локальный? И ты думаешь в нём будут храниться все созданные панельки?А вот чтобы панельки растягивались на всю родительскую панель, то здесь Align уже не поможет. Нужно самому рассчитывать размеры всех панелек и по событию TForm1.Panel1Resize заново их пересчитывать. |
|
#6
|
|||
|
|||
|
спасибо left работает на счёт пересчета всех панелей
думаю нужно вести какой то учёт панелей к примеру LIstBox а при добавлении панели нужно перебрать имеющиеся и разделить всё вот тут и загвоздка Код:
for i:=0 to Panel1.ControlCount-1 do if (Panel1.Controls[i] is TPanel) then begin end; |