Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];

Вниз

Динамическое создание 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.084 c
15-1455139804
Юрий
2016-02-11 00:30
2017.01.15
С днем рождения ! 11 февраля 2016 четверг


2-1423778824
Aleks
2015-02-13 01:07
2017.01.15
получить список объектов в чужом окне


15-1451560078
Kerk
2015-12-31 14:07
2017.01.15
С новым годом!


4-1281020267
Danger
2010-08-05 18:57
2017.01.15
SQLite в winapi-приложении


2-1426067911
aka
2015-03-11 12:58
2017.01.15
TObject через ссылку





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский