Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.20;
Скачать: CL | DM;

Вниз

динамический pagecontol и событие к нему   Найти похожие ветки 

 
Тимоха111   (2010-12-27 02:58) [0]

Всем доброго времени суток!
Создаю 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 событие?


 
Тимоха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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
15-1291861735
Арт
2010-12-09 05:28
2011.03.20
Драйвер аудио...


2-1293381154
cross
2010-12-26 19:32
2011.03.20
обрезается строка (string)


15-1291659561
bss
2010-12-06 21:19
2011.03.20
Как определяют PR и тИЦ сайтов?


15-1291293154
stas
2010-12-02 15:32
2011.03.20
работа с 2-мя мониторами


6-1235727155
d@vinchi
2009-02-27 12:32
2011.03.20
TTcpServer: Ответ на запрос - что не так?