Форум: "Начинающим";
Текущий архив: 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