Добрый день, столкнулся с проблемой, опишу немного задачу.
Чтобы не вникать в дебри, вкратце я динамически создаю pagecontrol и табы на нем, также динамически, на табах создается компонент THTMLStaticText.
| Код | pcontrol := TRzPageControl.Create(nil); pcontrol.Parent := TabParent; pcontrol.Align := alClient; pcontrol.TabOrientation := toLeft; pcontrol.TabStyle := tsRoundCorners; pcontrol.OnChange := OnButtonClick;
for i := 0 to length(mymass) - 1 do begin TabSheet := TrzTabSheet.Create(nil); TabSheet.Caption := mymass[i][0]; TabSheet.PageControl := pcontrol;
html_text := THTMLStaticText.Create(self); html_text.PictureContainer := pc; html_text.Align := alClient; html_text.Parent := tabsheet; html_text.Name := 'html_text' + IntToStr(i); end;
|
Есть массив, при щелчке на один из табов срабатывает событие onchange и на выбранном табе в компонент html_text пишет текст из массива.
Обработчик события: procedure TForm1.OnButtonClick(Sender: TObject); begin if Sender is TRzPageControl then (findcomponent(format('html_text%d', [(Sender as TRzPageControl).TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[(Sender as TRzPageControl).TabIndex][1]); end;
Все работает хорошо, но теперь я захотел функцию по динамическому созданию пэйджев и табов запихнуть в процедуру, чтобы вызывать когда надо, в параметрах указал
| Код | procedure TForm1.ADDForum(PageC:TRzPageControl;OnMyChange:TNotifyEvent); var .... begin TabParent := TRzTabSheet.Create(nil); TabParent.PageControl := PageC; TabParent.Caption := 'nw'; TabParent.Align := alClient; pcontrol := TRzPageControl.Create(nil); pcontrol.Parent := TabParent; pcontrol.Align := alClient; pcontrol.TabOrientation := toLeft; pcontrol.TabStyle := tsRoundCorners; pcontrol.OnChange := OnMyChange;
for i := 0 to length(mymass) - 1 do begin TabSheet := TrzTabSheet.Create(nil); TabSheet.Caption := mymass[i][0]; TabSheet.PageControl := pcontrol;
html_text := THTMLStaticText.Create(nil); html_text.PictureContainer := pc; html_text.Align := alClient; html_text.Parent := tabsheet; html_text.Name := 'html_text' + IntToStr(i); end; pcontrol.TabIndex := 0; end;
|
В случае с созданием отдельной процедуры, не работает обработчик события на смену вкладок, компилятор ругается и выводит Access Violation на строчке
| Код | if Sender is TRzPageControl then (findcomponent(format('html_text%d', [(Sender as TRzPageControl).TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[(Sender as TRzPageControl).TabIndex][1]);
|
Знающие, подскажите где не правильно сделал? |