Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];
Вниздинамический pagecontol и событие к нему Найти похожие ветки
← →
Тимоха111 (2010-12-27 02:58) [0]Всем доброго времени суток!
Создаю pagecontrol динамически, на нем динамически создаются табыpcontrol := TPageControl.Create(nil);
pcontrol.Parent := TabParent;
pcontrol.Align := alClient;
pcontrol.OnChange := OnMyClick;
Событие onmyclickprocedure 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 событие?
← →
Тимоха111 (2010-12-27 03:04) [1]вопрос решен
(Sender as TPageControl)
← →
Германн © (2010-12-27 03:08) [2]
> Всем доброго времени суток!
> Создаю pagecontrol динамически, на нем динамически создаются
> табы
>
Ну и где код, в котором "динамически создаются табы"?
> но sender категорически отказывается
И я его понимаю. :)
← →
Тимоха111 (2010-12-27 04:11) [3]Обработчик события выглядит так:
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]);
← →
v_a_belousov (2010-12-27 04:56) [4]
> Тимоха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;
← →
v_a_belousov (2010-12-27 04:58) [5]
> Add(PageControl1, ButtonClick);
> procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
Вот в этом вопрос где ты тут используешь полученные параметры...
← →
Тимоха111 (2010-12-27 12:18) [6]парднон, да заметил, procedure ADD(PageC:TPageControl;OnMyChange:TNotifyEvent);
а вызываешь ты ADDForum(RzPageControl2,OnButtonClick);
тут я просто менял pagecontrol, решил другой попробовать и с код поперепутал, но проблема осталась. Как не использую? мне нужно создать динамически pagecontrol и присвоить его событие по смене вкладки свое событтие.
← →
Ega23 © (2010-12-27 12:35) [7]
> мне нужно создать динамически 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.
← →
Ega23 © (2010-12-27 12:42) [8]Кстати.
pcontrol := TRzPageControl.Create(nil);
.......
for i := 0 to length(mymass) - 1 do
begin
TabSheet := TrzTabSheet.Create(Self);
.....
Я всего кода не видел, возможно он и вправду корректен. Но я на 99% уверен, что у тебя мемлик.
← →
Тимоха111 (2010-12-27 13:40) [9]Вы правы! Nil был виною)))
поставил self - заработало!!! Спасибо Ega23
← →
Ega23 © (2010-12-27 13:59) [10]
> Вы правы! Nil был виною)))
Nil был виною тому, что FindComponent не работал.
Но, ИМХО, идеология всё равно выбрана неверно.
← →
Тимоха111 (2010-12-27 16:42) [11]Не могли бы вы подсказать как будет верно для данной задачи?
Спасибо
← →
Ega23 © (2010-12-27 16:44) [12]
> Не могли бы вы подсказать как будет верно для данной задачи?
Дык задачу озвучить надо, для начала.
← →
Тимоха111 (2010-12-27 16:57) [13]Есть массив в него попадают текстовые данные. Далее я создаю динамически pagecontrol и табу к немы, на этих табах создаются компонеты для вывода текста из массива. Собственно все, потом по табам щелкаю и вижу что в массиве.
← →
Ega23 © (2010-12-27 17:01) [14]Ну так и храни свой PageControl в видк ссылки, в чём проблема?
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.005 c