![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
динамический pagecontol и событие к нему [D7, XP]
Тимоха111 © (2010-12-27 02:58:00)Всем доброго времени суток!
Создаю pagecontrol динамически, на нем динамически создаются табы
pcontrol := TPageControl.Create(nil);
pcontrol.Parent := TabParent;
pcontrol.Align := alClient;
pcontrol.OnChange := OnMyClick;
Событие onmyclick
procedure TForm1.OnMyClick(Sender: TObject);
begin
if Sender is TPageControl then
(findcomponent(format('html_text%d', [Sender.TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[Sender.TabIndex][1]);
end;
но sender категорически отказывается воспринимать pagecontrol, как прикрутить вновь созданному pagecontrol событие?
Ega23 (2010-12-27 17:01:00) [1]Ну так и храни свой PageControl в видк ссылки, в чём проблема?
Тимоха111 (2010-12-27 16:57:00) [2]Есть массив в него попадают текстовые данные. Далее я создаю динамически pagecontrol и табу к немы, на этих табах создаются компонеты для вывода текста из массива. Собственно все, потом по табам щелкаю и вижу что в массиве.
Ega23 (2010-12-27 16:44:00) [3]
> Не могли бы вы подсказать как будет верно для данной задачи?
Дык задачу озвучить надо, для начала.
Тимоха111 (2010-12-27 16:42:00) [4]Не могли бы вы подсказать как будет верно для данной задачи?
Спасибо
Ega23 (2010-12-27 13:59:00) [5]
> Вы правы! Nil был виною)))
Nil был виною тому, что FindComponent не работал.
Но, ИМХО, идеология всё равно выбрана неверно.
Тимоха111 (2010-12-27 13:40:00) [6]Вы правы! Nil был виною)))
поставил self - заработало!!! Спасибо Ega23
Ega23 (2010-12-27 12:42:00) [7]Кстати.
pcontrol := TRzPageControl.Create( nil);
.......
for i := 0 to length(mymass) - 1 do
begin
TabSheet := TrzTabSheet.Create( Self);
.....
Я всего кода не видел, возможно он и вправду корректен. Но я на 99% уверен, что у тебя мемлик.
Ega23 (2010-12-27 12:35:00) [8]
> мне нужно создать динамически pagecontrol и присвоить его
> событие по смене вкладки свое событтие.
unit Unit3;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, ComCtrls;
type
TForm3 = class(TForm)
Button1: TButton;
Panel1: TPanel;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
private
procedure OnPageControlChange(Sender: TObject);
end;
var
Form3: TForm3;
implementation
{$R *.dfm}
procedure TForm3.FormCreate(Sender: TObject);
var
pc: TPageControl;
ts: TTabSheet;
i: Integer;
begin
pc := TPageControl.Create(Self);
pc.Parent := Panel1;
pc.Align := alClient;
pc.OnChange := OnPageControlChange;
for i := 1 to 5 do
begin
ts := TTabSheet.Create(Self);
ts.PageControl := pc;
ts.Caption := 'Tab' + IntToStr(i);
end;
end;
procedure TForm3.OnPageControlChange(Sender: TObject);
begin
if Sender is TPageControl then
Label1.Caption := TPageControl(Sender).ActivePage.Caption;
end;
end.
Тимоха111 (2010-12-27 12:18:00) [9]парднон, да заметил, procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
а вызываешь ты ADDForum(RzPageControl2,OnButtonClick);
тут я просто менял pagecontrol, решил другой попробовать и с код поперепутал, но проблема осталась. Как не использую? мне нужно создать динамически pagecontrol и присвоить его событие по смене вкладки свое событтие.
v_a_belousov (2010-12-27 04:58:00) [10]
> Add(PageControl1, ButtonClick);
> procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
Вот в этом вопрос где ты тут используешь полученные параметры...
v_a_belousov (2010-12-27 04:56:00) [11]
> Тимоха111
Я не знаю что ты там делаешь... целиком ты ничего не показываешь!!!
Почему у тебя
procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
а вызываешь ты ADDForum(RzPageControl2,OnButtonClick);
Зачем тебе параметры процедуре если ты их не используешь...
pcontrol := TRzPageControl.Create(nil);
pcontrol.OnChange := OnButtonClick;
И попробовал сам набросать примерно то что у тебя все работает:
procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
var pcontrol: TPageControl;
TabSheet: TTabSheet; i: integer;
begin
pcontrol := TPageControl.Create(nil);
pcontrol.Top := 0;
pcontrol.Left := 0;
pcontrol.Width := 300;
pcontrol.Height := 250;
pcontrol.OnChange := Form1.ButtonClick;
Form1.InsertControl(pcontrol);
for i := 0 to 3 do
begin
TabSheet := TTabSheet.Create(nil);
TabSheet.Caption := 'Çàêëàäêà ¹'+IntToStr(i+1);
TabSheet.PageControl := pcontrol;
end;
end;
procedure TForm1.ButtonClick(Sender: TObject);
begin
if Sender is TPageControl then
TLabel(FindComponent('Label'+IntToStr(TPageControl(Sender).TabIndex))).Caption := IntToStr(TPageControl(Sender).TabIndex);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Add(PageControl1, ButtonClick);
end;
Тимоха111 (2010-12-27 04:11:00) [12]Обработчик события выглядит так:
procedure TForm1.OnButtonClick(Sender: TObject);
begin
if Sender is TPageControl then
(findcomponent(format('html_text%d', [(Sender as TPageControl).TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[(Sender as TPageControl).TabIndex][1]);
end;
И все вроде ничего работало, пока не решил я создать отдельную процедуру создания pagecontrol и табов к нему.
procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
...
...
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(Self);
TabSheet.Caption := mymass[i][0];
TabSheet.PageControl := pcontrol;
...
end;
Вызываю:
ADDForum(RzPageControl2,OnButtonClick);
Вылетает ошибка AccessViolation ....
компилятор показывает на строчку
(findcomponent(format('html_text%d', [(Sender as TPageControl).TabIndex])) as THTMLStaticText).HTMLText.Text := (mymass[(Sender as TPageControl).TabIndex][1]);
Германн (2010-12-27 03:08:00) [13]
> Всем доброго времени суток!
> Создаю pagecontrol динамически, на нем динамически создаются
> табы
>
Ну и где код, в котором "динамически создаются табы"?
> но sender категорически отказывается
И я его понимаю. :)
Тимоха111 (2010-12-27 03:04:00) [14]вопрос решен
(Sender as TPageControl)