Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.03.2014, 12:13
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию Панелька для ярлыков

Ребят есть идея но не могу её реализовать в связи с нехваткой знаний .
Нужно сделать что то похожее на TabSet для его реализации я решил использовать панельки на данном этапе моя форма выглядит так метка 1.

Так вот на метке 3 видно что панели добавляются в начало панели а нужно в конец и нужно чтоб панели растягивались по всей длине как на метки 3.

вот мои наброски
Вложения
Тип файла: rar Нижняя панель 2.rar (2.19 Мбайт, 36 просмотров)
Ответить с цитированием
  #2  
Старый 23.03.2014, 12:16
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Вот как сейчас
Изображения
Тип файла: jpg 1570281.jpg (51.4 Кбайт, 36 просмотров)
Ответить с цитированием
  #3  
Старый 23.03.2014, 12:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
1
property Align;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #4  
Старый 23.03.2014, 12:52
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

конкретней можно

Вот сам код кому неохота качать
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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  
Старый 23.03.2014, 14:16
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gudzik11
Код:
1
2
3
4
5
6
7
8
9
10
11
12
.....
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;
.....
Вот здесь, перед присвоением свойству Align значения alLeft сделай так:
Код:
1
Left := Panel1.Width;
тогда панельки будут добавляться справа, а не слева.

А у тебя что, массив Pages локальный? И ты думаешь в нём будут храниться все созданные панельки?

А вот чтобы панельки растягивались на всю родительскую панель, то здесь Align уже не поможет. Нужно самому рассчитывать размеры всех панелек и по событию TForm1.Panel1Resize заново их пересчитывать.
Ответить с цитированием
  #6  
Старый 23.03.2014, 16:58
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

спасибо left работает на счёт пересчета всех панелей
думаю нужно вести какой то учёт панелей к примеру LIstBox а при добавлении панели нужно перебрать имеющиеся и разделить всё вот тут и загвоздка

Код:
1
2
3
4
5
for i:=0 to Panel1.ControlCount-1 do
 if (Panel1.Controls[i] is TPanel) then
 begin
 
 end;
Ответить с цитированием
  #7  
Старый 24.03.2014, 02:05
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Gudzik11
спасибо left работает на счёт пересчета всех панелей
думаю нужно вести какой то учёт панелей к примеру LIstBox а при добавлении панели нужно перебрать имеющиеся и разделить всё вот тут и загвоздка

Код:
1
2
3
4
5
for i:=0 to Panel1.ControlCount-1 do
 if (Panel1.Controls[i] is TPanel) then
 begin
 
 end;
Здесь довольно просто.
Для начала делаешь массив Pages динамическим и глобальным (или ещё лучше полем формы TForm1):
Код:
1
2
3
var
  Form1: TForm1;
  Pages: array of TPanel;
Потом на событие OnResize панели Panel1 (т.е. той, на которой будут располагаться другие панели) делаешь примерно такой обработчик события:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Panel1Resize(Sender: TObject);
const
  Pad = 2;
var
  i: Integer;
begin
  for i := Low(Pages) to High(Pages) do
  begin
    Pages[i].Left := (Panel1.Width - Pad) * i div Length(Pages) + Pad;
    Pages[i].Top := Pad;
    Pages[i].Height := Panel1.Height - Pad * 2;
    Pages[i].Width := (Panel1.Width - Pad) * (i + 1) div Length(Pages) - Pages[i].Left;
  end;
end;
А обработчик кнопки добавления новой панельки будет выглядеть примерно так:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
procedure TForm1.SpeedButton3Click(Sender: TObject);
var
  pn: TPanel;
begin
  pn := TPanel.Create(Self);
  pn.Parent := Panel1;
  pn.Caption := 'Pages' + IntToStr(Length(Pages) + 1);
 
  SetLength(Pages, Length(Pages) + 1);
  Pages[High(Pages)] := pn;
  Panel1Resize(nil);
end;
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
Gudzik11 (24.03.2014)
  #8  
Старый 24.03.2014, 04:56
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Спасибо всё работает супер завтра доведу всё до нужного результата .

Скажите как лучше сделать нижнюю панель то есть при создании вкладке создавать в нижней панели дополнительные панели и скрывать их а по нажатию на pages включать нужную или лучше иметь одну нижнюю панель а по нажатию на pages подгружать данные с ini и выводить это всё в одной панели .
Хочется по минимуму нагружать ресурсы компьютера.

Скажите а как быть с удалением панели

Последний раз редактировалось M.A.D.M.A.N., 24.03.2014 в 20:53.
Ответить с цитированием
  #9  
Старый 29.03.2014, 01:01
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Подскажите пожалуйста как удалить выбранную вкладу
Вложения
Тип файла: rar Нижняя панель.rar (2.61 Мбайт, 7 просмотров)
Ответить с цитированием
  #10  
Старый 22.04.2014, 19:00
Gudzik11 Gudzik11 вне форума
Начинающий
 
Регистрация: 27.09.2011
Сообщения: 158
Репутация: 10
По умолчанию

Вот зделал почти что хотел. сейчас нужно сделать Drag-and-drop панелий чтоб можно было местами менять к примеру 5 панели с 1 и т.д .
Вариантов не каких мозг кипит.
Подскажите кто знает как можно реализовать в моей програмке Drag-and-drop?
вот проект : http://gfile.ru/a5Jbo
И по возможности глянте на ошибки .
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:07.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025