Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.68/60: Рейтинг темы: голосов - 60, средняя оценка - 4.68
alexandr017
2 / 2 / 2
Регистрация: 09.12.2011
Сообщений: 58
1

Динамическое создание вкладок в PageControl

22.12.2012, 23:17. Просмотров 11094. Ответов 17
Метки нет (Все метки)

Я пишу html-редактор..использовал конпонент PageControl..на котором 2 вкладки (визуальный режим и редактирование кода)..тоесь на первой вкладке был компонент WebBrowser, а на второй SynEdit....Мне хотелось бы сделать чтобы одновременно можно было работать с несколькими файлами..тоесть при нажатии кнопки "открыть" рядом открывался новый файл при этом не закрывая сущеструющий..(то есть такая же система как допустим в фотошопе)...Проблема заключается в том что при открытии файла нужно как-то динамически создавать вкладку, на которой нужно одновременно отображать и "режим редактирования кода" и "визуадьный режим"

То есть получается примерно такая ситуация: На самой форме есть компонент PageControl, который отвечает за количество одновременно открытых файлов...при этом на кажной вкладке этого компонента есть ещё один компонент PageControl, на которым 2 вкладки. Одна для визуального редактирования, вторая для редактирования кода....

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


Delphi
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
procedure TForm1.N3Click(Sender: TObject);
var
  NewTab: TTabSheet;
  NewSynEdit: TSynEdit;
begin
if OpenDialog1.Execute then begin
 
  // создаем новый TabSheet
  NewTab := TTabSheet.Create(PageControl1);
  with NewTab do
  begin
    PageControl := PageControl1;
    Caption := 'Закладка ' + IntToStr(PageControl1.PageCount);
  end;
  // создаем новый SynEdit
  NewSynEdit := TSynEdit.Create(NewTab);
  with NewSynEdit do
  begin
  Highlighter:=SynHTMLSyn1;
    Parent := NewTab;
    Align := alClient;
    Clear;
  end;
  PageControl1.ActivePageIndex := PageControl1.PageCount - 1;
    (PageControl1.ActivePage.Components[0] as TSynEdit).Lines.LoadFromFile(OpenDialog1.FileName);
end;
end;
Возможно это можно сделать как-то проще без всяких PageControl...если кто знает..подскажите)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2012, 23:17
Ответы с готовыми решениями:

PageControl в Delphi (динамическое создание вкладок)
Уважаемые, разверните и пните в нужную сторону... Никак не могу придумать каким...

Динамическое создание вкладок PageControl и их сохранение
Доброго времени суток, форумцы! Сейчас написана программа по работе с...

Открытие вкладок PageControl
У меня есть PageControl с созданными вкладками. При выборе из списка TreeView...

Добавление вкладок на PageControl
Здравствуйте! Мне необходимо добавить вкладку на PageControl, и с эти впринципе...

Pagecontrol количество вкладок
У меня такая проблема, мне необходимо что бы программа посчитала сколько...

17
FIL
Модератор
3419 / 2555 / 726
Регистрация: 19.09.2012
Сообщений: 7,923
22.12.2012, 23:53 2
С PageControl'ами:
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  NPageControl: TPageControl;
  NTab: TTabSheet;
  NSynEdit: TSynEdit;
  i: integer;
begin
  if OpenDialog1.Execute then
  begin
  // создаем новый TabSheet
    NTab := TTabSheet.Create(PageControl1);
    with NTab do
    begin
      PageControl := PageControl1;
      Caption := 'Закладка ' + IntToStr(PageControl1.PageCount);
    end;
  NPageControl := TPageControl.Create(NTab);
  NPageControl.Parent := NTab;
  NPageControl.Align := alClient;
  for i := 1 to 2 do
  begin
    NTab := TTabSheet.Create(NPageControl);
    with NTab do
    begin
      PageControl := NPageControl;
      Caption := 'Закладка ' + IntToStr(NPageControl.PageCount);
    end;
  end;
  // создаем новый WebBrowser NPageControl.Pages[0]
// ...
  // создаем новый SynEdit на NPageControl.Pages[1]
// ...
end;
end;
другой вариант - MDI приложения.
1
alexandr017
2 / 2 / 2
Регистрация: 09.12.2011
Сообщений: 58
23.12.2012, 01:37  [ТС] 3
спасибо за код..вот мой...и у меня примерно так же..осталось только теперь загрузить вебБраузер и синЭдин

Delphi
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
procedure TForm1.N2212121Click(Sender: TObject);
var
  NewMemo:TMemo;
  NewTab: TTabSheet;
  NewTab2: TTabSheet;
  NewTab3: TTabSheet;
  NewPageControl: TPageControl;
  NewPageControl2: TPageControl;
begin
  // создаем новый TabSheet
  NewTab := TTabSheet.Create(PageControl1);
  with NewTab do
  begin
    PageControl := PageControl1;
    Caption := 'Закладка ' + IntToStr(PageControl1.PageCount);
  end;
  // создаем новый PageControl
  NewPageControl := TPageControl.Create(NewTab);
  with NewPageControl do
  begin
    TabPosition:=tpleft;
    Parent := NewTab;
    Align := alClient;
    NewTab2 := TTabSheet.Create(NewPageControl);
     with NewTab2 do
  begin
    PageControl := NewPageControl;
    Caption := 'код' ;
    ////
    with NewPageControl do
    begin
    //Parent := NewTab2;
    NewMemo := TMemo.Create(NewTab2);
    Align := alClient;
    end;
  end;
 
     NewTab3 := TTabSheet.Create(NewPageControl);
     with NewTab3 do
  begin
    PageControl := NewPageControl;
    Caption := 'виз' ;
  end;
Добавлено через 1 час 11 минут
взяв ваш код за основу у меня получилась вот такая уже вполне рабочая штуковина:

тут глабальные переменные:
Delphi
1
2
3
4
5
6
7
var
  Form1: TForm1;
   NPageControl: TPageControl;
  NTab: TTabSheet;
  NRichEdit: TRichEdit;
  i: integer;
  NWebBrobser: TWebBrowser;
здесь код кнопки:
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
  begin
  // создаем новый TabSheet
    NTab := TTabSheet.Create(PageControl1);
    with NTab do
    begin
      PageControl := PageControl1;
      Caption := ExtractFileName(OpenDialog1.FileName);
    end;
  NPageControl := TPageControl.Create(NTab);
  NPageControl.Parent := NTab;
  NPageControl.Align := alClient;
  for i := 1 to 2 do
  begin
    NTab := TTabSheet.Create(NPageControl);
    with NTab do
    begin
      PageControl := NPageControl;
 
    end;
    NPageControl.TabPosition:=tpleft;
  end;
     NPageControl.Pages[0].Caption:='код';
    NPageControl.Pages[1].Caption:='виз';
  // создаем новый WebBrowser NPageControl.Pages[0]
// ...
      NRichEdit := TRichEdit.Create(NPageControl.Pages[0]);
      NRichEdit.Parent:= NPageControl.Pages[0];
      NRichEdit.Align:= alClient;
      NRichEdit.Lines.LoadFromFile(OpenDialog1.FileName);
 
 
  // создаем новый SynEdit на NPageControl.Pages[1]
 
// ...
      NWebBrobser := TWebBrowser.Create(NPageControl.Pages[1]);
     // NWebBrobser.Parent:= NPageControl.Pages[1];
      NPageControl.Pages[1].InsertControl(NWebBrobser);
      NWebBrobser.Align:= alClient;
      NWebBrobser.Navigate(OpenDialog1.FileName);
 
end;
end;
После всего этого возник очень большой вопрос.."Как обращаться к определённому динамически созданному обьекту"
Например этот код: "NRichEdit.Lines.Add('wqqqqqqqqqqqqqqqqq');" всегда добавляет строку только в последнесозданный RichEdit...то есть если у меня открыта 3 файла, то дабовление всегда будет идти в 3-ий, даже если я поставлю курсор в 1-ый или 2-ой...следовательно редактироваться будет только последний файл...нужно как-то программно узнать к какому обьекту обращается пользователь и начать работать с этим обьектам...Раньше никогда не сталкивался с подобным, так как всегда работал со статичестисозданными компонентами..Если кто чё знает напишите плиз
0
FIL
Модератор
3419 / 2555 / 726
Регистрация: 19.09.2012
Сообщений: 7,923
23.12.2012, 12:47 4
Переменные
Delphi
1
2
3
4
  NPageControl: TPageControl;
  NTab: TTabSheet;
  NRichEdit: TRichEdit;
  NWebBrobser: TWebBrowser;
нет смысла делать глобальными. Они нужны только там, где создаются компоненты, для их (компонентов) "настройки".

Компоненты создаются без Намя, поэтому его надо задавать при создании компонента. И вдальнейшем обращаться к компоненту по имени. Имя лучше задавать с индексом (Page1, Page2), по нему можно будет найти нужный компонент.
1
FIL
Модератор
3419 / 2555 / 726
Регистрация: 19.09.2012
Сообщений: 7,923
23.12.2012, 14:01 5
Вот вариант без использования Имен компонентов, но он мне не очень нравится.
Вечером попробую другой (если время будет).

Здесь Баттон2 загружает текст в РичЕдит активной закладки.
1
Вложения
Тип файла: rar PageControls.rar (181.8 Кб, 132 просмотров)
alexandr017
2 / 2 / 2
Регистрация: 09.12.2011
Сообщений: 58
23.12.2012, 14:04  [ТС] 6
буду пробывать..хотя желательно небольшой примерчик...так как ещё раз скажу с динамически созданными компонентами никогда не сталкивался...и за эту информацию тоже спасибо)

посмотрю этот архив...и буду надеятся что у вас время вечером свободное будет:-)
ещёрвз спасибо)
0
FIL
Модератор
3419 / 2555 / 726
Регистрация: 19.09.2012
Сообщений: 7,923
23.12.2012, 22:59 7
Сделал...
Вобщем идея следующая:
Каждому создаваемому компоненту задается имя с индексом вкладки на которой он создается.
Далее эти индексы позволят добраться до нужных компонентов.
Для индексации вкладок использовал Tag PageControl'а, т.к. PageCount не подходит - при удалении вкладок будут проблемы.
Остальное в проекте.
1
Вложения
Тип файла: rar PageControls.rar (182.6 Кб, 148 просмотров)
alexandr017
2 / 2 / 2
Регистрация: 09.12.2011
Сообщений: 58
24.12.2012, 22:26  [ТС] 8
огромное спасибо..это вроде как раз то что мне нужно...только теперь придётся полпроекта "переписывать"..но думую справлюсь..если возникнут какие-нибудь вопросы надеюсь опять меня выручите)

Добавлено через 14 часов 17 минут
есть небольшой вопрос...в качестве редактора кода буду использовать компонент SynEdit...а вот какой компонент взять для визуального редактора??...есть ли что-то лучше стандартоного WebBrawsera??

Добавлено через 7 часов 30 минут
как можно переписать 2 строчки так чтобы всё скомпилировалось и работало


Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  NPageControl: TPageControl;
  NTab: TTabSheet;
  NRichEdit: TRichEdit;
  i: integer;
  NWebBrowser:TWebBrowser;
begin
//  if OpenDialog1.Execute then
  begin
  // создаем новый TabSheet
    NTab := TTabSheet.Create(PageControl1);
    with NTab do
    begin
      PageControl := PageControl1;
      Caption := 'Закладка ' + IntToStr(PageControl1.Tag + 1);
      Name := 'Page' + IntToStr(PageControl1.Tag);
    end;
  NPageControl := TPageControl.Create(NTab);
 
  with NPageControl do
  begin
    Parent := NTab;
    Align := alClient;
    TabPosition:=tpLeft;
    Name := 'PageControl' + IntToStr(PageControl1.Tag);
  end;
  for i := 0 to 1 do
  begin
    NTab := TTabSheet.Create(NPageControl);
    with NTab do
    begin
      PageControl := NPageControl;
      Name := 'Page' + IntToStr(i);
    end;
  end;
  NPageControl.Pages[0].Caption:='код';
  NPageControl.Pages[1].Caption:='виз';
 
 
 
  // создаем новый RichEdit на NPageControl.Pages[0]
  NRichEdit := TRichEdit.Create(NPageControl.Pages[0]);
  with NRichEdit do
  begin
    Parent := NPageControl.Pages[0];
    Align := alClient;
    Name := 'RichEdit' + IntToStr(PageControl1.Tag);
  end;
 
 
    // создаем новый WebBrowser NPageControl.Pages[1]
// ...
 NWebBrowser := TWebBrowser.Create(NPageControl.Pages[1]);
  with NWebBrowser do
  begin
    Parent := NPageControl.Pages[1]; {1-ая строчка её вроде можно переписать вот так NPageControl.Pages[1].InsertControl(NWebBrowser);}
    Align := alClient;
    Name := 'WebBrowser' + IntToStr(PageControl1.Tag); {2-ая строка}
  end;
 
 
 
 
  PageControl1.Tag := PageControl1.Tag + 1;
end;
//end;
end;
0
FIL
Модератор
3419 / 2555 / 726
Регистрация: 19.09.2012
Сообщений: 7,923
25.12.2012, 08:58 9
С WebBrowser никогда не работал. Оказывается у него есть некоторые странности...
Получилось так:
Delphi
1
2
3
4
5
  // ñîçäГ*ГҐГ¬ Г*îâûé WebBrowser NPageControl.Pages[1]
  NWebBrowser := TWebBrowser.Create(NPageControl.Pages[1]);
  TWinControl(NWebBrowser).Parent := NPageControl.Pages[1];
  TWinControl(NWebBrowser).Name := 'WebBrowser' + IntToStr(PageControl1.Tag);
  NWebBrowser.Align := alClient;
ну и модуль SHDocVw в uses должен быть подключен.
0
alexandr017
2 / 2 / 2
Регистрация: 09.12.2011
Сообщений: 58
25.12.2012, 14:55  [ТС] 10
Я так уже пробовал, однако имя не присваивается...это можно проверить так:
при создании нового RichEdit можно использовать вместо строчки Name := 'RichEdit' + IntToStr(PageControl1.Tag); строчку TWinControl(NRichEdit).Name := 'RichEdit' + IntToStr(PageControl1.Tag); суть от этого вроде не меняется..после любой из этих двух строчек я пишу showmessage (NRichEdit.Name); и всё как надо срабатывает..выводитсяя имя созданного RichEdit (RichEdit0, RichEdit1... )....
терерь мы пытаемся создать WebBrowser (присвоить имя) при помощи строчки TWinControl(NWebBrowser).Name := 'WebBrowser' + IntToStr(PageControl1.Tag); после этого проверяем наше имя, то есть опять пишем showmessage (NWebBrowser.Name); и здесь вместо имени нам выдоется сообщение "Элемент управления обозревателя Microsoft"....причём если вообще не пытаться присваивать имя, то есть убрать эту строчку и после этого опять писать showmessage (NWebBrowser.Name); то нам будет выведено это же сообщения, из этого можно предположить что TWinControl(NWebBrowser).Name := 'WebBrowser' + IntToStr(PageControl1.Tag); не работает..то есть имя не присваивается....


похожая проблева есть здесь:
http://www.delphisources.ru/forum/showthread.php?t=11361
однако я не совсем понимаю как там предлогается решить данную проблему
0
DaMortum
243 / 146 / 31
Регистрация: 07.10.2012
Сообщений: 401
25.12.2012, 16:10 11
Узнать имя можно так
Delphi
1
TOleControl(NWebBrowser).Name
1
alexandr017
2 / 2 / 2
Регистрация: 09.12.2011
Сообщений: 58
25.12.2012, 16:50  [ТС] 12
спасибо..так дейсвительно всё работает...однако теперь другая ошибка...не могу загрузить файл в WebBrawser


вот код добавления новой вкладки
Delphi
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
procedure TForm1.Button1Click(Sender: TObject);
var
  NPageControl: TPageControl;
  NTab: TTabSheet;
  NRichEdit: TRichEdit;
  i: integer;
  NWebBrowser:TWebBrowser;
begin
//  if OpenDialog1.Execute then
  begin
  // создаем новый TabSheet
    NTab := TTabSheet.Create(PageControl1);
    with NTab do
    begin
      PageControl := PageControl1;
      Caption := 'Закладка ' + IntToStr(PageControl1.Tag + 1);
      Name := 'Page' + IntToStr(PageControl1.Tag);
    end;
  NPageControl := TPageControl.Create(NTab);
 
  with NPageControl do
  begin
    Parent := NTab;
    Align := alClient;
    TabPosition:=tpLeft;
    Name := 'PageControl' + IntToStr(PageControl1.Tag);
  end;
  for i := 0 to 1 do
  begin
    NTab := TTabSheet.Create(NPageControl);
    with NTab do
    begin
      PageControl := NPageControl;
      Name := 'Page' + IntToStr(i);
    end;
  end;
  NPageControl.Pages[0].Caption:='код';
  NPageControl.Pages[1].Caption:='виз';
 
 
 
  // создаем новый RichEdit на NPageControl.Pages[0]
  NRichEdit := TRichEdit.Create(NPageControl.Pages[0]);
  with NRichEdit do
  begin
    Parent := NPageControl.Pages[0];
    Align := alClient;
    Name := 'RichEdit' + IntToStr(PageControl1.Tag);
  end;
 
 
    // создаем новый WebBrowser NPageControl.Pages[1]
// ...
  NWebBrowser := TWebBrowser.Create(NPageControl.Pages[1]);
  TWinControl(NWebBrowser).Parent := NPageControl.Pages[1];
  TWinControl(NWebBrowser).Name := 'WebBrowser' + IntToStr(PageControl1.Tag);
  NWebBrowser.Align := alClient;
 
  PageControl1.Tag := PageControl1.Tag + 1;
end;
//end;
  ShowMessage(TControl(NWebBrowser).Name);
end;
а вот код загрузки (RichEdit норм грузит... вот ы браузер не хочет)

Delphi
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
procedure TForm1.Button2Click(Sender: TObject);
var
rrr:integer;
  s: string;
  RE: TRichEdit;
  WB:TWebBrowser;
begin
  if OpenDialog1.Execute then
  begin
    // Получаем индекс текущей вкладки
    s := copy(PageControl1.Pages[PageControl1.ActivePageIndex].Name, 5,
              Length(PageControl1.Pages[PageControl1.ActivePageIndex].Name) - 4);
 
    // Находим нужный компонент и присваиваем его (компонент) переменной для удобства дальнейшей работы
    RE := (PageControl1.FindComponent('Page' + s).FindComponent('PageControl' + s).
           FindComponent('Page0').FindComponent('RichEdit' + s) as TRichEdit);
 
    // Дальнейшая работа с компонентом
    RE.Lines.LoadFromFile(OpenDialog1.FileName);
 
 
 
    // Находим нужный компонент и присваиваем его (компонент) переменной для удобства дальнейшей работы
      WB := (PageControl1.FindComponent('Page' + s).FindComponent('PageControl' + s).
           FindComponent('Page0').FindComponent('WebBrowser' + s) as TWebBrowser);
 
  WB.Navigate(OpenDialog1.FileName);
//ShowMessage(TControl(WB).Name);
 
  end;
end;
Добавлено через 6 минут
вроде исправил...нужно было в строчке

WB := (PageControl1.FindComponent('Page' + s).FindComponent('PageControl' + s).
FindComponent('Page1').FindComponent('WebBrowser' + s) as TWebBrowser);
истравить "Page0" на "Page1"...
0
Бельчонок777
30 / 0 / 1
Регистрация: 29.09.2009
Сообщений: 56
23.09.2013, 15:08 13
Подскажите, пожалуйста, как после динамического создания PageControl, в нём создаются закладки TabSheet, а в каждой закладке по-одному StringGrid - по закрытию формы удалить эти самые StringGrid?
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26149 / 17526 / 6950
Регистрация: 22.10.2011
Сообщений: 30,864
Записей в блоге: 6
23.09.2013, 15:57 14
Если при создании гридов им были правильно назначены Owner-ы (ну, то есть, если при вызове конструктора передавался в него не nil, а именно тот объект, который гридом будет владеть), то за удаление они и будут отвечать. Программисту ничего делать не надо в таком случае...
1
Бельчонок777
30 / 0 / 1
Регистрация: 29.09.2009
Сообщений: 56
23.09.2013, 16:15 15
Цитата Сообщение от UI Посмотреть сообщение
Если при создании гридов им были правильно назначены Owner-ы (ну, то есть, если при вызове конструктора передавался в него не nil, а именно тот объект, который гридом будет владеть), то за удаление они и будут отвечать. Программисту ничего делать не надо в таком случае...
В Delphi все так и есть, а в Лазарусе иная картина. Там при повторном входе в форму (после того, как ее до этого закрыли) идет сообщение, что StrigGrid уже есть...
Извините, что сразу не уточнила, что речь идет о Лазарусе. Просто подумала, что и в дельфевом варианте не помешает почистить динамически созданные объекты, хотя там, в принципе, все нормально работает...
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
26149 / 17526 / 6950
Регистрация: 22.10.2011
Сообщений: 30,864
Записей в блоге: 6
23.09.2013, 16:16 16
Для Лазаруса - задавай вопрос здесь: http://www.cyberforum.ru/lazarus/ Желательно - с фрагментами кода (как именно создается форма, как она показывается и как на ней создаются гриды)...
1
northener
пофигист широкого профиля
3424 / 2324 / 630
Регистрация: 15.07.2013
Сообщений: 13,753
23.09.2013, 19:46 17
Цитата Сообщение от Бельчонок777 Посмотреть сообщение
Там при повторном входе в форму (после того, как ее до этого закрыли) идет сообщение, что StrigGrid уже есть
В Дельфи то же самое.
0
Бельчонок777
30 / 0 / 1
Регистрация: 29.09.2009
Сообщений: 56
24.09.2013, 09:33 18
Цитата Сообщение от northener Посмотреть сообщение
В Дельфи то же самое.
Нет. Прикладываю проект дельфевый, он работает нормально.
0
Вложения
Тип файла: rar test.rar (193.5 Кб, 89 просмотров)
24.09.2013, 09:33
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2013, 09:33

Цвет вкладок в pagecontrol
Как изменить цвет вкладки в pagecontrol при наведении на нее мыши?То есть я...

Прокрутка вкладок PageControl'a
Всем Привет!:) Есть PageControl с вкладками расположенными справа, но не...

Программное удаление вкладок PageControl
Уважаемые программисты помогите пожалуйста. Как удалять закладки TabSheet в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru