Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Динамическое создание TChromium   Найти похожие ветки 

 
Vlad   (2015-05-01 20:30) [0]

Здравствуйте.

Пробую динамически создавать Chromium следующим способом:

procedure TChromF.NewTab(num: integer);
var ts: TTabSheet; c: TChromium;
begin
ts := TTabSheet.Create(CF_PC);
ts.Name := "ts"+IntToStr(num);
ts.PageControl := CF_PC;
c := TChromium.Create(CF_PC.Pages[num-1]);
c.Parent := CF_PC.Pages[num-1];
c.Align := alClient;
c.Name := "c"+IntToStr(num);
end;

Создается вкладка( ts2 ) в списке компонентов которой есть c2 - TChromium( хотя на вид не ясно есть он или нет ). А при обращении к нему, например:

procedure TChromF.CF_URL_CBKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var cnum: integer; chm: tchromium;
begin
cnum := CF_PC.ActivePageIndex+1;
// по нажатию на Enter переходим по адресу
if Key=13 then begin
chm := TChromium(FindComponent("c"+IntToStr(cnum)));
chm.Load(CF_URL_CB.Text); end;
end;

На строке chm.Load происходит ошибка. Нашел в сети пример:

procedure TForm1.Button1Click(Sender: TObject);
var
 NPageControl: TPageControl;
 NTab: TTabSheet;
 Chromium: TChromium;
 i: integer;
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 0 do
 begin
   NTab := TTabSheet.Create(NPageControl);
   with NTab do
   begin
     PageControl := NPageControl;
     Name := "Page" + IntToStr(i);
   end;
 end;
 NPageControl.Pages[0].Caption:="виз";

 Chromium := TChromium.Create(NPageControl.Pages[0]);
 Chromium.Parent := NPageControl.Pages[0];
 Chromium.Name := "Chromium" + IntToStr(PageControl1.Tag);
 Chromium.Align := alClient;

 PageControl1.Tag := PageControl1.Tag + 1;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 s: string;
 Chm: TChromium;
begin
//  if OpenDialog1.Execute then
 begin
   // Получаем индекс текущей вкладки
   s := copy(PageControl1.Pages[PageControl1.ActivePageIndex].Name, 5,
             Length(PageControl1.Pages[PageControl1.ActivePageIndex].Name) - 4);

   Chm := (PageControl1.FindComponent("Page" + s).FindComponent("PageControl" + s).
          FindComponent("Page0").FindComponent("Chromium" + s) as TChromium);

   Chm.Load(Edit1.Text);

 end;
end;

Проверил - работает, вкладки создаются и Chromium тоже. Вопрос в том, что за манипуляции такие делаются при нажатии на button1. Зачем там создается NpageControl, цикл вообще бессмысленный ( от 0 до 0 - 1 проход ведь всего). Но в любом случае этот код работает, а мой нет. Подскажите чего не происходит у меня при создании Chromium, что есть в этом коде


 
Ega23 ©   (2015-05-01 23:03) [1]

Вдумчиво вглядываться лень, но на первый взгляд ты при создании Owner заем-то вкладку ставишь. А FindComponent - от формы идёт.


 
Vlad   (2015-05-02 10:05) [2]

Ничего себе и правда, спасибо. Поменял строку

c := TChromium.Create(CF_PC.Pages[num-1]);
на
c := TChromium.Create(ChromF);

и все заработало.


 
icWasya ©   (2015-05-05 11:10) [3]

Правильно
c := TChromium.Create(Self);


 
Ega23 ©   (2015-05-05 11:24) [4]


> Правильно
> c := TChromium.Create(Self);


Может это у него такой хитромудрый аналог ассерта на то, чтобы ChromF как синглтон работала?
Хотя в целом - согласен.



Страницы: 1 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.021 c
2-1419002742
Вован Петрович
2014-12-19 18:25
2017.01.15
Локализация ПО


15-1457219940
Eraser
2016-03-06 02:19
2017.01.15
Требуется ядерщик


15-1456494306
Rouse_
2016-02-26 16:45
2017.01.15
Нужна вычитка статьи


2-1424366803
Black7777
2015-02-19 20:26
2017.01.15
Обмен данными БД от клиентов


15-1456003937
Юрий
2016-02-21 00:32
2017.01.15
С днем рождения ! 21 февраля 2016 воскресенье